If we try to get a range of values of a curve domain and supply as parameters for perpendicular frame creation the algorithm works fine for usual curves but for the circles it doesn’t.
It’s all about the domain of the curve. Grasshopper is funny about using the domain vs the length or some combination of the two. Right click and “reparameterize” to reset all of the curve domains to go between 0 and 1
If you use a unit circle it doesn’t work like that but if you specify a radius it uses either the radius, or the length, or a multiplication of some combination of those things. It’s not just circles either. Polylines, nurbs curves, lines, closed vs open, they all behave differently. Hence “reparameterize”
You’re seeing a difference because the circle is converted into a curve. That step changes the domain from (0 \mapsto 2\pi) to (0 \mapsto \text{length}).
This could have been more consistent, but it’s the way Rhino works and I either chose not to override it or (more likely) didn’t think about it at all.