
24.08.2004, 00:45
|
|
Регистрация: Mar 2001
Адрес: во сне
Сообщений: 2,701
|
ну делаешь точку, делаешь обьект, вычисляешь дистанцию (длинну вектора)б чем короче дистанция, тем выше притяжение, незнаю точной формулы, но можно использовать что-то вроде:
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
|