![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Движение под углом
Compton's G © (2006-02-18 15:27:00)Подскажите пожалуйста ... как перемещать, например, TShape
шагом 1 пиксель по определенному углу?
Насколько я понимаю нужно использовть уравнение прямой
y=kx+b, но бьюсь уже день ничего не выходить .. заранее скасибо
Defunct (2006-02-19 17:16:00) [1]> Посморел на время ваших сообщений...ого... когда же вы отдыхаете? :)
редко..
Compton's G (2006-02-19 17:07:00) [2]Defunct © (19.02.06 04:21) [16]
Джо © (19.02.06 03:41) [15]
Посморел на время ваших сообщений...ого... когда же вы отдыхаете? :)
Compton's G (2006-02-19 17:05:00) [3]Я не спал просто, инет не работал.
Да по поводу "перемещения на 1 пиксель", это я подобрал неудачный пример, имелось введу просто перемещение.
Всем спасибо, помогли :)
Defunct (2006-02-19 04:21:00) [4]Sabj - Движение под углом с шагом 1 пиксель...
что попросили то и дали.. ;>
Джо (2006-02-19 03:41:00) [5]> [13] Defunct © (19.02.06 03:13)
> а почему бы по y = kx + b не сделать?
А просили "по углу и расстоянию", а не по угловому коэффициенту :P
Defunct (2006-02-19 03:14:00) [6]ой. торможу.
y := k * x + b;
:)
Defunct (2006-02-19 03:13:00) [7]> А мы, дураки, почему не спим! :)))
бессонница?
а почему бы по y = kx + b не сделать?
procedure TForm1.Button1Click(Sender: TObject);
var
x: integer;
y: double;
k, b: double;
begin
k := 0.1;
b := 10;
for x := 0 to Width - Button1.Width do
begin
y := 0.3*x + b;
Button1.Left := x;
Button1.Top := Round(y);
end;
end;
Германн (2006-02-19 02:59:00) [8]
> Джо © (19.02.06 02:46) [11]
>
> > [9] Германн © (19.02.06 02:37)
> > сабжа молчит.
>
> Спит, вероятно. И правильно делает :)
>
> Ну, 1 пиксель, это я понял просто как неудачный пример.
> Наверное, просто хочется передвигать фигуру в заданном направлении.
> Догадки, догадки... Просто вчера этот человек спрашивал
> вот такое:
> http://www.delphimaster.ru/cgi-bin/forum.pl?id=1140210575&n=3
>
А мы, дураки, почему не спим! :)))
Вчера мой провайдер "свалился" и я не смог выйти в мир И-нета. :(((
Джо (2006-02-19 02:46:00) [9]> [9] Германн © (19.02.06 02:37)
> сабжа молчит.
Спит, вероятно. И правильно делает :)
Ну, 1 пиксель, это я понял просто как неудачный пример. Наверное, просто хочется передвигать фигуру в заданном направлении. Догадки, догадки... Просто вчера этот человек спрашивал вот такое:
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1140210575&n=3
Gorger (2006-02-19 02:44:00) [10]"разве функция Round поможет передвинуться на пиксель!":
Именно Round и важен для гладкого, а не "угловатого" поточечного вычисления гипотенузы.
Германн (2006-02-19 02:37:00) [11]
> Джо © (19.02.06 02:24) [8]
>
> > [7] Германн © (19.02.06 02:14)
>
> Ну, я думаю с функцией Round уважаемый Compton's разберется
> и сам :)
Я тоже так думаю.
Но Серёга - разве функция Round поможет передвинуться на пиксель!
А судя по сабжу, автор этого не понимает.
Хотя всё дальнейшее может восприниматься как стеб. Автор сабжа молчит.
Джо (2006-02-19 02:24:00) [12]> [7] Германн © (19.02.06 02:14)
Ну, я думаю с функцией Round уважаемый Compton's разберется и сам :)
Германн (2006-02-19 02:14:00) [13]2 Джо © (19.02.06 00:02) [6]
Это, конечно перебор, но всё-таки, если строго по сабжу, то нужно учесть и API (18.02.06 23:38) [4].
Джо (2006-02-19 00:02:00) [14]> [5] Джо © (18.02.06 23:56)
Моими язвительными замечаниями о "дирекционном угле" можно (и нужно) пренебречь — заработался, видать :(
В остальном формула рабочая. Угол отсчитывается по часовой стрелке от оси 0X.
Джо (2006-02-18 23:56:00) [15]Не совсем понятно, что в данном случае "определенный угол". Но, если предположить, что под углом имеется в виду дирекционный угол, то формула тривиальна:
NewX := Cos(DirectAngle)*Distance + OldX;
NewY := Sin(DirectAngle)*Distance + OldY;
гдеDirectAngle— дирекционный угол в радианах,Distance— расстояние.
Для преобразования градусов в радианы можно воспользоваться готовой функцией DegToRadian из Math.pas, а можно воспользоваться учебником школьной геометрии :)
API (2006-02-18 23:38:00) [16]Подскажите пожалуйста ... как перемещать, например, TShape
шагом 1 пиксель по определенному углу?
Это возможно только для 8-ми частных случаев.
Для всех остальных случаев необходимо использовать вспомогательные координаты X, Y: double. Все действия по перемещению - производить со вспомогательніми координатами, а лишь затем переводить их в целые числа и использовать полученные значения для установки текущего положения на экране.
П (2006-02-18 22:06:00) [17]Когда "x" изменяется на 1-цу, "y" изменяется на k*1+b.
Чародей (2006-02-18 21:40:00) [18]Использовать треугольники. Шаг - это гипотенуза, угол есть, далее совсем чуть-чуть геометрии
Gnobobel (2006-02-18 21:36:00) [19]cos|sin?