Лемниската Бернулли

Разговорчики, общеньице

Postby LessNick » Tue, 02.12.2014 15:10:37

Привет матаны! Требуется помощь!

Решил тут немного «заняться» математикой, а точнее опробовать на практике косбасинье некого объекта по траектории восьмёрки. Нашел в инете, что траектория эта
называется «Лемниската Бернулли». Нашел формулу, в полярных координатах:

ρ² = 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 что бы рисовалась именно восьмёрка, а не холмы.

Запустив всю эту конструкцию, получил отлично летающую хрень, однако в середине оно пролетало резко и с рывком. Нарисовав вместо летающей хрени точки, получил удивительную картину, по краям густо, а в середине пусто :wow2:

Image

Собственно теперь вопрос, почему так? Погрешность при преобразовании из полярных в декартовы координаты? Или это из-за zoom'а? Или вообще как-то не правильно формула реализована?

К слову примерная погрешность была, когда я пробовал рассчитать туннель для C64 интры, там тоже чем ближе к центру тем была опа с координатами :(

ps. и да попробовал такое же провернуть на flash получил такую же картину, то есть погрешность расчётов js можно не брать в учёт. :mad:
(∩。•o•。)っ.゚☆。・ TS-Conf для PentEvo — это классический Pentagon 128k для тех кто хочет больше!
User avatar
LessNick
грей сашу — сашу грей
 
Posts: 975
Joined: Thu, 26.07.2012 15:00:53
WEBSITE: http://fishbone.untergrund.net/

Postby WBC » Tue, 02.12.2014 16:14:59

вроде все правильно, так и должно быть. Я как-то пилил простой rotozoom, там так же примерно было - замедляется и зумится, потом быстро вращается без увеличения :)
--wbcbz7
User avatar
WBC
 
Posts: 302
Joined: Fri, 19.09.2014 10:23:23
LOCATION: omsk XOR nsk

Postby LessNick » Tue, 02.12.2014 16:19:06

Пока писал, нашел решение, нужно сократить степень и корень квадратный и будет счастье! :ura:

Image

Ну и zoom по оси X соответственно поменьше уже сделать:
Code: Select all
      var r1 = 100 * 2 * a * Math.cos(2 * fi * Math.PI / 180);
      var r2 = 50 * 2 * a * Math.cos(2 * fi * Math.PI / 180);
(∩。•o•。)っ.゚☆。・ TS-Conf для PentEvo — это классический Pentagon 128k для тех кто хочет больше!
User avatar
LessNick
грей сашу — сашу грей
 
Posts: 975
Joined: Thu, 26.07.2012 15:00:53
WEBSITE: http://fishbone.untergrund.net/

Postby VBI » Tue, 02.12.2014 16:32:12

breeze, можно по краям сделать приближение (осветление) спрайта, в центре - удаление (затемнение), будет трєде))
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby LessNick » Tue, 02.12.2014 16:42:07

VBI, ну что-то примерно такое я и думал, можно ещё размер уменьшать, действительно будет как улетать.
(∩。•o•。)っ.゚☆。・ TS-Conf для PentEvo — это классический Pentagon 128k для тех кто хочет больше!
User avatar
LessNick
грей сашу — сашу грей
 
Posts: 975
Joined: Thu, 26.07.2012 15:00:53
WEBSITE: http://fishbone.untergrund.net/

Postby TS-Labs » Tue, 02.12.2014 17:51:42

Когда рилис демы? :ura:
User avatar
TS-Labs
 
Posts: 5398
Joined: Thu, 26.07.2012 01:29:56

Postby LessNick » Tue, 02.12.2014 18:01:11

TS-Labs wrote:Когда рилис демы?


Я пока просто разбираюсь, но ход ваших мыслей мне нравится ;)
(∩。•o•。)っ.゚☆。・ TS-Conf для PentEvo — это классический Pentagon 128k для тех кто хочет больше!
User avatar
LessNick
грей сашу — сашу грей
 
Posts: 975
Joined: Thu, 26.07.2012 15:00:53
WEBSITE: http://fishbone.untergrund.net/


Return to Flame

Who is online

Users browsing this forum: No registered users and 1 guest

cron

x