Форум: "Основная";
Текущий архив: 2003.05.15;
Скачать: [xml.tar.bz2];
ВнизМатематика Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.013 c