Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.15;
Скачать: CL | DM;

Вниз

Математика   Найти похожие ветки 

 
MAS   (2003-05-04 21:45) [0]

Вопрос математический, я в ней слаб:(
нужно перемещать объект по экрану (форме) не важно..
Зная его (объекта) начальные координаты и зная его конечные
как правильно расчитать его траекторию т.е. Left:=Left+k, Top:=Top+j или Left:=Left+(-k), Top:=Top+(-j)
(Left, Top)-Координаты левого верхнего угла объкта
(k,j)-Шаг смещения объекта
Объект перемещается по таймеру либо в цикле типа

procedure TForm1.Timer1OnTimer(Sender: TObject);
begin
if (Object.Left+k)<LeftEnd then Object.Left:=Object.Left+k
else begin Object.Left:=LeftEnd; k:=0 end;
if (Object.Top+j)<TopEnd then Object.Top:=Object.Top+j
else begin Object.Top:=TopEnd; j:=0 end;
Timer1.Enabled:=(k<>0)or(j<>0);
end;
где Object-непосредственно сам объект,
LeftEnd, TopEnd - конечные координаты объекта.
Собственно нужно правильно расчитать значения k и j.
Хотелось бы самый простой и быстрый расчет k и j.
Thanks!


 
MAS   (2003-05-04 22:49) [1]

????


 
Yanis ©   (2003-05-04 22:53) [2]

Ты сам понял что спросил. Может я недопонимаю(я сказал может), но если ты хочешь перемещать объект по шагово с шагом K,J, то тебе надо знать их заранее, а их можно вычислить зная конечные и начальные координаты, а конечные и начальные координаты можно узнать только после изменения координат верхнего левого угла.


 
MAS   (2003-05-04 22:59) [3]

Мне нужно переместить от точки например 145 по X и 215 по Y к точке например 300 по X и 100 по Y нужно узнать на сколько за один такт прибавить X и (в данном случае) убавить Y что бы обект перемещался по короткой прямой!


 
Palladin ©   (2003-05-04 23:01) [4]

нужно получить коэфициэнты уравнения прямой между двумя точками
получив их можно получить координаты любой точки между данными точками и двигать все что захочешь по этой прямой


 
MAS   (2003-05-04 23:06) [5]

>Palladin
Собственно вопрос в этом :()
?????????????????????????????


 
Юрий Зотов ©   (2003-05-04 23:10) [6]

N - требуемое количество шагов.
X0, Y0 - начальные координаты.
XN, YN - конечные координаты.
dX, dY - шаги по X и Y.
Все эти переменные - integer.

Значение N можно задать, а можно и вычислить. Например, так:
N = Max(Abs(XN - X0), Abs(YN - Y0));

Шаги рассчитываются просто:
dX = (XN - X0) div N;
dY = (YN - Y0) div N;

На каждом шаге, кроме последнего:
SetBounds(Left + dX, Top + dY, Width, Height);

На последнем шаге корректируем погрешность:
SetBounds(XN, YN, Width, Height);


 
Palladin ©   (2003-05-04 23:33) [7]

при N>Max(Abs(XN - X0), Abs(YN - Y0));
dX и dY нужны не integer, а хотя бы real иначе
компонент будет двигатся вдоль только одной оси или вообще не будет двигатся...
тогда
dX = (XN - X0)/N;
dY = (YN - Y0)/N;

SetBounds(X0 + round(dX*Step), Y0 + (dY*Step), Width, Height);
Step от 0 до N


 
Palladin ©   (2003-05-04 23:34) [8]

извиняюсь
SetBounds(X0 + round(dX*Step), Y0 + round(dY*Step), Width, Height);


 
Palladin ©   (2003-05-04 23:40) [9]

:)
еще раз поправлюсь
при N>Min(Abs(XN - X0), Abs(YN - Y0));


 
MAS   (2003-05-04 23:44) [10]

> Юрий Зотов
> Palladin
Спасибо! Попробую.
Хотя мало чего разобрал в написанном Вами



Страницы: 1 вся ветка

Текущий архив: 2003.05.15;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
1-46696
BlackTiger
2003-05-02 19:51
2003.05.15
Функция Format. Проблема, однако...


14-46972
NetBreaker666
2003-04-26 23:38
2003.05.15
Зацените как чувак народ развел


1-46735
bxMax
2003-04-30 16:01
2003.05.15
Как узнать место занимаемое объектом в памяти?


1-46725
qqqqq0001
2003-05-04 20:30
2003.05.15
Tfinddialog


9-46556
Jedi Knight
2002-11-11 15:01
2003.05.15
Wolfenstein Source