# Elliptical orbits

#### envenger

##### Active Member
How do i make a unit rotate around another unit in elliptical orbits

with the different values on different side

eg. x on the greater distance and y on smaller distance

#### Waaaaagh

##### I lost all my rep and my title being a jerk
Long Post

An ellipse can be modeled as (x^2/a^2) + (y^2/b^2) = 1, where a and b are the lengths of the horizontal and vertical axes, respectively. That's not overly helpful, but, parametrically, an ellipse can be modeled as:

Code:
``````X(t) = h + a * cos(t) * cos(w) - b * sin(t) * sin(w)
Y(t) = k + a * cos(t) * sin(w) + b * sin(t) * cos(w)

for 0 <= t <= 2pi
where a and b are the lengths of the horizontal and vertical axes, respectively,
and w is the angle in radians of rotation from the x-axis
and the point (h, k) is the center of the ellipse.``````
So, once you determine how long you want your ellipse to be, that will be "a", and tall you want it to be will be "b". Then, you can add random rotation with w (30 degree rotation -> 30/180*pi = .524 radians so w = .524)

Easier to understand:

You are going to be solving for the x and y offsets from the center of your ellipse, using the parameter t. You will simply need to increase t by some constant number every time step, and then resolve your equations using the new t.

JASS:
``````function ParametricX takes real t, real a, real b, real w returns real
return a * Cos(t) * Cos(w) - b * Sin(t) * Sin(w)
endfunction

function ParametricY takes real t, real a, real b, real w returns real
return a * Cos(t) * Sin(w) + b * Sin(t) * Cos(w)
endfunction``````

So, some looping function:

Trigger:
• Elliptical Orbit
• Events
• Time - Every 0.03 seconds of game time
• Conditions
• Actions
• Custom script: set udg_T = udg_T + (0.03) * REVOLUTIONS_PER_SECOND * (2*bj_Pi)
• Custom script: set udg_XOffset = ParametricX(udg_T, WIDTH, HEIGHT, ROTATION * bj_DEGTORAD)
• Custom script: set udg_YOffset = ParametricY(udg_T, WIDTH, HEIGHT, ROTATION * bj_DEGTORAD)
• Custom script: call SetUnitX(udg_RotatingUnit, GetUnitX(udg_CenterUnit) + udg_XOffset)
• Custom script: call SetUnitY(udg_RotatingUnit, GetUnitY(udg_CenterUnit) + udg_YOffset)

Code:
``````Requiring the following variables:
- T (real = 0 at init)
- XOffset (real)
- YOffset (real)
- RotatingUnit (unit = your rotating unit)
- CenterUnit (unit = your center unit)

- Requiring the JASS script to be pasted into the Custom Script Header.
- Requiring that you replace the ALL_CAPS_WORDS (except for bj_DEGTORAD)
with numbers reflecting what you want``````
(note: a footman in wc3 is 62 'inches' or 'pixels' or 'wtvs' across, so an ellipse that is 10 footmen wide and 5 footmen tall would mean replacing WIDTH with 620 and HEIGHT with 310 -EDIT: actually, I believe that the value is supposed to be half the axis length, so it would be 310 and 155, respectively.)

(note 2: Rotation is in degrees - you can increase that every time step as well for a rotating ellipse effect.)

#### envenger

##### Active Member
Can you plizz make a test map it was very confusing for me
or explain it a bit better for me

form

"So, some looping function:" till the end

General chit-chat
Help Users
• No one is chatting at the moment.
• The Helper:
I reorganized the forums somewhat but I doubt anyone would notice
• The Helper:
Happy Friday!
+1
• The Helper:
Happy Saturday!
+1
• The Helper:
The forum software says we have 554 members online now. We did not have that many unique visitors the whole day today. Too many bots and the disconnect between the forum counts and the stats.
• Varine:
Currently it says 413 guests and 2 members
+1
• Varine:
Aww
• The Helper:
That is going to be mostly bots
• The Helper:
527 (members: 2, guests: 525)
• The Helper:
Happy Saturday!
+1
• V-SNES:
Happy Saturday!
+1
• The Helper:
622 (members: 2, guests: 620)
• The Helper:
666 (members: 4, guests: 662)
+1
• Varine:
609 (members: 4, guests: 605)
• The Helper:
I was posting that last one because the 666 users online
+1
• The Helper:
Happy Wednesday Night!
+1
• The Helper:
Happy Thursday!
+1
• The Helper:
Marathon watching The Expanse!
+1
• V-SNES:
Happy Friday!
+1
• The Helper:
leaving for the weekend in San Antonio will be gone until Sunday afternoon
+1
• The Helper:
and I am back
+1
• The Helper:
Happy Tuesday!
+1