# Help vector

**URL:** <https://it.discourse.mcneel.com/t/help-vector/1260>\
**Category:** Scripting e Programmazione\
**Created:** [22 Agosto 2017, 10:39am UTC](https://it.discourse.mcneel.com/t/help-vector/1260 "2017-08-22T10:39:59Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [22 Agosto 2017, 10:39am UTC](https://it.discourse.mcneel.com/t/help-vector/1260/1 "2017-08-22T10:39:59Z")

</div>

saluto tutti ps e spero che non siate ancora in vacanza 😋 no dai scherzo chi può fa benissimo 🙂

ho rimandato un problemino da tempo con la speranza di capirci qualcosina in più mentre imparavo, ma ahimè non sono ancora in grado di venire a capo della soluzione da solo spero in un vostro aiuto.

in pratica in una linea retta dovrei aggiungere un punto dando una distanza specifica alla estremità  
(tipo estendi curva ma solo ricavando le coordinate per aggiungere un punto tenendo conto della direzione)

io mi sono focalizzato sui vettori ho visto la guida e sul web ma senza riuscire a ricavare granché  
a questo punto spero di non aver seguito una strada sbagliata? grazie anticipatamente . . . .

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [22 Agosto 2017, 1:59pm UTC](https://it.discourse.mcneel.com/t/help-vector/1260/2 "2017-08-22T13:59:57Z")

</div>

Ciao Salvio

Anch’io userei i vettori.

Parlando di algoritmi … e ammesso di aver capito il problema …  
Si potrebbe fare in questo modo:

1. ricavi il vettore che va dall’inizio alla fine della linea (supponendo che il punto da trovare sia dalla parte della fine)
2. lo trasformi in vettore unitario ( a scuola li chiamavano versori )
3. moltiplichi il versore per la distanza desiderata ( da fine retta a punto cercato )
4. sommi il vettore cosi’ ottenuto al punto di fine linea.

Se serve aiuto per tradurre il tutto in RhinoScript … fai un fischo. 🙂

---

<div class="post-metadata">

**Author:** ![lucio\_zadra](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/lucio_zadra/32/16361_2.png) [@lucio\_zadra](https://it.discourse.mcneel.com/u/lucio_zadra)\
**Post date:** [22 Agosto 2017, 2:32pm UTC](https://it.discourse.mcneel.com/t/help-vector/1260/3 "2017-08-22T14:32:59Z")

</div>

Non vorrei sbagliarmi ma rhinoscript ti restituisce già il vettore tangente alla curva nel punto dato (mi pare anche il rhino.startpoint e rhino.endpoint).  
Dopo verifico quando sono davanti al pc.

Ecco, i comandi sono:  
CurveCurvature  
CurveTangent

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [22 Agosto 2017, 7:08pm UTC](https://it.discourse.mcneel.com/t/help-vector/1260/4 "2017-08-22T19:08:51Z")

</div>

> [@lucio\_zadra](#):
>
> restituisce già il vettore tangente alla curva nel punto dato

Gia’ … e’ vero … ( Ma non c’e’ la faccina dello smemorato ? … Se la sono dimenticata ? 😉 )

Cosi’ semplifichiamo, meglio ancora !!! 😃

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [23 Agosto 2017, 9:57am UTC](https://it.discourse.mcneel.com/t/help-vector/1260/5 "2017-08-23T09:57:59Z")

</div>

ciao emilio ciao lucio  
grazie per i suggerimenti, scusate il ritardo ma mi sono messo a lavoro ieri sera nel tardi.

ho seguito prima la procedura di emilio, mi stavo quasi arrendendo “sai stavo quasi per fischiare ahahahah” poi per fortuna ho la testa dura ed ho fatto un’altro paio di prove e ci sono riuscito 🙂 debbo dire anche se la strada era quella che avevo intrapreso (beh in pratica avevo spulciato tutti i metodi vector) ma senza la spiegazione di combinazione e sequenza non ci sarei mai arrivato very thanks 🙂

poi stamattina mi sono messo a provare anche il suggerimento di lucio e in effetti con questi due metodi mi trovano subito il valore unitario. ma se ho capito bene dovrò usare CurveTangent per le linee rette e CurveCurvature per quelle curve. essendo che il primo su quelle curve non segue la curvatura mentre il secondo sulle rette non funziona, solo che per il secondo caso dovrò tenere presente anche la direzione della curva se no mi ritrovo il punto dalla parte inversa giusto?

---

<div class="post-metadata">

**Author:** ![lucio\_zadra](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/lucio_zadra/32/16361_2.png) [@lucio\_zadra](https://it.discourse.mcneel.com/u/lucio_zadra)\
**Post date:** [23 Agosto 2017, 10:13am UTC](https://it.discourse.mcneel.com/t/help-vector/1260/6 "2017-08-23T10:13:05Z")

</div>

Secondo me puoi usare sempre CurveTangent (tanto a te non interessa la curvatura nel punto, quindi curve curvature tu restutuisce dei valori in più per nulla…).  
Per la direzione… quello è un altro paio di maniche… non è che per caso ti stai facendo uno script per generare codice ISO da dare in pasto a un CNC, vero? 😉

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [23 Agosto 2017, 11:36am UTC](https://it.discourse.mcneel.com/t/help-vector/1260/7 "2017-08-23T11:36:39Z")

</div>

grazie della sopravvalutazione lucio ma di codici iso non so nemmeno di cosa si tratti 🙂

ritornando all’uso di CurveCurvature che in pratica imula il comando estendi con retta sia la cosa migliore da fare con una curva a prescindere (a meno che non si hanno esigenze specifiche) e ti dico che con questo metodo mi hai anticipato il secondo problema che volevo porre 🙂 PS una volta dicessi che ti capita di “azzeccare” ciò che gli altri intendono fare anche se nella loro spiegazione non sia tutto chiaro beh che dire questa volta ti sei superato lo hai fatto senza nemmeno che scrivessi il quesito ahahahah grande 🙂

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [23 Agosto 2017, 11:38am UTC](https://it.discourse.mcneel.com/t/help-vector/1260/8 "2017-08-23T11:38:03Z")

</div>

ancora grazie ad entrambi ragazzi dell’aiuto e buon appetì 🙂

---

<div class="post-metadata">

**Author:** ![lucio\_zadra](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/lucio_zadra/32/16361_2.png) [@lucio\_zadra](https://it.discourse.mcneel.com/u/lucio_zadra)\
**Post date:** [23 Agosto 2017, 12:43pm UTC](https://it.discourse.mcneel.com/t/help-vector/1260/9 "2017-08-23T12:43:04Z")

</div>

La classe non è acqua… ma prosecco! Hic! 🥂🍾

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [23 Agosto 2017, 2:23pm UTC](https://it.discourse.mcneel.com/t/help-vector/1260/10 "2017-08-23T14:23:16Z")

</div>

> [@lucio\_zadra](#):
>
> La classe non è acqua… ma prosecco! Hic! 🥂🍾

ottimo per me quello dolce 🙂

a proposito di vettori oltre a ciò detto fin’ora, per ottenere un punto in modo perpendicolare dalla linea, la rotazione vettore va bene o c’è un metodo specifico?

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [24 Agosto 2017, 11:26am UTC](https://it.discourse.mcneel.com/t/help-vector/1260/11 "2017-08-24T11:26:55Z")

</div>

> [@0904](#):
>
> per ottenere un punto in modo perpendicolare dalla linea

Hai provato con Rhino.CurveFrame() ?

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [24 Agosto 2017, 11:55am UTC](https://it.discourse.mcneel.com/t/help-vector/1260/12 "2017-08-24T11:55:40Z")

</div>

mi sa che la rotazione del vettore non va bene per quello che mi serve fare oppure non ci sono riuscito io.  
per fortuna mi è venuto in mente il metodo consigliato da lucio CurveCurvature che restituiva altre matrici e provando con la terza opzione mi restituiva il centro della curvatura che dovrebbe corrispondere sempre alla perpendicolare “credo” e da lì avendo il punto sulla curva con il centro perpendicolare eseguo la sequenza di emilio creando un vettore lo trasformo in unitario moltiplico e sommo e mi trovo il punto perpendicolare.

in mancanza di una formazione scolastica questi vettori per me sono un terreno ostico oltre che sconosciuto.  
e non finisce qui: essendo che adesso mi ritrovo sempre col dover superare il problema di riuscire a trovare la perpendicolare ad una linea essendo che come già spiegato questo metodo sulle rette non funziona 😖

> [@emilio](#):
>
> Hai provato con Rhino.CurveFrame() ?

grazie per la risposta, in verità emilio è stata la scelta che avevo fatto all’inizio prima dei vettori solo che non sapevo come poi mi potesse tornare utile. beh ora che mi ci fai ripensare, forse con il comando vettore posso vedere se riesco a creare il vettore utilizzando gli angoli del frame mmmm (era questa la tua idea?)

PS però io avevo provato CurvePerpFrame tu invece CurveFrame vedo cosa esce fuori e vi aggiorno 🙂

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [24 Agosto 2017, 5:28pm UTC](https://it.discourse.mcneel.com/t/help-vector/1260/13 "2017-08-24T17:28:01Z")

</div>

> [@0904](#):
>
> centro della curvatura che dovrebbe corrispondere sempre alla perpendicolare

Si’, il vettore da un punto sulla curva al centro di curvatura ti da’ la perpendicolare …  
o almeno una perpendicolare.  
In ogni punto la curva ha un piano perpendicolare, ogni vettore giacente sul piano e’ perpendicolare alla curva.  
Poi certo bisogna vedere quale vettore perpendicolare ti serve.  
Se e’ queloa che passa dal centro di curvatura … siamo a posto. 🙂

> [@0904](#):
>
> questo metodo sulle rette non funziona

E’ quello che stavamo dicendo.  
Tu hai certamente un piano perpendicolare alla retta ( e naturalmente l’orientamento del piano e’ costante per ogni punto della retta )  
Pero’ resta da decidere quale vettore, tra quelli giacenti sul piano, e’ quello che stai cercando … servono altre informazioni.

> [@0904](#):
>
> utilizzando gli angoli del frame

Credo che RhinoScript ti restituisca un punto e 3 vettori (gia’ pronti all’uso 🙂 ) … non credo ci siano angoli …  
… Comunque e’ sempre meglio fare una prova … per sicurezza 🙂

EDIT

> [@0904](#):
>
> questi vettori per me sono un terreno ostico

Ti capisco.  
All’inizio non sono semplici da … assimilare, ma una volta fattaci l’abitudine sono comodissimi ! 🙂

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [25 Agosto 2017, 10:11am UTC](https://it.discourse.mcneel.com/t/help-vector/1260/14 "2017-08-25T10:11:04Z")

</div>

ciao emilio grazie dell’incoraggiamento ci vuole, ci vuole proprio 🙂  
mi sono fermato col frame ed avevo ripreso il lavoro sui vettori infatti nel frattempo ieri ho passato tutta la serata a lavorare sulla rotazione del vettore, per fare una battuta ci sto girando intorno ahahahah

```
Dim A: A = Rhino.GetPoint
Dim B: B = Rhino.GetPoint
Dim C: C = Rhino.VectorCreate(A, B)
Dim D: D = Rhino.VectorUnitize(C)
Dim E: E = Array(D(0) * 5, D(1) * 5, D(2) * 5)
Dim F: F = Rhino.VectorAdd(A, E)
Rhino.AddPoint F 'fin qui con qualsiasi direzione vettore il codice funziona

Rhino.AddPoint Rhino.VectorRotate(F, 90.0, Array(0, 0, 1))

```

il codice postato sopra funziona dandomi il risultato voluto solo se il punto “A” corrisponde a (0,0,0)  
da questo punto in poi cambiando la direzione dei vettori ho fatto tutte le prove possibili su l’ultimo “Array” ma non trovo mai la soluzione giusta. “credo” che il gioco sia nell’ “1” dell’ultimo Array essendo che se il punto “A” è (0,0,0) e l’ultimo Array è (0,0,1) è funziona, presumo che se il punto “A” sia (x,y,z) l’ultimo Array dovrebbe essere (x,y,?). ho provato a cambiare anche gli assi del piano ma non sono molto pratico.

![10](https://mcneelusercontent.s3.amazonaws.com/original/2X/2/243e8329829793f0ebd81790300e6ac7bbadb9c4.jpg)

sopra ho postato un’immagine di quello che dovrebbe essere il risultato desiderato: in pratica ho una linea retta con i punti “A e B” che indicano inizio e fine direzione vettore, mentre il punto “F” è il punto tangente alla distanza desiderata fin qui OK. da qui in poi il codice mi dovrebbe ruotare il punto “F” di 90° o -90° (vedi i due punti selezionati) per rende “F” perpendicolare alla linea partendo dal punto iniziale quindi il punto “A”.

una cosa all’apparenza facile non credevo che per una rotazione mi servisse tutto questo lavoro. ho cercato anche sul web e stranamente mi sono reso conto che sui vettori non c’è molto su cui prendere spunto.

siete la mia unica ancora di salvataggio 🙂

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [25 Agosto 2017, 12:50pm UTC](https://it.discourse.mcneel.com/t/help-vector/1260/15 "2017-08-25T12:50:12Z")

</div>

Ciao Salvio

> [@0904](#):
>
> Dim E: E = Array(D(0) \* 5, D(1) \* 5, D(2) \* 5)  
> Dim F: F = Rhino.VectorAdd(A, E)  
> Rhino.AddPoint F 'fin qui con qualsiasi direzione vettore il codice funziona
> 
> Rhino.AddPoint Rhino.VectorRotate(F, 90.0, Array(0, 0, 1))

Due cose:

1. per E puoi usare Rhino.VectorScale() … e’ piu’ corto da scrivere … 😉

2. non confondere punti e vettori.  
I punti li conosci bene … hanno una posizione … e basta 🙂  
I vettori non hanno una posizione nello spazio  
Puoi considerarli come la differenza tra due posizioni  
( Infatti puoi avere un vettore sottraendo un punto da un altro … E’ quello che fa VectorCreate )  
Per avere un punto devi sempre sommare un vettore ad un punto.  
Personalmente penso a un vettore come a uno spostamento, o tralsazione che dir si voglia …  
Puoi anche considerarli una direzione con lunghezza …  
Con il CAD non puoi disegnare un vettore puro e semplice.  
Per farlo, devi ‘applicare’ il vettore ad un punto, cioe’ dargli un punto di inizio (arbitrario)

Nel tuo script F e’ un punto, ottenuto sommando il punto A e il vettore E  
Rhino.VectorRotate non ha senso applicato al punto F

Puoi invece ruotare il vettore E  
e poi sommarlo al punto A, in modo da ottenere il punto cercato.

Lo script andrebbe bene se invece che un vettore usasse una linea:  
costruisci la linea AF e la ruoti attorno al punto A  
Cosi’ il punto finale della linea ti da’ il punto che cerchi

Se invece usi i vettori, bisogna ricordarsi di ragionare in modo diverso.  
I vettori non sono linee.

Bene … confuso le idee a sufficienza per oggi ? 🙂

P.S.  
Probabilmente ho hai gia’ notato, comunque …  
La documentazione di RhinoScript non serve per imparare i vettori,  
anzi puo’ confondere le idee a chi e’ inesperto nel campo.  
RhinoScript presume che chi usa i metodi sui vettori conosca la materia a sufficienza  
da poter sceglier quale metodo usare e per quale scopo.  
( Ad esempio in RhinoScript non c’e’ differenza tra un punto e un vettore )

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [25 Agosto 2017, 4:13pm UTC](https://it.discourse.mcneel.com/t/help-vector/1260/16 "2017-08-25T16:13:12Z")

</div>

grazie mille emilio

> [@emilio](#):
>
> e poi sommarlo al punto A, in modo da ottenere il punto cercato.

funziona perfettamente (sarà un mio limite) ma il fatto di sommarlo al punto A per me è un mistero 😋

> [@emilio](#):
>
> Bene … confuso le idee a sufficienza per oggi ? 🙂

che dire “Sì” adesso ho una confusione al quadrato ahahahah

beh mi consola quando hai detto che RScript può confondere le idee per chi non è pratico con i vettori 🙂

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [25 Agosto 2017, 7:49pm UTC](https://it.discourse.mcneel.com/t/help-vector/1260/17 "2017-08-25T19:49:31Z")

</div>

> [@0904](#):
>
> per me è un mistero 😋

Hmmm …  
Se vuoi, domani o quando preferisci, a mente fresca, potresti provare cosi’:

![vec1](https://global.discourse-cdn.com/mcneel/uploads/mcneel_it/original/2X/6/6cfa527dc391cd605a8e9b06f748c4aefbc9d451.png)

1. disegna una linea A, a piacere
2. fanne una copia A’, dove preferisci
3. esegui questo script, che ti chiede di cliccare sui punti iniziale ( B ) e finale ( C ) di A  
e sul punto iniziale ( D ) di A’

```auto
b = rhino.GetPoint("Punto iniziale di A => B ?")
c = rhino.GetPoint("Punto finale di A => C ?")
d = rhino.GetPoint("Punto iniziale di A' => D ?")
v = rhino.VectorSubtract(c, b)
p = rhino.VectorAdd(d, v)
rhino.Print rhino.pt2str(p)

```

ho usato VectorSubtract perche’, pur facendo la stessa cosa che fa VectorCreate, secondo me almeno si capisce cosa sta calcolando.  
( A mio parere VectorCreate serve solo a confondere le idee )

nello script b, c, d sono punti, ovviamente  
v invece e’ un vettore ( il vettore che va da B a C )

p e’ di nuovo un punto, calcolato tramite VectorAdd, ma non farti ingannare dal nome,  
il metodo funziona sia con punti che con vettori (e’ una semplice somma di coordinate)  
Qui sommiamo il vettore v al punto d.

Lo script scrive la posizione di p.  
Adesso prova a vedere dove si trova il punto p  
… e a capire perche’ si trova li’. 🙂

… Forse ti aiutera’ a capire cos’e’ un vettore e cosa significa sommare un punto e un vettore …  
… Ma se non serve, non preoccuparti … e’ solo un tentativo … non sono un insegnante … 😊

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [25 Agosto 2017, 11:50pm UTC](https://it.discourse.mcneel.com/t/help-vector/1260/18 "2017-08-25T23:50:14Z")

</div>

diciamo che adesso leggendo e rileggendo già mi sembra un pò più familiare poi spiegato così mi ha aiutato a rivedere il primo codice, forse è stato proprio quel punto F che mi ha fatto deviare dal giusto ragionamento anche perchè pensandoci bene il primo codice l’ho scritto seguendo alla lettera le tue istruzioni ma poi analizzandolo meglio in effetti bisognava prima ruotare e poi sommare col punto A (appunto come sommo A-E)

grazie emilio dell’esempio che hai postato mi è servito a chiarire meglio come funzionano i vettori e grazie per le spiegazioni sia tue che di lucio mi sono state veramente utilissime. un saluto a tutti e alla prossima 🙂

---

<div class="post-metadata">

**Author:** ![0904](https://avatars.discourse-cdn.com/v4/letter/0/b3f665/32.png) [@0904](https://it.discourse.mcneel.com/u/0904)\
**Post date:** [26 Agosto 2017, 8:05am UTC](https://it.discourse.mcneel.com/t/help-vector/1260/19 "2017-08-26T08:05:01Z")

</div>

PS in GH ci dovrebbe essere un componente Vector che se non erro in sostanza visualizza una freccia.

quindi indica il punto d’inizio e la direzione. potrebbe essere un buon modo per spiegare e comprendere no?

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [26 Agosto 2017, 9:51am UTC](https://it.discourse.mcneel.com/t/help-vector/1260/20 "2017-08-26T09:51:14Z")

</div>

Hai ragione ! … Mi dimentico sempre di GH … per queste cose e’ l’ideale ! 🙂

Sperimentare su GH mi sembra un’ottima idea.  
Ci sono diversi componenti con i quali puoi fare tutte le prove che vuoi 🙂

Ho fatto una rapida prova … come forse ti ho gia’ detto, sono tutt’altro che un mago con GH … 😄

 ![vec2](https://mcneelusercontent.s3.amazonaws.com/original/2X/f/f656967ac3e0e699a181489b885b509ed962837b.png)

… Se poi qualcosa non ti convince … fai il solito fischio … 😉

[Pagina seguente](https://it.discourse.mcneel.com/t/help-vector/1260.md?page=2)
