Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы (http://www.flasher.ru/forum/forumdisplay.php?f=10)
-   -   Пртитягивающиеся и отталкивающиеся магнитики (http://www.flasher.ru/forum/showthread.php?t=62242)

7by 22.08.2004 19:35

Пртитягивающиеся и отталкивающиеся магнитики
 
Вложений: 1
:confused: Помогите пожалуйста сделать притягивающиеся и отталкивающиеся магнитики. Т.е. чтобы разноимёнными полюсами они притягивались, а одноимёнными - отталкивались. Прилогается исходник. Подправте что надо и вышлите мне на мыло. Очень прошу. Зарание споооосибо. :D

Usnul 24.08.2004 00:45

ну делаешь точку, делаешь обьект, вычисляешь дистанцию (длинну вектора)б чем короче дистанция, тем выше притяжение, незнаю точной формулы, но можно использовать что-то вроде:

max_speed=5;
speed=max_speed/distance;

ну и сделать радиус действия поля притяжения:

max_speed=5;
if(distance<100){
speed=max_speed/distance;
}
else{
speed=0;
}

дистанция расчитывается по формуле:

distance=Math.sqr(Math.pow((Math.abs(x1)-Math.abs(x2)),2)+Math.pow((Math.abs(y1)-Math.abs(y2)),2));

где координаты точки притяжения: x1,y1
и координаты центра обьекта: x2,y2
сокращение дистанции производится по следующей вормуле:

angle=Math.asin((Math.abs(y1)-Math.abs(y2));
xspeed=Math.cos(angle)*speed
yspeed=Math.sin(angle)*speed
if(x1<x2){xspeed=-xspeed}
if(y1<y2){yspeed=-yspeed}
x2+=xspeed;
y2+=yspeed;

в итоге получаем:

max_speed=5;

distance=Math.sqr(Math.pow((Math.abs(x1)-Math.abs(x2)),2)+Math.pow((Math.abs(y1)-Math.abs(y2)),2));

if(distance<100){
speed=max_speed/distance;
}
else{
speed=0;
}

angle=Math.asin((Math.abs(y1)-Math.abs(y2));
xspeed=Math.cos(angle)*speed
yspeed=Math.sin(angle)*speed
if(x1<x2){xspeed=-xspeed}
if(y1<y2){yspeed=-yspeed}
x2+=xspeed;
y2+=yspeed;


Часовой пояс GMT +4, время: 19:33.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.