07-03-2023, 06:12 AM
(This post was last modified: 07-03-2023, 06:54 AM by PhilOfPerth.)
(07-03-2023, 03:52 AM)OldMoses Wrote: If I understand correctly, is this the sort of thing you're looking for? It now subjects each point to a transformation matrix operation. That's somewhat more trig work than before. Now it creates the plot (x, y) relative to a (0, 0) origin, performs the rotation (in radians), and THEN centers it in the screen after it's properly plotted and rotated. If you prefer degrees then just; rotate! = _D2R(degrees)
Code: (Select All)'de La Hire's method of ellipse
'geometric construction of two concentric circles
'the outermost diameter equals the desired ellipse's
'semi major axis, while the inner circle matches the
'semi minor axis.
'a full 360ø rotation is executed and the positions
'are plotted using a COS function of the outer circle's
'resulting X position and SIN function of the inner
'circle's Y position.
SCREEN _NEWIMAGE(1024, 512, 32)
cen_x% = 512 ' screen center x
cen_y% = 256 ' screen center y
semi_maj% = 200 ' Semi major axis of ellipse i.e. outer circle
semi_min% = 105 ' Semi minor axis of ellipse i.e. inner circle
rotate! = .75 ' radian rotation of ellipse
cursx% = semi_maj% * COS(rotate!)
cursy% = semi_maj% * SIN(rotate!)
PSET (cursx% + cen_x%, cursy% + cen_y%) ' pre-position graphics cursor
FOR ang = 0 TO 2 * _PI STEP .01 ' granularity of 1/100 radian
x% = semi_maj% * COS(ang) ' x position a COS function of the outer circle
y% = semi_min% * SIN(ang) ' y position a SIN function of the inner circle
xr% = x% * COS(rotate!) - y% * SIN(rotate!) + cen_x%
yr% = x% * SIN(rotate!) + y% * COS(rotate!) + cen_y%
LINE STEP(0, 0)-(xr%, yr%) ' line from previous cursor position
NEXT ang
Beautiful! Thank you; I was able to rotate by adding a couple of lines, giving this:
(the color lines make it blink occasionally, I don't know why yet).
Code: (Select All)
Screen _NewImage(1024, 512, 32)
cen_x% = 512 ' screen center x
cen_y% = 256 ' screen center y
semi_maj% = 200 ' Semi major axis of ellipse i.e. outer circle
semi_min% = 105 ' Semi minor axis of ellipse i.e. inner circle
Do
For rotate = 0 To 2* _pi Step .1 ' radian rotation of ellipse now increases from 0 to 6
Cls
cursx% = semi_maj% * Cos(rotate!)
cursy% = semi_maj% * Sin(rotate!)
PSet (cursx% + cen_x%, cursy% + cen_y%) ' pre-position graphics cursor
For ang = 0 To 2 * _Pi Step .01 ' granularity of 1/100 radian
x% = semi_maj% * Cos(ang) ' x position a COS function of the outer circle
y% = semi_min% * Sin(ang) ' y position a SIN function of the inner circle
xr% = x% * Cos(rotate!) - y% * Sin(rotate!) + cen_x%
yr% = x% * Sin(rotate!) + y% * Cos(rotate!) + cen_y%
Line Step(0, 0)-(xr%, yr%) ' line from previous cursor position
Next ang
Color _RGB(255, 0, 255)
Paint (512, 256)
_Delay .1 ' allows view of each iteration
Next rotate
Loop
Of all the places on Earth, and all the planets in the Universe, I'd rather live here (Perth, W.A.)