Se lavori sul piano (cioe’ sempre con Z costante), potresti provare cosi’:
Dati i punti A e B e il punto cliccato P
ab = rs.VectorCreate( B, A )
ap = rs.VectorCreate( P, A )
asse = rs.VectorCrossProduct( ab, ap )
su “asse” dovresti ottenere l’asse di rotazione.
Non ho provato, se vuoi vedi tu se funziona …
Il cross product (prodotto vettoriale o prodotto esterno in italiano) e’ quello che segue la regola della mano destra.
Chiudi la mano destra, poi estendi pollice, indice e medio in modo che formino tra di loro angoli di circa 90 gradi.
CrossProduct( pollice, indice ) ti da’ la direzione del medio.
(Per i sistemi di riferimento destrorsi, come quello dei piani di Rhino, abbiamo
CrossProduct( asseX, asseY ) => asseZ
CrossProduct( asseY, asseZ ) => asseX
CrossProduct( asseZ, asseX ) => asseY
Se inverti i due operandi ottieni il vettore opposto
Se gli operandi sono paralleli ottieni il vettore nullo )
Per la lunghezza del vettore ottenuto dal prodotto esterno c’entra l’angolo tra i due vettori utilizzati, ma a noi qui dovrebbe servire solo la direzione.