Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Основной форум

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 03.02.2011, 12:50   #1
Gector
Легенда
 
Аватар для Gector
 
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений
(для 5,072 пользователей)
360 Градусов

    DX:=pointer_x-first_pointer_x;
    DY:=pointer_y-first_pointer_y;
    angle:=ToDegrees(atan2(DY,DX));
Вот этот вобщем-то простейший код нахождения угла отрезка выдает какой то непонятный результат. Угол 180 градусов который по смыслу должен быть параллелен оси Х проходит диагональю.
Можно ли вернуть угол отрезка в градусах от 0 до 360? Или от 0 до 180(-180)
__________________
Ибо как сказал Бгдн:
(Offline)
 
Ответить с цитированием
Старый 03.02.2011, 15:56   #2
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: 360 Градусов

не знаю что за мидлет и что за ToDegrees, atan2 сам по себе возвращает угол, возможно тебе надо ещё нормализовать DX и DY
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Gector (03.02.2011)
Старый 03.02.2011, 16:00   #3
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: 360 Градусов

Зачем используете Atan2? Он служит для конвертирования прямоугольных координат в полярные.
Нужно использовать Atan, он как раз выдает угол от -pi/2 до pi/2 (в радианах).
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Gector (03.02.2011)
Старый 06.02.2011, 01:08   #4
Gector
Легенда
 
Аватар для Gector
 
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений
(для 5,072 пользователей)
Ответ: 360 Градусов

Всё). Не могу больше). Не получается применить старые проверенные еще флешем коды... Не пойму в чем дело.
Как сделать полет снаряда через координаты двух точек?)
Вроде того что на картинке.
Миниатюры
Нажмите на изображение для увеличения
Название: i.JPG
Просмотров: 846
Размер:	5.6 Кб
ID:	12591  
__________________
Ибо как сказал Бгдн:
(Offline)
 
Ответить с цитированием
Старый 06.02.2011, 02:33   #5
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: 360 Градусов

1. определить тип аппроксимирующей кривой, описвающей траекторию.
2. вычислить праметры, задающие кривую
3. записать уравнения координат тела.

1. прямая линия. уравнение вида y(x)=kx+b
2. два параметра, две заданных точки
y1=k*x1+b
y2=k*x2+b
решаем систему, находим k и b.
3. y(t)=yn+sin(a)*t
x(t)=xn+cos(a)*t
a=k, хn=x1, yn=y1
b нужно для решения системы (2), в дальнейшем компенсируется значениями (xn;yn), т.к. характеризует вертикальный сдвиг прямой (перенос по оси 0Y). [можно перписать в виде y(t)=xn+sin(a)*t+b].
3.1. а можно сразу выразить как atan2[(y2-y1),(x2-x1)]. Внимание: в разных языках значение первого и второго аругмента может быть инвертировано (т.е. где-то f(x,y), а где-то f(y,x) - обязательно прочесть инструкцию).
Примечание: надо отметить, что знак зависимой части в уравнении для ординаты, завист от ориентации вертикальной оси интерфейса вывода (как правило, не совпадает с классической математической).
Примечание: ряд задач может требовать рекурентное задние уравнений (3).
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Gector (06.02.2011)
Старый 06.02.2011, 10:09   #6
Gector
Легенда
 
Аватар для Gector
 
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений
(для 5,072 пользователей)
Ответ: 360 Градусов

Сообщение от impersonalis Посмотреть сообщение
1. определить тип аппроксимирующей кривой, описвающей траекторию.
2. вычислить праметры, задающие кривую
3. записать уравнения координат тела.

1. прямая линия. уравнение вида y(x)=kx+b
2. два параметра, две заданных точки
y1=k*x1+b
y2=k*x2+b
решаем систему, находим k и b.
3. y(t)=yn+sin(a)*t
x(t)=xn+cos(a)*t
a=k, хn=x1, yn=y1
b нужно для решения системы (2), в дальнейшем компенсируется значениями (xn;yn), т.к. характеризует вертикальный сдвиг прямой (перенос по оси 0Y). [можно перписать в виде y(t)=xn+sin(a)*t+b].
3.1. а можно сразу выразить как atan2[(y2-y1),(x2-x1)]. Внимание: в разных языках значение первого и второго аругмента может быть инвертировано (т.е. где-то f(x,y), а где-то f(y,x) - обязательно прочесть инструкцию).
Примечание: надо отметить, что знак зависимой части в уравнении для ординаты, завист от ориентации вертикальной оси интерфейса вывода (как правило, не совпадает с классической математической).
Примечание: ряд задач может требовать рекурентное задние уравнений (3).
У меня как раз с третьим методом проблема. Код выглядит примерно так(без паскалевского синтаксиса)
DelthaY=y2-y1
DelthaY=x2-x1
Angle=Atan2(DelthaY,DelthaX)*180/Pi
SpeedX=cos(Angle)*10;
SpeedY=sin(Angle)*10;
ProjectileX=ProjectileX+SpeedX
ProjectileY=ProjectileY+SpeedY
Вот этим кодом я пользовался еще с флеша. В паскале с ним какая то фигня. Угол получается мягко говоря странным.
Первые два метода еще не пробовал, спасибо. Надо над ними подумать.
__________________
Ибо как сказал Бгдн:
(Offline)
 
Ответить с цитированием
Старый 06.02.2011, 10:35   #7
Gector
Легенда
 
Аватар для Gector
 
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений
(для 5,072 пользователей)
Ответ: 360 Градусов

Во вложении jar файл с той фигней которую он мне выдает.
З.ы. Извините, но нормальный выход из приложения еще не готов).
Вложения
Тип файла: rar Angle.rar (7.5 Кб, 431 просмотров)
__________________
Ибо как сказал Бгдн:
(Offline)
 
Ответить с цитированием
Старый 06.02.2011, 11:18   #8
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений
(для 790 пользователей)
Ответ: 360 Градусов

1. прямая линия. уравнение вида y(x)=kx+b
2. два параметра, две заданных точки
y1=k*x1+b
y2=k*x2+b
Есть исключение-вертикальная линия
С точки зрения матаматики более точно было бы ax+by+c=0
Получаются 2 уравнения с 3 неизвестными, но они решаются.

Второй вариант-сделать вектор из первой точки во вторую.
Процедура даёт координаты точки(тебе ведь точка нужна?) на векторе, на расстоянии K от x1,y1
procedure xy_point(x1,y1,x2,y2,k:integer);
var L,mn:real;
x,y:real;
begin
//находим длину вектора
L:=sqrt(sqr(x1-x2)+sqr(y1-y2));
//смотрим во сколько раз длина больше нужной
mn:=K/L;
x:=x1+(x2-x1)*mn;
y:=y1+(y2-y1)*mn;
//х и у - координаты точки, делай с ними что хочешь)
end;

Инструкция:
запусти несколько раз, увеличивая k - точка полетит от x1,y1 до (и дальше тоже) x2,y2. При отрицательном К полетит в другую сторону.
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Gector (06.02.2011)
Старый 06.02.2011, 11:29   #9
Gector
Легенда
 
Аватар для Gector
 
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений
(для 5,072 пользователей)
Ответ: 360 Градусов

Спасибо. Попробую с точкой. Но вообще так мне нужна скорость. Мой метод основывается на поиске множителя скорости от 0 до 1 с помощью синуса угла между первой и второй точкой. Но не получилось. Угол не тот выдает.
__________________
Ибо как сказал Бгдн:
(Offline)
 
Ответить с цитированием
Старый 06.02.2011, 15:55   #10
Gector
Легенда
 
Аватар для Gector
 
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений
(для 5,072 пользователей)
Ответ: 360 Градусов

Вы будете смеяться но я нашел изящное до тупости решение проблемы.
YSpeed:=(pointer_y-first_pointer_y)/10;
YSpeed:=(pointer_x-first_pointer_x)/10;
Капец
__________________
Ибо как сказал Бгдн:
(Offline)
 
Ответить с цитированием
Старый 06.02.2011, 16:06   #11
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: 360 Градусов

Angle=Atan2(DelthaY,DelthaX)*180/Pi
SpeedX=cos(Angle)*10;
не бывает в нормальных ЯП такого, что обратные функции возвращают угол в градусах, а прямые принимают его в радианах и наоборот.
Angle=Atan2(DelthaY,DelthaX)
...cos(Angle)...
И твоё "решение" это просто использование масштабного коэффициента, компенсирующего предшествующее (ненужное!) умножение.

Сообщение от Igor Посмотреть сообщение
Есть исключение-вертикальная линия
С точки зрения матаматики более точно было бы ax+by+c=0
1.А для кого я про Атан2 написал?
2.Не "более точно", а в "каноническом виде"
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 06.02.2011, 16:15   #12
Gector
Легенда
 
Аватар для Gector
 
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений
(для 5,072 пользователей)
Ответ: 360 Градусов

Это решение(Предыдущее моё с арктангенсом) было в книге Джоба Макара по флешу. Использовал я его просто как проверенное. В любом случае всем спасибо).
__________________
Ибо как сказал Бгдн:
(Offline)
 
Ответить с цитированием
Старый 06.02.2011, 16:16   #13
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: 360 Градусов

Ну я же написал
не бывает в нормальных ЯП
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 06.02.2011, 16:32   #14
Gector
Легенда
 
Аватар для Gector
 
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений
(для 5,072 пользователей)
Ответ: 360 Градусов

Если честно мне это ни о чем не говорит. Например?
__________________
Ибо как сказал Бгдн:
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 22:01.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com