HOME OGGETTI 3D LIBRI CORSI TUTORIAL FORUM SHOP CONTATTI   LOGIN









Autore Topic: Cerchio per 3 punti  (Letto 2593 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

marcomasetti

  • Newbie
    ...sono qui da poco, il mio miglior amico è il pulsante RICERCA
  • *
  • Post: 183
Cerchio per 3 punti
« il: 17 Febbraio 2013, 23:07 »
Dati 3 punti A,B,C  determiniamo il centro Q della circonferenza passante per essi.
Consideriamo il caso semplificato 2D con A,C posti simmetricamente  rispetto l’asse y.
Sia M l’ intersezione con y del segmento AC, sia D il punto medio del segmento BC, sia N la sua proiezione su y,  mentre H sia il piede dell’altezza su AC del triangolo ABC.  Vogliamo trovare il valore ? di NQ. Chiamiamo h la distanza BH.
Dalla similitudine di NQD e HCB risulta:
 NQ/DN= HC/BH   da cui:   ?=(xb+xc)/2*(xc-xb)/h
Che ci fornisce la distanza dq=MQ del centro Q dalla corda AB:
dq= ? – h/2=( (xb+xc) *(xc-xb)/h – h )/2    (1)
 
Posto:
lc= lunghezza corda AC
lb= proiezione su corda segmento CB
la= proiezione su corda segmento AB
h= altezza arco
la (1) si può riscrivere:
dq= ( lb*(lc-lb)/h – h )/2= ( lb*la/h – h )/2= ( la*(lc-la)/h – h )/2

Nel caso in cui B appartenga ad y (triangolo ABC isoscele) la formula si semplifica:
dq= ( ( lc/2)^2 /h – h )/2    ! infatti la=lb=lc/2=semicorda

Considerando i vettori risulta:
lc=mod(C-A)
la=(B-A)*(C-A)/lc     ! prodotto scalare
H=(A-O)+(C-A) /lc*la
h=mod(H-B)
M=(A-O)/2 +(C-O)/2
Q=(M-O)+(H-B)/h*dq

Traducendo in termini analitici:
lc= sqr( (cx-ax)^2+(cy-ay)^2+ (cz-az)^2 )
la= (  (bx-ax)*(cx-ax)+(by-ay)*(cy-ay)+(bz-az)*(cz-az) )/lc
hx= ax+(cx-ax) /lc*la
hy= ay+(cy-ay) /lc*la
hz= az+(cz-az) /lc*la
h= sqr( (hx-bx)^2+(hy-by)^2+ (hz-bz)^2 )
dq= (la*(lc-la)/h-h)/2
mx=(ax+cx)/2
my=(ay+cy)/2
mz=(az+cz)/2
qx=mx+(hx-bx)/h*dq
qy=my+(hy-by)/h*dq
qz=mz+(hz-bz)/h*dq

Ovvero:
h= sqr((ax-bx+(cx-ax)*la/lc)^2+(ay-by+(cy-ay)*la/lc)^2+(az-bz+(cz-az)*la/lc)^2)
Risulta:
ax-bx+(cx-ax)*la/lc =
ax-bx+(cx-ax)*((bx-ax)*(cx-ax)+(by-ay)*(cy-ay)+(bz-az)*(cz-az))/lc^2=
((ax-bx)*lc^2+(cx-ax)*((bx-ax)*(cx-ax)+(by-ay)*(cy-ay)+(bz-az)*(cz-az))/lc^2=
((ax-bx)*((cx-ax)^2+(cy-ay)^2+(cz-az)^2)+(cx-ax)*((bx-ax)*(cx-ax)+(by-ay)*(cy-ay)+(bz-az)*(cz-az))/lc^2
Risulta ancora:
(ax-bx)*(cx-ax)^2+(ax-bx)*(cy-ay)^2+(ax-bx)*(cz-az)^2+
(bx-ax)*(cx-ax)^2+(cx-ax)*(by-ay)*(cy-ay)+(cx-ax)*(bz-az)*(cz-az)=
(ax-bx)*(cy-ay)^2+(ax-bx)*(cz-az)^2+(cx-ax)*(by-ay)*(cy-ay)+(cx-ax)*(bz-az)*(cz-az)=
((ax-bx)*(cz-az)+(cx-ax)*(bz-az))*(cz-az)+((ax-bx)*(cy-ay)+(cx-ax)*(by-ay))*(cy-ay)

posto:
abc=((ax-bx)*(cz-az)+(cx-ax)*(bz-az))*(cz-az)+((ax-bx)*(cy-ay)+(cx-ax)*(by-ay))*(cy-ay)
ax-bx+(cx-ax)*la/lc =abc/lc^2
per simmetria:
bca=((ay-by)*(cx-ax)+(cy-ay)*(bx-ax))*(cx-ax)+((ay-by)*(cz-az)+(cy-ay)*(bz-az))*(cz-az)
ay-by+(cy-ay)*la/lc =bca/lc^2
cab=((az-bz)*(cy-ay)+(cz-az)*(by-ay))*(cy-ay)+((az-bz)*(cx-ax)+(cz-az)*(bx-ax))*(cx-ax)
az-bz+(cz-az)*la/lc =cab/lc^2
dunque:
h= sqr((abc/lc^2)^2+(bca/lc^2)^2+(cab/lc^2)^2)

In conclusione abbiamo la formula ricercata:
        *******************************
!3D  determinare la circonferenza per A,B,C
ax=
ay=
az=   !estremo A
bx=
by=
bz=   !interno arco B
cx=
cy=
cz=   !estremo C
abc=((ax-bx)*(cz-az)+(cx-ax)*(bz-az))*(cz-az)+((ax-bx)*(cy-ay)+(cx-ax)*(by-ay))*(cy-ay)
bca=((ay-by)*(cx-ax)+(cy-ay)*(bx-ax))*(cx-ax)+((ay-by)*(cz-az)+(cy-ay)*(bz-az))*(cz-az)
cab=((az-bz)*(cy-ay)+(cz-az)*(by-ay))*(cy-ay)+((az-bz)*(cx-ax)+(cz-az)*(bx-ax))*(cx-ax)
lc= sqr( (cx-ax)^2+(cy-ay)^2+ (cz-az)^2 )
h= sqr(abc^2+bca^2+cab^2)/lc^2   !altezza arco ABC
la= (  (bx-ax)*(cx-ax)+(by-ay)*(cy-ay)+(bz-az)*(cz-az) )/lc
dq= (la*(lc-la)/h-h)/2           !distanza centro Q da corda ACqx=(ax+cx)/2+(hx-bx)/h*dq
qy=(ay+cy)/2+(hy-by)/h*dq
qz=(az+cz)/2+(hz-bz)/h*dq        !coordinate centro Q
ra=sqr((cx-qx)^2+(cy-qy)^2+(cz-qz)^2) !raggio crf
anq=2*acs(dq/ra)                  !angolo al centro
        *******************************

Eliminando la parte in z otteniamo il caso bidimensionale:
abc=((ax-bx)*(cy-ay)+(cx-ax)*(by-ay))*(cy-ay)
bca=((ay-by)*(cx-ax)+(cy-ay)*(bx-ax))*(cx-ax)
lc= sqr( (cx-ax)^2+(cy-ay)^2)
h= sqr(abc^2+bca^2)/lc^2   !altezza arco ABC
la= (  (bx-ax)*(cx-ax)+(by-ay)*(cy-ay) )/lc
dq= (la*(lc-la)/h-h)/2           !distanza centro Q da corda AC
qx=(ax+cx)/2+(hx-bx)/h*dq
qy=(ay+cy)/2+(hy-by)/h*dq !coordinate centro Q
ra=sqr((cx-qx)^2+(cy-qy)^2) !raggio crf

Tuttavia il caso bidimensionale si può ottenere direttamente, senza necessità di semplificare la formula:
lc= sqr((cx-ax)^2+(cy-ay)^2) !corda AC
mx=(ax+cx)/2
my=(ay+cy)/2 !punto medio corda di riferimento AC
nx=-(ay-cy)/lc
ny= (ax-cx)/lc    !versore ortogonale ad AC
la=((bx-ax)*(cx-ax)+(by-ay)*(cy-ay))/lc !proiezione corda AB su AC
hx= ax+(cx-ax) /lc*la
hy= ay+(cy-ay) /lc*la            !H piede altezza da B su AC
h=sqr((bx-hx)^2+(by-hy)^2) !altezza arco=HB
dq=(la*( lc-la )/h-h)/2
qx=mx+nx*dq
qy=my+ny*dq !coordinate centro

Condensando la formula si ha:
        *******************************
!2D  determinare la circonferenza per A,B,C
ax=
ay=  !estremo A
bx=
by=  !interno arco B
cx=
cy= !estremo C
lc= sqr((cx-ax)^2+(cy-ay)^2) !corda AC
la=((bx-ax)*(cx-ax)+(by-ay)*(cy-ay))/lc !proiezione corda AB su AC
hx= ax+(cx-ax)*la /lc
hy= ay+(cy-ay)*la /lc      !H piede altezza da B su AC
h=sqr((hx-bx)^2+(hy-by)^2) !altezza arco=HB
dq=(la*(lc-la)/h-h)/2             !distanza centro Q da corda AC
qx=(ax+cx)/2+(cy-ay)/lc*dq
qy=(ay+cy)/2+(ax-cx)/lc*dq        !coordinate centro
ra= sqr((cx-qx)^2+(cy-qy)^2)      !raggio
anq=2*acs(dq/ra)                  !angolo al centro
                 ******************************
La formula può essere adattata al caso in cui sia data la corda e l’altezza dell’arco su questa:
!2D  determinare la circonferenza di corda  AC con altezza corda h:
ax=
ay=  !estremo A
cx=
cy= !estremo C
h=altezza corda
lc= sqr((cx-ax)^2+(cy-ay)^2)     !misura corda AC
dq= ( (lc/2)^2/h - h )/2         !distanza da centro Q a corda AC
qx=(ax+cx)/2+(cy-ay)/lc*dq
qy=(ay+cy)/2+(ax-cx)/lc*dq !coordinate centro
ra= sqr((cx-qx)^2+(cy-qy)^2)      !raggio
anq=2*acs(dq/ra)                  !angolo al centro
                 ******************************
Queste ultime formule possono essere utili per disegnare curve utilizzando i valori di stato, che richiedono il centro dell’arco o il suo valore angolare.
« Ultima modifica: 17 Febbraio 2013, 23:17 da marcomasetti »