Решил тут немного «заняться» математикой, а точнее опробовать на практике косбасинье некого объекта по траектории восьмёрки. Нашел в инете, что траектория эта
называется «Лемниската Бернулли». Нашел формулу, в полярных координатах:
ρ² = 2α²cos2φ
Понятно, что для получения ρ нужно извлечь корень из 2α²cos2φ. Применив преобразование в декартовы координаты через cos/sin, получил примерно такой код на javascript:
- Code: Select all
var a = 2;
var r1 = 150 * Math.sqrt(2 * a * a * Math.cos(2 * fi * Math.PI / 180));
var r2 = 50 * Math.sqrt(2 * a * a * Math.cos(2 * fi * Math.PI / 180));
var starX = 500 + r1 * Math.cos(fi * Math.PI / 180);
var starY = 60 + t.sign * r2 * Math.sin(fi * Math.PI / 180);
fi — это угол от 0 до 360, исключая участки от 45 до 135 и от 225 до 315 (в этих случаях получается корень из отрицательного числа).
150 и 50 — это zoom графика, 500 и 60 это центровка.
t.sign это знак +1 или -1 что бы рисовалась именно восьмёрка, а не холмы.
Запустив всю эту конструкцию, получил отлично летающую хрень, однако в середине оно пролетало резко и с рывком. Нарисовав вместо летающей хрени точки, получил удивительную картину, по краям густо, а в середине пусто
Собственно теперь вопрос, почему так? Погрешность при преобразовании из полярных в декартовы координаты? Или это из-за zoom'а? Или вообще как-то не правильно формула реализована?
К слову примерная погрешность была, когда я пробовал рассчитать туннель для C64 интры, там тоже чем ближе к центру тем была опа с координатами
ps. и да попробовал такое же провернуть на flash получил такую же картину, то есть погрешность расчётов js можно не брать в учёт.