Главная страница
    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.46 MB
Время: 0.009 c
3-46646
Vitt
2003-04-24 14:58
2003.05.15
Apollo SQL Server


14-46911
A&N
2003-04-28 15:07
2003.05.15
Организация теста


3-46635
DBDev
2003-04-24 12:40
2003.05.15
ПОМОГИТЕ написать процедуру извлечения потомков, ПЛЗ!!!...


6-46890
prinsess
2003-03-17 15:25
2003.05.15
Как вызвать Outlook Express и передать в него адрес?


1-46739
Asteroid
2003-05-02 20:39
2003.05.15
Var и const параметры





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский