Я делаю анимацию в javascript, используя холст HTML, чтобы имитировать 2-й закон Кеплера для школьного проекта.Вот ссылка, чтобы понять Второй закон Кеплера.https://www.windows2universe.org/the_universe/uts/kepler2.html
2-й закон Кеплера в основном гласит, что площадь треугольников, образованных двумя парами точек во времени, равна, если разница во времени между каждой точкой равна.
Кроме того,скорость планеты вокруг Солнца увеличивается, когда оно ближе, и уменьшается, когда оно дальше.Мы можем связать это, разделив некоторое число на расстояние от квадрата солнца или v = 50000 / r ^ 2.
Для анимации я использую windowRequestAnimationFrame.Чтобы добиться реальной анимации, я использую полярную систему координат.http://mathworld.wolfram.com/PolarCoordinates.html
Я модулирую угол, умножая его на объект времени.Затем я умножаю его на скорость.
Теперь перейдем к актуальной проблеме.Чтобы иметь изменяющуюся скорость, которая увеличивается, когда планета ближе к Солнцу, и уменьшается, когда она находится дальше, мне нужен полярный угол, чтобы рассчитать ее, однако я умножаю скорость на этот угол. Как можно обновить скорость с изменяющимся углом?
Мне кажется, что есть простое решение, которое я не могу понять.У меня есть ссылка на мой полный код, который полностью функционален и может быть запущен в браузере.https://drive.google.com/file/d/1EoDgzoSVFDJ-hJMXuA47rBwjQ9vMQFbD/view?usp=sharing
Спасибо за внимание.
// Initial Angle Values
var Ang1 = Math.PI;
var Ang2 = 2 * Math.PI;
// Initial Distances from the center of the ellipse
var distance = Distance(Ang1)
var distance2 = Distance(Ang2)
// X,Y coordinates derived from the distance using sin,cos functions
var line1_x = orbit.centerx +(distance * Math.cos(Ang1))
var line1_y = orbit.centery +(distance * Math.sin(Ang1))
var line3_x = orbit.centerx +(distance2 * Math.cos(Ang2))
var line3_y = orbit.centery + (distance2 * Math.sin(Ang2))
// Initial Distance from the sun using the distance formula
var focalDistance1 = coordDistance(line1_x,line1_y,sun_x,sun_y)
var focalDistance2 = coordDistance(line3_x,line3_y,sun_x,sun_y)
// Initial velocityies calculated using distance from the sun
var velocity1 = 50000/Math.pow(focalDistance1,2)
var velocity2 = 50000/Math.pow(focalDistance2,2)
// Multiplying the initial angles by time to animate and velocity to speed up
var orbitAngle = ((Ang1/60)*time.getSeconds() + (Ang1/60000)* time.getMilliseconds())* velocity1;
var orbitAngle3 = ((Ang2/60)*time.getSeconds() + (Ang2/60000)* time.getMilliseconds())* velocity2;
// The polar angle coords of the point ahead by the time interval, multiplying by time to animate and velocity to speed up
var orbitAngle2 = ( ((Ang1/60) * (time.getSeconds()+timeInterval)) + ((Ang1/60000)*(time.getMilliseconds()+timeInterval*1000))) * velocity1;
var orbitAngle4 = ( ((Ang2/60) * (time.getSeconds()+timeInterval)) + ((Ang2/60000)*(time.getMilliseconds()+timeInterval*1000))) * velocity2;
//Animating time interval positions using distance and angle
var distance = Distance(orbitAngle)
var distance2 = Distance(orbitAngle2)
var distance3 = Distance(orbitAngle3)
var distance4 = Distance(orbitAngle4)
var line1_x = orbit.centerx +(distance * Math.cos(orbitAngle))
var line1_y = orbit.centery +(distance * Math.sin(orbitAngle))
var line2_x = orbit.centerx +(distance2 * Math.cos(orbitAngle2))
var line2_y = orbit.centery + (distance2 * Math.sin(orbitAngle2))
var line3_x = orbit.centerx + (distance3 * Math.cos(orbitAngle3))
var line3_y = orbit.centery + (distance3 * Math.sin(orbitAngle3))
var line4_x = orbit.centerx +(distance4 * Math.cos(orbitAngle4))
var line4_y = orbit.centery + (distance4 * Math.sin(orbitAngle4))
var focalDistance1 = coordDistance(line1_x,line1_y,sun_x,sun_y);
var focalDistance2 = coordDistance(line3_x,line3_y,sun_x,sun_y);
var velocity1 = 50000/Math.pow(focalDistance1,2)
var velocity2 = 50000/Math.pow(focalDistance2,2)