Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Движение под углом


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?


Наверх

Титульная страница Поиск, карта сайта Написать письмо