![]() |
|
|
![]()
|
|
| piritus |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 226 Регистрация: 3.1.2007 Где: Сибирь Репутация: 1 Всего: 3 |
Здравствуйте.
Есть отрезок в пространстве. Его начальная точка совпадает с началом координат (x=0, y=0, z=0), конечная точка имеет координаты x=m, y=n, z=0. Нужно вращать отрезок вокруг оси z, т.е. z всегда равно 0. При повороте отрезка вокруг оси OZ на определенный угол, координаты x и y будут меняться по следующей формуле: x' = x*cos q - y*sin q y' = x*sin q + y*cos q z' = z Следовательно матрица будет иметь следующий вид: ( cos q sin q 0 0) Rz (q) = (-sin q cos q 0 0) ( 0 0 1 0) ( 0 0 0 1) Можно использовать только LineTo (OpenGL и DirectX не использовать). Вопрос: Как обозначить точку в пространстве на плоскости, т.е. точку с координатами xyz в поле окна программы? (ведь там есть только x и y) --------------------
|
|||
|
||||
| AndNot |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 28.2.2008 Репутация: нет Всего: нет |
Есть два способа. Самый простой:
Xscr = X * ScreenDist / Z + ScrOriginX Yscr = Y * ScreenDist / Z + ScrOriginY в качестве дистанции частенько брали 256 (для fixed point), поэтому все расчеты сводились к: ScrOriginX и ScrOriginY - это начало координат экрана (для оконных приложений), обычно равно нулю. Поэтому все вырождалось в:
В EAX fixed point 8:8, т.е. в старшем байте - целое, а в младшем - "дробное". Можно и через матрицы, но это лишние операции. Если интересно, то напишу как. |
|||
|
||||
| piritus |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 226 Регистрация: 3.1.2007 Где: Сибирь Репутация: 1 Всего: 3 |
Благодарю. Сейчас буду пробовать.
Было бы очень интересно посмотреть, как через матрицы высчитывать. --------------------
|
|||
|
||||
| piritus |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 226 Регистрация: 3.1.2007 Где: Сибирь Репутация: 1 Всего: 3 |
Не понял, как переводится из 3d в 2d по приведенной формуле.
Например: Дан куб, длина стороны L=55мм Начало координат (x,y) совпадает с точкой О изометрии (x,y,z). Возьмем точку, лежащую на середине ближней грани куба, т.е. т(55;55;27,5). Если подставить в формулу: Xscr = X * ScreenDist / Z + ScrOriginX Yscr = Y * ScreenDist / Z + ScrOriginY то получим, что Xscr = ScreenDist * 55/27,5 Yscr = ScreenDist * 55/27,5 т.е. Xscr == Yscr Хотя на самом деле видно, что Xscr = 0 Yscr = 27,5 Где ошибка? Это сообщение отредактировал(а) piritus - 4.7.2009, 22:50 --------------------
|
|||
|
||||
| Goodwin98 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 1.7.2009 Где: Deeptown Репутация: 1 Всего: 5 |
Судя по рисунку начальная координата Х не может быть 55 она так же 0, да и Z должен быть 19,44 , а не 27,5. Это сообщение отредактировал(а) Goodwin98 - 5.7.2009, 16:00 |
|||
|
||||
| piritus |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 226 Регистрация: 3.1.2007 Где: Сибирь Репутация: 1 Всего: 3 |
Вопрос решен, верное решение дали на васме.
--------------------
|
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |