![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
|
|||||
|
Регистрация: Jan 2004
Адрес: Flash
Сообщений: 22
|
Помогите пожалуйста сделать притягивающиеся и отталкивающиеся магнитики. Т.е. чтобы разноимёнными полюсами они притягивались, а одноимёнными - отталкивались. Прилогается исходник. Подправте что надо и вышлите мне на мыло. Очень прошу. Зарание споооосибо. ![]()
__________________
Все не так легко, как кажется. :) |
|
|||||
|
ну делаешь точку, делаешь обьект, вычисляешь дистанцию (длинну вектора)б чем короче дистанция, тем выше притяжение, незнаю точной формулы, но можно использовать что-то вроде:
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;
__________________
I'm only happy when it rains. Waka Laka |
![]() |
Часовой пояс GMT +4, время: 06:01. |
|
|
« Предыдущая тема | Следующая тема » |
|
|