# Arc center IJ

Hello I need add a arc with starPoint/endPoint and center ij

``````                Rhino.Geometry.Point3d start = new Rhino.Geometry.Point3d(0, 0, 0);
Rhino.Geometry.Point3d  end = new Rhino.Geometry.Point3d(0, 500, 0 );
Rhino.Geometry.Point3d Center = new Rhino.Geometry.Point3d(-106, 250, 0);
Rhino.Geometry.Arc arc = new Rhino.Geometry.Arc(start, Center, end);
``````

There is any away?

https://developer.rhino3d.com/api/RhinoCommon/html/T_Rhino_Geometry_Arc.htm
Thereâ€™s no such constructor. Simply rotate the vector start - center 90 degrees (or -90) and use starting point, tangent, end point.

Thanks,

Any pratic example?

Here is a Python sample. Iâ€™ll let you convert it to C#.

``````import System
import Rhino
import scriptcontext as sc

center = Rhino.Geometry.Point3d(-106.0, 250.0, 0.0)
start  = Rhino.Geometry.Point3d(0.0, 0.0, 0.0)
end = Rhino.Geometry.Point3d(0.0, 500.0, 0.0)

#

xaxis = start - center
xaxis.Unitize()

yaxis = Rhino.Geometry.Vector3d.CrossProduct(Rhino.Geometry.Vector3d.ZAxis, xaxis)
yaxis.Unitize()

plane = Rhino.Geometry.Plane(center, xaxis, yaxis)

dir = end - center;
dir.Unitize()

dot = Rhino.RhinoMath.Clamp(xaxis * dir, -1.0, 1.0)
angle = System.Math.Acos(dot)

yplane = Rhino.Geometry.Plane(plane.Origin, plane.YAxis)
dist = yplane.ValueAt(end)
if dist < 0.0:
angle = (System.Math.PI * 2.0) - angle

sc.doc.Views.Redraw()
``````

â€“ Dale

Hello @dale

This is Ok, I only need the same function on C# for the radius?

Thanks

Sorry , my mistake , is working, Thanks.

Hello @dale

I make some tries with some points with on same Y positon and the result is ok, the problem
is when the point is no the same Y positon like this:

On the right side itâ€™s good, on the left side there should have been an arc like red line,
and the all original points is on 0 Z position, this arc have some diferent Z point.

this is my code:

``````               Rhino.Geometry.Point3d start = new Rhino.Geometry.Point3d(origemX, origemY,
origemY);
Rhino.Geometry.Point3d  end = new Rhino.Geometry.Point3d(X, Y, Z );
Rhino.Geometry.Point3d Center = new Rhino.Geometry.Point3d(I, J, K);

var xaxis = start - Center;
xaxis.Unitize();

var yaxis = Rhino.Geometry.Vector3d.CrossProduct(Rhino.Geometry.Vector3d.ZAxis,
xaxis);
yaxis.Unitize();
Rhino.Geometry.Plane plane =  new Rhino.Geometry.Plane(Center, xaxis, yaxis);

var dir = end - Center;
dir.Unitize();

var dot = Rhino.RhinoMath.Clamp(xaxis * dir, -1.0, 1.0);
var angle = System.Math.Acos(dot);

Rhino.Geometry.Plane yplane = new Rhino.Geometry.Plane(plane.Origin, plane.YAxis);
var dist = yplane.ValueAt(end);

if (dist < 0.0)
angle = (System.Math.PI * 2.0) - angle;
Rhino.Geometry.Arc arc = new Rhino.Geometry.Arc(plane, radius, angle);

``````

I canâ€™t help with what isnâ€™t working without have a way to repeat (here) what you are seeing.

That said, here is another sample you might find helpful.

SampleCsArc.cs

â€“ Dale

`````` private void RunScript(Point3d start, Point3d center, Point3d end, ref object A)
{
// Center must be restricted to the mediatrix of the start-end segment.
// Otherwise it cannot be the center of an arc defined by its two ends.
Plane plane = new Plane(start, end, center);
Line ln = new Line((start + end) / 2, plane.YAxis, 1);
center = ln.ClosestPoint(center, false);

Vector3d vs = start - center;
Vector3d ve = end - center;
Vector3d nor = Vector3d.CrossProduct(vs, ve);
Vector3d tan = Vector3d.CrossProduct(nor, vs);
A = new Arc(start, tan, end);

}``````

@dale

Thanks, I have mistake on start point , I have:
Rhino.Geometry.Point3d start = new Rhino.Geometry.Point3d(origemX, origemY, origemY);
Is supose:
Rhino.Geometry.Point3d start = new Rhino.Geometry.Point3d(origemX, origemY, origemZ);

@Dani_Abalde thank you.

hello @dale

I was working a little on your first example, and I have a problem that I am not able to solve.

The problem is when the arc direction reverses â€śclockwise and anticlockwiseâ€ť,

Seams wend is â€śclockwiseâ€ť the code make arc reverse to star/end point, I know beforehand if I want
clockwise or anticlockwise, what can i change?

Thanks.

The direction of an arc curve is counter-clockwise in relation to the plane on which it lies. In my initial Python sample, I used the world-xy plane.

â€“ Dale