Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.034 c
2-1142269570
alone
2006-03-13 20:06
2006.03.26
Система


4-1134725975
(CHALING 32)S K i N E R
2005-12-16 12:39
2006.03.26
Иконка в трее!


15-1141345693
Alsan
2006-03-03 03:28
2006.03.26
Как изменить код в DLL


15-1140039304
Piter
2006-02-16 00:35
2006.03.26
Заправка картриджей!


2-1142261468
Net_Imeni
2006-03-13 17:51
2006.03.26
keybd_event





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