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

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

найти вектор A->B [Delphi, C++ Builder, JBuilder, Все, Windows]


PsyhoBlob ©   (2005-05-18 23:35:00) 

Есть A(X1,Y1) B(X2,Y2), ну и Angle, мне наверное мозги в детстве ампутировали но я незнаю как сделать так чтобы в Angle было занчение которое-бы при X1=Sin(Angle) Y1=Cos(Angle) указывало на B.

Короче есть мужик с пушкой и есть страшный монстр, надо чтобы мужик направил пушку на монстра.

Там примеры библиотеки или еще чегонить.

PS: просьба только страыми формулами не кидатся, а то у меня последние 3 нейрона в кому впадут


PsyhoBlob   (2005-05-21 07:36:00) [1]


> Причем тут синусы, косинусы?

Ну я говорю что полный тормоз в этих делах, меня в школе заставляли спать на математике :)

Ну а насчет синусов и косинусов, я просто знаю что при помощи них можно двигать точку в нужном направлении.


> И наведите порядок в терминологии

У меня и с терминами такиеже проблеммы, буду искать школьные учебники.


> И не надо никаих доп. расчетов. Зачем?

Вот и говорю зачем? Хоть и ничего непонял.


Думкин   (2005-05-21 04:56:00) [2]

> Неважно откуда, можно и приравнивать все к нулю, но это
> дополнительные расчёты по смещению координат и последующему
> востановлению

Важно. Потому как важно - какой вектор нормировать. Если в начале то OB, если в точке E<>O то EB.
И не надо никаих доп. расчетов. Зачем?


Думкин   (2005-05-21 04:52:00) [3]

И наведите порядок в терминологии.
Все-таки векторное пространство и евклидово - связываются. Но вовсе не одно и тоже.
Потому как у вас вектор OAпринадлежащий векторному пространству а точка B - уже элемент евклидова.
Про монстра забавно - но полной картины не дает.


Думкин   (2005-05-21 04:47:00) [4]

> PsyhoBlob   (21.05.05 01:53) [10]

Причем тут синусы, косинусы?
Все что вы ищете - это по заданному вектору - коллинеарный с длиной 1. Это достигается указанным мной нормированием. Хоть в 100-мерном пространстве.

А насчет всего остального - аналитическая геометрия. Притом вовсе не дебри. Без азов этого вы вечно будете побираться с подобными вопросами.

И синусы, косинусы - есть термин в данном случае - направляющие косинусы. И теоремка про них.


PsyhoBlob   (2005-05-21 01:53:00) [5]

Основание то пушки из откуда? Из (0,0)?
Неважно откуда, можно и приравнивать все к нулю, но это дополнительные расчёты по смещению координат и последующему востановлению

Верная формулировка задачи - 95% ее решения. :(
Bот с формулами и формулировками  меня боольшие проблемы :(

А вообще меня сейчас крайне интересует нахождение вектора в 3-ёх мерном пространстве, т.е, одним углом не обойтись, а наверное надо что-то типа ширину\долготу использовать, но даже если я буду знать ширину\долготу, то тогда еще проблема для меня двигать "точку" по координате Z. если X=Cos Y=Sin то чего тогда делать с Z?


Думкин   (2005-05-20 15:46:00) [6]

> X1 = X2/(X2^2+Y1^2) Y1 = Y2/(X2^2+Y1^2)

точнее

X1 = X2/sqrt(X2^2+Y1^2) Y1 = Y2/sqrt(X2^2+Y1^2)


Думкин   (2005-05-20 15:45:00) [7]

Надо чтобы соответствующие координаты были пропрциональны:
X1/X2=Y1/Y2
Далее добавим из твоих требований нормирование: X1^2+Y1^2=1

Что тут?

X1 = X2/(X2^2+Y1^2) Y1 = Y2/(X2^2+Y1^2)

Основание то пушки из откуда? Из (0,0)?

Верная формулировка задачи - 95% ее решения. :(


LEGIONER75   (2005-05-20 11:15:00) [8]

зАЙДИ НА САЙТ WWW.GLSCENE.ORG  ТАМ ЕСТЬ В ПРИМЕРАХ (ДЕМО) ОБРАБОТКА СТОЛКНОВЕНИЙ  - cOLLISIONS - ПОМОЕМУ НАЗЫВАЕТСЯ.


PsyhoBlob   (2005-05-20 05:24:00) [9]

2OSokin

1)Причем тут координаты мыши.
2)Вообщето вроде как тригонометрию и прочие векторные и подобные операции с углами, вроде как принято делать с типом Single или Double, и использовать радианы.
3)Может я обсолютный дурак но я код понял только до GetCursorPos(p);

А вообще вариант XProgera заработал вот в таком виде:
if X1 < X2 then
Angle := ArcTan((Y1 - Y2)/(X1 - X2 + 0.0000001)) else
Angle := ArcTan((Y1 - Y2)/(X1 - X2 + 0.0000001))+ PI;


OSokin   (2005-05-19 21:27:00) [10]


var
 p:TPoint;
 angle:integer;
begin
 GetCursorPos(p);
 p.x:=p.x-mainx+16;
 p.y:=-(p.y-mainy+16);
 if (pl[0].diei=0)and(not(win)) then begin
 angle:=-round(radtodeg(arcsin(p.x/sqrt((sqr(p.x)+sqr(p.y))))));
 if p.y<0 then angle:=180-angle;
 if angle>360 then angle:=angle-360;
 if angle<0 then angle:=angle+360;  

Здесь: p.x, p.y - координаты мыши (+16 - для центра курсора), angle - угол (после выполнения кода ставишь его как угол поворота хумана)


PsyhoBlob   (2005-05-19 05:38:00) [11]

XProger ну понятно что нужно наверное два, чтото типа полярных координат


XProger   (2005-05-19 01:21:00) [12]

PsyhoBlob, если добавить Z, то одним углом ты не обойдёшься :)


PsyhoBlob   (2005-05-19 00:13:00) [13]

Спасибо. я даже почти понял :)
Так а если немного усложнить и добавить еще Z, это я так на будующее хотел-бы узнать, языков знаю кучу а с математикой труба


XProger   (2005-05-19 00:05:00) [14]

Angle = ArcTan((Y1 - Y2)/(X1 - X2 + 0.0000001));
0.0000001 - делить на 0 нельзя! ;)


Наверх

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