Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.26;
Скачать: CL | DM;

Вниз

Движение под углом   Найти похожие ветки 

 
Compton's G ©   (2006-02-18 15:27) [0]

Подскажите пожалуйста ... как перемещать, например, TShape
шагом 1 пиксель по определенному углу?
Насколько я понимаю нужно использовть уравнение прямой
y=kx+b, но бьюсь уже день ничего не выходить .. заранее скасибо


 
Gnobobel   (2006-02-18 21:36) [1]

cos|sin?


 
Чародей ©   (2006-02-18 21:40) [2]

Использовать треугольники. Шаг - это гипотенуза, угол есть, далее совсем чуть-чуть геометрии


 
П   (2006-02-18 22:06) [3]

Когда "x" изменяется на 1-цу, "y" изменяется на k*1+b.


 
API   (2006-02-18 23:38) [4]

Подскажите пожалуйста ... как перемещать, например, TShape
шагом 1 пиксель по определенному углу?


Это возможно только для 8-ми частных случаев.

Для всех остальных случаев необходимо использовать вспомогательные координаты X, Y: double. Все действия по перемещению - производить со вспомогательніми координатами, а лишь затем переводить их в целые числа и использовать полученные значения для установки текущего положения на экране.


 
Джо ©   (2006-02-18 23:56) [5]

Не совсем понятно, что в данном случае "определенный угол". Но, если предположить, что под углом имеется в виду дирекционный угол, то формула тривиальна:

NewX := Cos(DirectAngle)*Distance + OldX;
NewY := Sin(DirectAngle)*Distance + OldY;

где DirectAngle — дирекционный угол в радианах, Distance — расстояние.

Для преобразования градусов в радианы можно воспользоваться готовой функцией DegToRadian из Math.pas, а можно воспользоваться учебником школьной геометрии :)


 
Джо ©   (2006-02-19 00:02) [6]

> [5] Джо ©   (18.02.06 23:56)

Моими язвительными замечаниями о "дирекционном угле" можно (и нужно) пренебречь — заработался, видать :(
В остальном формула рабочая. Угол отсчитывается по часовой стрелке от оси 0X.


 
Германн ©   (2006-02-19 02:14) [7]

2 Джо ©   (19.02.06 00:02) [6]

Это, конечно перебор, но всё-таки, если строго по сабжу, то нужно учесть и API   (18.02.06 23:38) [4].


 
Джо ©   (2006-02-19 02:24) [8]

> [7] Германн ©   (19.02.06 02:14)

Ну, я думаю с функцией Round уважаемый Compton"s разберется и сам :)


 
Германн ©   (2006-02-19 02:37) [9]


> Джо ©   (19.02.06 02:24) [8]
>
> > [7] Германн ©   (19.02.06 02:14)
>
> Ну, я думаю с функцией Round уважаемый Compton"s разберется
> и сам :)


Я тоже так думаю.
Но Серёга - разве функция Round поможет передвинуться на пиксель!
А судя по сабжу, автор этого не понимает.

Хотя всё дальнейшее может восприниматься как стеб. Автор сабжа молчит.


 
Gorger ©   (2006-02-19 02:44) [10]

"разве функция Round поможет передвинуться на пиксель!":
Именно Round и важен для гладкого, а не "угловатого" поточечного вычисления гипотенузы.


 
Джо ©   (2006-02-19 02:46) [11]

> [9] Германн ©   (19.02.06 02:37)
> сабжа молчит.

Спит, вероятно. И правильно делает :)

Ну, 1 пиксель, это я понял просто как неудачный пример. Наверное, просто хочется передвигать фигуру в заданном направлении. Догадки, догадки... Просто вчера этот человек спрашивал вот такое:
http://delphimaster.net/view/15-1140210575/


 
Германн ©   (2006-02-19 02:59) [12]


> Джо ©   (19.02.06 02:46) [11]
>
> > [9] Германн ©   (19.02.06 02:37)
> > сабжа молчит.
>
> Спит, вероятно. И правильно делает :)
>
> Ну, 1 пиксель, это я понял просто как неудачный пример.
> Наверное, просто хочется передвигать фигуру в заданном направлении.
>  Догадки, догадки... Просто вчера этот человек спрашивал
> вот такое:
> http://delphimaster.net/view/15-1140210575/
>


А мы, дураки, почему не спим! :)))

Вчера мой провайдер "свалился" и я не смог выйти в мир И-нета. :(((


 
Defunct ©   (2006-02-19 03:13) [13]

> А мы, дураки, почему не спим! :)))

бессонница?

а почему бы по 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;


 
Defunct ©   (2006-02-19 03:14) [14]

ой. торможу.

y := k * x + b;

:)


 
Джо ©   (2006-02-19 03:41) [15]

> [13] Defunct ©   (19.02.06 03:13)
> а почему бы по y = kx + b не сделать?

А просили "по углу и расстоянию", а не по угловому коэффициенту :P


 
Defunct ©   (2006-02-19 04:21) [16]

Sabj - Движение под углом с шагом 1 пиксель...
что попросили то и дали.. ;>


 
Compton's G ©   (2006-02-19 17:05) [17]

Я не спал просто, инет не работал.
Да по поводу "перемещения на 1 пиксель", это я подобрал неудачный пример, имелось введу просто перемещение.

Всем спасибо, помогли :)


 
Compton's G ©   (2006-02-19 17:07) [18]

Defunct ©   (19.02.06 04:21) [16]

Джо ©   (19.02.06 03:41) [15]

Посморел на время ваших сообщений...ого... когда же вы отдыхаете? :)


 
Defunct ©   (2006-02-19 17:16) [19]

> Посморел на время ваших сообщений...ого... когда же вы отдыхаете? :)

редко..



Страницы: 1 вся ветка

Текущий архив: 2006.03.26;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.044 c
2-1141708813
Sirus
2006-03-07 08:20
2006.03.26
Объект Canvas


15-1141060320
Kerk
2006-02-27 20:12
2006.03.26
Пришла SMS. Вместо номера отправителя - строка "FBI".


15-1141060496
I am
2006-02-27 20:14
2006.03.26
Оптимальный вариант проверки подлинности


2-1142049830
mfender
2006-03-11 07:03
2006.03.26
Редактор TStrings в Design-Time


2-1142248218
Fenix
2006-03-13 14:10
2006.03.26
WebBrowser