Arc Tangent Constraint Goal

Hi @DanielPiker,
I saw in your video of constraints and this kind of “Fillet” works pretty well with the Arc Centre, does this example is available
or is it just a line 90º constraint with the arc centre and the Arc is generated post K2solver?

How does this Arc Tangent To Lines constraint work? Is there any Goal for it?

Then, I would like to combine it with the Custom Poly SumLenght Goal but this only work with polylines, please I’d like your Custom Goal also work with Curves that are conformed with Arcs and Lines :pray:t2: thank you in advance!

… just to not leave this unanswered…

You can see most of Kangaroo structure like:

  • a list of particles (points)
  • a list of rules that apply forces to those particles

… there are exceptions, but this is the basic idea overall.

Probably the first one.
Daniel maybe created a couple of segments sharing an end and with equal length goal (the two end of the arc to the center, two radiuses).
Then for each segment he added an angle constraint of 90°.

arc tangent (14.5 KB)

1 Like

thank you for the response @maje90.

Only @DanielPiker could confirm that.

I imagined a preFillet Curve as an input to work with several Arcs corners.
Probably an “Arc Tangent Goal” that firstly add the Arc Centre Particle to play with Drag, then since an Arc has all the necessary information to avoid the extra lines to the Arc centre, I think the 90º and equality constraints could perform inside this new Goal.

Arc(Point3d pointA, Vector3d tangentA, Point3d pointB)

Finally could the LenghtSum Goal be adapted to work with arcs and lines?

Hi @ThomasE and @maje90

Sorry for the late reply.
In that first sketch constraints video the tangent arc was achieved with a combination of goals-
an EqualLength on the 2 radii connecting the center to the tangency points.
and 2 Angle goals keeping these radii perpendicular to their connected segments.
(with the actual arc created from the points after the solver.
However, more recently I did create a goal which also allows the arc to bend the other way (which causes problems in the simpler radius approach as the center swaps sides) and includes the arc generation in the goal output. (15.4 KB)

I haven’t yet made a length goal for arcs (or a LengthSum including for curves made of arcs and lines), but it would certainly be possible.


Thank you @DanielPiker, works pretty fine.
Since the Arc is generated inside the new TangentArc Goal, is there any way to include the ArcCenter Point to play with Grab to quick edits, probably inside the Goal. I mean without extra connected lines or points necessary need to be connected to Grab it?

Hope to see more arcs related goals in the near future, ArcLenght Goal could be the next,:crossed_fingers:t3: thank you Daniel!

1 Like

I tried to put something up … just for fun/challenge…


arc_goals (28.0 KB)
“ArcGoal” takes as input an arc curve and make it alive by splitting it into 3 segments (4points), because I think it gives it a sort of “stability” and safety for direction.
Also, a circle is a 360° arc, but with 2segments the 3 points would be co-linear, leading to uncertainty of orientation. That’s why the 4points/arc thing. But 360° arcs (circles) not implemented at all, for now.
No center point, @ThomasE , sorry.
(Also kangaroo usually merge particles, a center point might merge with other un-wanted particles, 1/3 and 2/3 point-on-arcs are less likely …)

Radius / Angle / Length input are constraints that accepts either number or domain. (Angle code totally missing for now)
Orient input accepts:
point > arc center constraint
vector > arc plane Z direction
Line > same as vector but center must lie on the infinite line
Plane > arc must lie on the plane, anywhere
Circle (this circle radius is meaningless) > same as plane but center is fixed too


a “TanGoal” that makes 2 consecutive arcs to be tangent
(arc0 endpoint must be coincident with arc1 startpoint)

A bit of “wobbling” now and then. Everything going random is not rare.
Works 3d.


Awesome WIP @maje90!!!
4 points edit is a nice touch as is the 3D manipulation. :ok_hand:t2:

With a list of Lenghts works pretty fine, some troubles when combining it with a list of Radius.

I think your TanGoal has the potential to work with lines too. So I would insist :slightly_smiling_face: on 2 “Curve” inputs instead of restricting to Arcs. The main idea is to work with Arcs and Lines.
or maybe a single list of segments as input in your Goal and the segments pairing could be inside it.

Anyway, thank you for the effort! I really appreciate it.