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

Вниз

найти вектор A->B   Найти похожие ветки 

 
PsyhoBlob   (2005-05-18 23:35) [0]

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

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

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

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


 
XProger ©   (2005-05-19 00:05) [1]

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


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

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


 
XProger ©   (2005-05-19 01:21) [3]

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


 
PsyhoBlob   (2005-05-19 05:38) [4]

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


 
OSokin ©   (2005-05-19 21:27) [5]


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-20 05:24) [6]

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;


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

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


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

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

Что тут?

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

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

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


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

> 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)


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

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

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

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


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

> PsyhoBlob   (21.05.05 01:53) [10]

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

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

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


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

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


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

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

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


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


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

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

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


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

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


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

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



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

Форум: "Игры";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.011 c
4-1122359742
idiliya
2005-07-26 10:35
2005.09.18
Как правильно нотифицировать сервис из Winlogon Notification Pack


3-1122989575
Hose
2005-08-02 17:32
2005.09.18
QR 3.6 Prof и композитный отчет. Как печатать с новой страницы?


14-1124556764
ArtemESC
2005-08-20 20:52
2005.09.18
Соответствия команд ASM


3-1123565477
Shopot
2005-08-09 09:31
2005.09.18
ADO Query и SQL Server. Проблемы с памятью.


6-1115804056
User3000
2005-05-11 13:34
2005.09.18
Ф-ия для получения трафика из UserGate-a





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