Показать сообщение отдельно
Старый 24.08.2004, 00:45
Usnul вне форума Посмотреть профиль Отправить личное сообщение для Usnul Посетить домашнюю страницу Usnul Найти все сообщения от Usnul
  № 2  
Usnul
 
Аватар для Usnul

Регистрация: Mar 2001
Адрес: во сне
Сообщений: 2,701
Отправить сообщение для Usnul с помощью ICQ
ну делаешь точку, делаешь обьект, вычисляешь дистанцию (длинну вектора)б чем короче дистанция, тем выше притяжение, незнаю точной формулы, но можно использовать что-то вроде:

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