![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
SlazeR |
![]()
Сообщение
#1
|
Гость ![]() |
Прошу помощи. Мне задали сделать тор крутящийся вокруг осей X, Y, Z. Я прочитал статью по 3д графике Altair'а и сделал, но вот проблема - у меня не только тор крутится, но и оси. То есть после поворотов по оси Z и к примеру Y, начинаешь крутить по Х, то он уже крутит под каким-то углом... Объяснить, как то очень сложно. Я говорил с Altair'ом по ICQ, он понял но так ничего и не выслал и не подсказал. Ещё раз прошу помощи, реально закон жизни и смерти, без этого курсовика мне не закрыть сессию.
Сама прога:
Модуль Obj:
|
![]() ![]() |
SlazeR |
![]()
Сообщение
#2
|
Гость ![]() |
А у меня нормально, попробуй delay поставить больше =)
По началу да нормально, кроме Y. А вот после поворотов по Z, начинает и X. Просто оси поворачиваются, а мне надо чтобы они стояли в начальном положении и тор крутился вокруг них =) |
Lapp |
![]()
Сообщение
#3
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
По началу да нормально, кроме Y. А вот после поворотов по Z, начинает и X. Просто оси поворачиваются, а мне надо чтобы они стояли в начальном положении и тор крутился вокруг них =) Я бегло посмотрел - извини, если невпопад отвечу. Мне кажется, что ты накапливаешь (складываешь) все углы по каждой отдельной оси, а потом производишь повороты - сначала вокруг одной оси на суммарный угол, потом вокруг другой, потом вокруг третьей. Это, конечно, неправильно, поскольку группа поворотов вокруг осей некоммутативна (иначе говоря, нельзя менять порядок слагаемых). Эффект должен получиться, по моим прикидкам, примерно такой, как ты говоришь. Если я прав - напиши сюда, подумаем, как исправить.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
SlazeR |
![]()
Сообщение
#4
|
Гость ![]() |
Я бегло посмотрел - извини, если невпопад отвечу. Мне кажется, что ты накапливаешь (складываешь) все углы по каждой отдельной оси, а потом производишь повороты - сначала вокруг одной оси на суммарный угол, потом вокруг другой, потом вокруг третьей. Это, конечно, неправильно, поскольку группа поворотов вокруг осей некоммутативна (иначе говоря, нельзя менять порядок слагаемых). Эффект должен получиться, по моим прикидкам, примерно такой, как ты говоришь. Если я прав - напиши сюда, подумаем, как исправить.. У меня углы задаются отдельно для каждой оси: переменные rotate_x, rotate_y, rotate_z, они передаются в процедурки отрисовки, и там в процедуру высчета углов =) Если ты не это имел ввиду, то поясни конкрейтней. Вот ща думаю на идейкой, как нибудь связать с невидимыми осями... |
Lapp |
![]()
Сообщение
#5
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
У меня углы задаются отдельно для каждой оси: переменные rotate_x, rotate_y, rotate_z, они передаются в процедурки отрисовки, и там в процедуру высчета углов =) Если ты не это имел ввиду, то поясни конкрейтней. Вот ща думаю на идейкой, как нибудь связать с невидимыми осями... Я имел в виду вот, что. Допустим, ты повернул (кнопками) на угол 30 вокруг Y. После этого повернул на угол 90 вокруг X. Как ты теперь строишь изображение? Если ты в процессе построения... 1. берешь начальное положение, 2. сначала производишь второй поворот (на 90 вокруг X), 3. а потом первый - то это в корне неверно и приведет к тому, что ты называешь "вращение осей". Мне показалось, что ты делаешь именно так. Я не прав? Чтобы получить правильное изображение, нужно последовательно выполнять все повороты в том порядке, в котором они происходили. Типа: 30 вокруг Y, 90 вокруг Х, 20 вокруг Z, 10 вокруг Х, 10 вокруг Y.... В соответствии с этим, нельзя суммировать повороты по одной оси, если между ними были повороты вокруг другой. Накапливать (суммировать) можно только углы последовательных поворотов вокруг одной и той же оси. Выходов, соответственно, два: 1. Держать в памяти всю цепочку углов и каждый раз вертеть от начала. Этот метод требует очень много расчетов на каждом шагу, особенно если прога работает долго. 2. После каждого преобразования изменять начальное положение, делая текущее начальным. Этот метод работает быстро, но более подвержен накоплению ошибок вычислений. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
![]() |
Текстовая версия | 23.09.2025 8:44 |