2016-09-23 2 views
3

У меня есть один круг, который растет и сжимается, манипулируя радиусом в петле. Растущая и сжимающаяся, я рисую точку на этом круге. И в пределах того же цикла, увеличивая угол для следующей точки.Вычислить круговые круги вращения

Установка такова:

let radius = 0; 
let circleAngle = 0; 
let radiusAngle = 0; 

let speed = 0.02; 
let radiusSpeed = 4; 
let circleSpeed = 2; 

И в петле:

radius = Math.cos(radiusAngle) * 100; 

// creating new point for line 
let pointOnCircle = { 
    x: midX + Math.cos(circleAngle) * radius, 
    y: midY + Math.sin(circleAngle) * radius 
}; 

circleAngle += speed * circleSpeed; 
radiusAngle += speed * radiusSpeed; 

Это производит какой-то цветок/шаблон будет нарисована. После неизвестных вращений линия чертежа соединяется с точкой, с которой она начиналась, полностью закрывая путь.

Теперь я хотел бы знать, сколько оборотов должно произойти, прежде чем линия вернется к началу.

Рабочий пример можно найти здесь: http://codepen.io/anon/pen/RGKOjP

Консоль записывает текущие поворотам как окружности и линии.

+0

Действительно классные вещи я получаю все виды замечательных конструкций, как [это] (http://codepen.io/anon/pen/pEZzVB), просто регулируя скорость круга и скорость вращения. Нам нужно триго. про, чтобы ответить на это – Viney

+0

спасибо @Novice. Я хочу знать конец, поэтому я могу закрыть путь/остановить анимацию и работать над заполнением, например – Pimmol

ответ

1

Полный цикл завершен, когда оба радиуса и точки возвращаются в исходную точку. Таким образом,

speed * circleSpeed * K = 360 * N 
speed * radiusSpeed * K = 360 * M 

Здесь K - неизвестное количество оборотов, N и M - целые числа.

Разделить первое уравнение по второму

circleSpeed/radiusSpeed = N/M 

Если значения скорости являются целыми числами, разделите их на LCM, чтобы получить минимальные допустимые значения N и M, если они рациональны, умножать их, чтобы получить целое пропорции.

Для примера минимальных чисел N = 1, M = 2, так что мы можем получить

K = 360 * 1/(0.02 * 2) = 9000 loop turns 
+0

Спасибо @Mbo, но я боюсь, что не понимаю. Когда я регистрирую витки для N = 1 и M = 2, общее конечное вращение для 'radiusAngle' составляет 360 градусов (1 оборот). Для 'circleAngle' это 720 градусов (2 оборота). Как это перевести на 9000? – Pimmol

+0

9000 петель, 9000 точек – MBo

Смежные вопросы