Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Ideas for placing shapes around a circle
Message
From
23/05/2005 10:26:25
 
 
To
18/05/2005 11:37:35
General information
Forum:
Visual FoxPro
Category:
Classes - VCX
Environment versions
Visual FoxPro:
VFP 9
OS:
Windows XP SP2
Database:
Visual FoxPro
Miscellaneous
Thread ID:
01015215
Message ID:
01016739
Views:
12
Ciao Fabio,
grazie alle tue imbeccate e a ore ed ore di prove e documentazione su formule ormai dimenticate da anni :-) sono quasi riuscito nel mio intento.
Cavolo, se ci fosse stato un libro che mi avesse detto chiaramente come ricavare un angolo conoscendo il seno , il coseno e tuto il resto avrei fatto prima.
Cmq il punto è questo :
Ora clicco su un punto a piacere, disegno la circonferenza passante per il punto avente centro nel centro schermo, posiziono un oggetto su questo punto.
Vorrei posizionare n oggetti equidistanto a parttire da questo punto.
La cosa mi finziona solo pe un quadrante. So che è una cavolata, lo so , ma la temperatura del mio povero cerebro mi impedisce un'altra oretta di prove !!!
ti mando il codice un po' arronzato che ho prodotto :
come puoi isservare ci sono ancora gli asterischi delle prove andate a male.... che devo fare ?
grazie di cuore
Alessio

*- traccia una circonferenza ideale

lCentrex = (this.width/2)
lCentrey = (this.height/2)

lRadius = Sqrt( (lcentrex - Mcol('',3) )^2 + (lcentrey - Mrow('',3))^2 )

this.Circle(lradius,lcentrex,lcentrey)

numero = Floor(2*pi()*lradius / 15)


x = Mcol('',3)- lcentrex
y = Mrow('',3)- lcentrey

senalfa = y/lRadius
cosalfa = Sqrt(1-senalfa^2)

T = Sqrt( (1-cosalfa) / (1+cosalfa))
*If y < lcentrey
* t = -t
*EndIf
alfa = 2*Atan(t)
*Do case
* Case y > lcentrey
* alfa = alfa + Dtor(180)

* Case x < lcentrex and y < lcentrey
* *--III quadrante
* alfa = alfa + Dtor(90)
* Case x < lcentrex and y > lcentrey
* *--IV quadrante
* alfa = alfa + Dtor(180)
* Case x > lcentrex and y < lcentrey
* *--II quadrante
* alfa = alfa + Dtor(0)
* Otherwise
* alfa = alfa + Dtor(270)
*
*EndCase


stepAngle = (2*PI()/numero)
*=setposto(this,'c'+Alltrim(Str(Seconds())),(Mcol('',3)),(Mrow('',3)),15,15,0,40)

For i = 0 to 5

=setposto(this,'c'+Alltrim(Str(i))+Alltrim(Str(Seconds())), ;
lradius*Cos(Dtor(Rtod(stepangle)* i + Rtod(alfa))) + lcentrex, ;
lcentrey + lradius*Sin(Dtor(Rtod(stepangle)* i + Rtod(alfa))), ;
15,15,40,40)
* lCentrex - lradius*COS(m.stepAngle*m.i), ;
* m.lcentrey + lradius*SIN(stepAngle*m.i), ;
* 15,15,40,40)

EndFor
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform