Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.08.2008, 10:33   #21
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

Цитата:
Есть у меня такая черта, редко когда заканчиваю начатое. У меня на диске пылится куча незаконченных программ.
Тоже такое есть.

Код без рисунка не объяснить. В ближайшее время объясню.
Kostia вне форума Ответить с цитированием
Старый 31.08.2008, 10:58   #22
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Сообщение от Kostia Посмотреть сообщение
Тоже такое есть.

Код без рисунка не объяснить. В ближайшее время объясню.
Думаю не стоит, я и рисунок уже подготовил и писать начал, повтор получится. Я хочу объяснить саму основу - число пи, радианы, синус, косинус доступным языком, так чтобы понятно любому человеку стало. И самое главное - увидеть во всем этом практическую пользу, а не теория ради теории, как в школе учат. Вобщем научно-популярная статья будет.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 10.09.2008, 14:10   #23
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Итак, что же нужно для движения по окружности? Сначала определимся, что мы имеем. Мы имеем радиус (орбита планеты) и на этой орбите будем ее рисовать.
Если немного пораскинуть мозгами, можно догадаться что для анимации нужно менять не непосредственно координаты, как в случае с линейным движением, а угол. Для удобства восприятия я наложу картинку с солнцем и одной планетой на координатную плоскость.



В центре солнце, на орбите планета в трех различных положениях. Отсчет углов начинается с оси Х и идет против часовой стрелки. Но т.к. на канве начало Y координат вверху, а не внизу как в математике, в программе угол будет прирастать по часовой стрелке, т.е. имеем зеркальное отображение, но это мы забегаем вперед, пока я буду объяснять как в математике.

Итак, смотрим первое положение планеты – 0°. Она находится на оси Х. Смотрим третье положение на оси Y, угол 90°. С такими углами все очевидно, одна из координат равна нулю, вторая равна радиусу. Посмотрите на график и убедитесь, что это так. А как же быть с средним положением обозначенным буквой p? Тут все не так очевидно, и навскидку точные координаты не скажешь. Вот тут нам и нужна тригонометрия.

Проведем перпендикуляры от точки p на оси, они показаны пунктирной линией. Они пересеклись с осями в точках x и y (они красным цветом). Образовались треугольники. Рассмотрим треугльник spx. Он прямоугольный, надеюсь что это значит вы знаете, иначе сначала почитайте где нибудь про это и потом возвращайтесь к уроку. Раз он прямоугольный, то к нему применимы все теоремы про катеты, гипотенузы и т.д. Его сторона sp является радиусом нашей окружности, а как мы помним, это расстояние от солнца до планеты. Также она является гипотенузой этого треугольника и обозначена буквой r (радиус). Угол между одним из катетов и гипотенузой обозначен буквой А. Таким образом для того чтобы узнать координаты планеты, нужно узнать катеты этого прямоугольника sx и px. Иначе говоря положения точек x и y на своих осях. Чтобы понять, смотрите график.

Теорема гласит – синус угла A (альфа) это отношение противолежащего катета к гипотенузе. У нас это
sin(a) = px / r
преобразуем это и получим
px = sin(a) * r
сторону px можно представить просто как координату y, нам собственно она и нужна
y = sin(a) * r

То же самое с косинусом – отношением прилежащего катета к гипотенузе.
cos(a) = sx / r
sx = cos(a) * r
x = cos(a) * r

Радиус нам известен, так что осталось найти синус и косинус. В Дельфи есть соответствующие функции sin и cos. Но не спешите открывать проект, я еще не все рассказал.

Так как радиус у нас не меняется, с увеличением катета px (движением планеты против часовой стрелки) будет увеличиваться и синус, ведь синус это отношение радиуса к этому катету. Таким образом синус угла A привязан к этотму катету, т.е. к координате y. С косинусом (и координатой x) в это время будет происходить противоположное, он будет уменьшаться, при 90° он станет равным нулю, синус - единице. При движении дальше косинус станет отрицательным, и будет нарастать, синус будет уменьшаться. Проследите мысленно движение точки дальше по орбите и подумайте как будут изменяться ее координаты.

Также есть еще интересный момент. И синус и косинус всегда меньше либо равен единице, независимо от знака. Почему? Смотрите сами. Катет всегда меньше гипотенузы. Согласны? А мы его (катет) на нее (гипотенузу) делим, т.е. ни при каких обстоятельствах больше единицы они (синус и косинус) не будут.

Подитожим, если нам надо найти x координату узнаем косинус, надо найти y узнаем синус.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 10.09.2008 в 21:23.
mutabor вне форума Ответить с цитированием
Старый 10.09.2008, 14:11   #24
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Идем дальше. Углы в тригонометрия принято обозначать в радианах. Функции Дельфи в качестве аргумента также хотят видеть значение угла в радианах. Так что, чтобы не переводить каждый раз из градусов, хотя это и возможно, и даже функция такая есть, мы будем угол считать в радианах, мы же хотим понять как все это работает, не так ли?

Понятие радиана неразрывно с числом Пи. Сначала узнаем что же это за число.
Вот его определение с Википедии.
Число πи — математическая константа, выражающая отношение длины окружности к длине её диаметра. Обозначается буквой греческого алфавита «пи».
А вот поясняющая картинка оттуда же.



Другими словами число πи означает сколько диаметров помещается в длине окружности.

Теперь можно приступить к радиану. Его определение я дам своими словами.
Радиан - это угол при к-ром длина дуги окружности равна радиусу. Другими словами сколько радиусов помещается в длине дуги.
Когда-то встречал красивую и понятную картинку в сети, но не нашел, все корявые или много лишнего. Нарисовал сам, на глаз, примерно, может быть угол не совсем точно 1 рад, но для понимания сути это не важно.



Теперь разберемся сколько радиан в полукруге и полной окружности. Сколько градусов я надеюсь вы знаете – 360°. А сколько же радиан? Вспомним число πи. И возьмем для начал полукруг т.е. 180°.

Чтобы узнать сколько радиан в полукруге (т.е. сколько радиусов помещается в длине дуги) надо соответственно длину этой дуги поделить на радиус.

длина дуги полукруга = длина окружности / 2
радиус = диаметр / 2

мы знаем что:
πи = длина окружности / диаметр
а найти нам надо:
(длина окружности/2) / (диаметр/2)

Поделив получим опять же число πи.

180° = Пи радиан ≈ 3,14 радиан
360° = 2Пи радиан ≈ 6,28 радиан

В Дельфи число Пи есть, мы можем его использовать в расчетах если надо, обозначается оно так – pi. Для хранения угла в радианах понадобится переменная одного из вещественных типов (Real, Single, Double, Extended etc.).
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 10.09.2008 в 14:25.
mutabor вне форума Ответить с цитированием
Старый 10.09.2008, 16:25   #25
Селезин
Пользователь
 
Регистрация: 29.03.2007
Сообщений: 11
По умолчанию

А как насчет законов Кеплера?
Селезин вне форума Ответить с цитированием
Старый 10.09.2008, 16:28   #26
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Извините, что влез, маленькая поправочка
Цитата:
Угол между катетами обозначен буквой А.
Угол между катетами прямоугольного треугольника всегда прямой (90 град.). Угол А на рис. - между гипотенузой и одним из катетов.
А так все очень понятно и красиво объяснено.

To Селёзин - Кто такой Кеплер? Он что, твой родственник?
И не сомневайся даже ... отдых - кайф, работа - лажа!

Последний раз редактировалось DeKot; 10.09.2008 в 16:57.
DeKot вне форума Ответить с цитированием
Старый 10.09.2008, 23:18   #27
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Сообщение от Селезин Посмотреть сообщение
А как насчет законов Кеплера?
Еще один астроном )
Для тех, кто в танке, внимательно читать первую страницу темы.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 11.09.2008, 08:12   #28
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Уважаемый mutabor, не расскажете, как Вы создаете анимационные рисунки (и просто рисунки) и как их вставляете в сообщение?
А то я в этом полный ноль. Можно в личку, а то немного не о теме.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 11.09.2008, 12:36   #29
Селезин
Пользователь
 
Регистрация: 29.03.2007
Сообщений: 11
По умолчанию

Цитата:
Еще один астроном )
Для тех, кто в танке, внимательно читать первую страницу темы.
Цитата:
Единственный параметр к-рый я хочу соблюсти это период обращения, при этом программа будет определять парад планет, если я не ошибаюсь это когда все планеты выстраиваются в ряд.
Интересно, как можно вычислить парад планет, если не соблюдать скорости вращения?
Селезин вне форума Ответить с цитированием
Старый 11.09.2008, 13:01   #30
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Так ведь скорость вращения задается самими параметрами :
Vлинейная = 2 * pi * orbits / periods;
Vугловая = 2 * pi / periods;
Задача найти число, кратное скорости вращения каждой планеты.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Знакомство с одноклассниками Alar Свободное общение 10 03.07.2008 22:20
Файловая система student_63 Win Api 1 12.04.2008 20:29
Система координат SunKnight Общие вопросы Delphi 2 05.02.2008 19:42