La classe Curve ha il seguente metodo: Curve.ExtremeParameters Method
Che in pratica restituisce tutti i parametri laddove la tangente locale sulla curva è perpendicolare al vettore fornito.
Come specificato dal metodo, nel caso di curve non periodiche il metodo restituirà sempre anche gli endpoints (anche se il discorso della perpendicolarità non sia presente)…
Da qui due soluzioni:
c# quad points.gh (8,1 KB)
Il primo, banale monoriga:
private void RunScript(Curve C, Vector3d V, ref object t)
{
t = C.ExtremeParameters(V);
}
Il secondo, esclude i casi dove manca la perpendicolarità tra tangente e vettore fornito:
private void RunScript(Curve C, Vector3d V, ref object t)
{
double[] T = C.ExtremeParameters(V);
List<double> T2 = new List<double>();
foreach(double d in T){
double a = Rhino.Geometry.Vector3d.VectorAngle(C.TangentAt(d), V);
if(Math.Abs(a - Math.PI / 2) < this.RhinoDocument.ModelAbsoluteTolerance){
T2.Add(d);
}
}
t = T2;
}