Главная страница
    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.036 c
2-1141897963
DelphiN!
2006-03-09 12:52
2006.03.26
Перевод массива ASCLL кодов в их символьное представление


15-1141484609
Зм1й
2006-03-04 18:03
2006.03.26
Помогите с WebMoney!


1-1140919693
Grol
2006-02-26 05:08
2006.03.26
Быстро обновить все визуальные компонент на форме


15-1141120583
AlexeyT
2006-02-28 12:56
2006.03.26
Статья "Написание оптимального кода под Delphi"


2-1142236665
Gleb
2006-03-13 10:57
2006.03.26
Вот дано: memo1 и []-Checkbox1..7(Как спомощью CheckBox1..7 мен)





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