# The closest point to the curve

I need to find out the closest point on the curve… The point that the ClosestPoint () method used in the curve class is not the closest point… I don’t know what’s going on.

Can you post an example of this? I think it’s hard to tell what is going on without the geometry and code.

-Willem

get closest point on curve:

const ON_Curve* tempCurve =…;
ON_3dPoint pt_closest;
double t=0.0;
if (tempCurve->GetClosestPoint(pt,&t))
{
pt_closest=tempCurve->PointAt(t);
} ``````       Curve s_cur = s_obj.Curve(); //Here is the object converted to the curve

Curve g_cur = g_obj.Curve();//Here is the object converted to the curve

//The reconstructed curves are obtained from NurbsCurve

NurbsCurve n_cur1 = g_cur.ToNurbsCurve().Rebuild(s_cur.ToNurbsCurve().Points.Count,3,true);
NurbsCurve n_cur2 = g_cur.ToNurbsCurve().Rebuild(g_cur.ToNurbsCurve().Points.Count,3,true);

//The closest point on the curve obtained from the control point to curve 1 is on the curve 2.

List<Point3d> c_pt= new List<Point3d>();
for (int i = 0; i < g_n_cur.Points.Count; i++)
{
double t;
n_cur2.ClosestPoint(n_cur1.Points[i].Location, out t);
Point3d pt = n_cur2.PointAt(t);
}
``````

## The above is a section of code, can get to the point to add to the Rhino is always wrong, all the points are on the Curve1 ``````  NurbsCurve cur2 = g_cur.ToNurbsCurve().Rebuild(s_cur.ToNurbsCurve().Points.Count,3,true);
NurbsCurve cur1 = g_cur.ToNurbsCurve().Rebuild(g_cur.ToNurbsCurve().Points.Count,3,true);

List<Point3d> c_pt = new List<Point3d>();
for (int i = 0; i < cur1.Points.Count; i++)
{
double t;
cur2.ClosestPoint(cur1.Points[i].Location, out t);
}`````` NurbsCurve cur1 = g_cur.ToNurbsCurve().Rebuild(s_cur.ToNurbsCurve().Points.Count,3,true);
NurbsCurve cur2 = g_cur.ToNurbsCurve().Rebuild(g_cur.ToNurbsCurve().Points.Count,3,true);
List c_pt = new List();
for (int i = 0; i < cur2.Points.Count; i++)
{
double t;
cur1.ClosestPoint(cur2.Points[i].Location, out t);
Point3d pt = s_n_cur.PointAt(t);
}

``````       NurbsCurve cur1 = g_cur.ToNurbsCurve().Rebuild(s_cur.ToNurbsCurve().Points.Count,3,true);
NurbsCurve cur2 = g_cur.ToNurbsCurve().Rebuild(g_cur.ToNurbsCurve().Points.Count,3,true);

List<Point3d> c_pt = new List<Point3d>();

for (int i = 0; i < cur1.Points.Count; i++)
{
double t;
cur2.ClosestPoint(cur1.Points[i].Location, out t);
Point3d pt = s_n_cur.PointAt(t);
}``````
``````       NurbsCurve cur1 = g_cur.ToNurbsCurve().Rebuild(s_cur.ToNurbsCurve().Points.Count,3,true);
NurbsCurve cur2 = g_cur.ToNurbsCurve().Rebuild(g_cur.ToNurbsCurve().Points.Count,3,true);

List<Point3d> c_pt = new List<Point3d>();

for (int i = 0; i < cur1.Points.Count; i++)
{
double t;
cur2.ClosestPoint(cur1.Points[i].Location, out t);
Point3d pt = cur2.PointAt(t);