Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.47 MB
Время: 0.007 c
3-46616
kol
2003-04-23 16:07
2003.05.15
Удаление повторяющихся записей в таблице


11-46674
Sam Stone
2002-08-09 18:52
2003.05.15
TKOLLabel, цвет


14-46917
Sha
2003-04-24 09:48
2003.05.15
Минитест на сообразительность


7-47016
S.A.S
2003-03-20 12:05
2003.05.15
Кем используется COM порт ?


3-46582
LazorenkoX
2003-04-23 11:01
2003.05.15
CreateDatabase





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский