Форум программистов  
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Мультимедиа в Delphi
Регистрация

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

Ответ
 
Опции темы
Старый 30.12.2016, 18:03   #1
кусака44
 
Регистрация: 27.12.2016
Сообщений: 9
Репутация: 10
По умолчанию 3D изменение z при вращении вокруг точки

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

есть код:
Val1 := 256;
c[Angle1] - массив с косинусом углов
Angle1 угол по x
Angle2 угол по y
x, y, z начальные значения точки


nz := (-x ) *(c[Angle1]*c[Angle2]) - (y) *(s[Angle1]*c[Angle2])-z*s[Angle2]+Val1; // nz число получаемое явно не новое z
nx := ((-x ) *s[Angle1]+ (curr2.y) *c[Angle1])/nz;
ny := ((-x ) *(c[Angle1]*s[Angle2])- (y) *(s[Angle1]*s[Angle2])+z*c[Angle2])/nz;

nz := ? ;

//---Projection 3D->2D---
nx := round(nx*Zoom2) ; // новое значение точки x
ny := round(ny*Zoom2) ; // y
nz := ? ;

Последний раз редактировалось кусака44; 30.12.2016 в 18:25.
кусака44 вне форума   Ответить с цитированием
Старый 31.12.2016, 19:02   #2
кусака44
 
Регистрация: 27.12.2016
Сообщений: 9
Репутация: 10
По умолчанию вроде так надо

nz := -(nz - Val1) ;
кусака44 вне форума   Ответить с цитированием
Старый 31.12.2016, 20:08   #3
BDA
Модератор
Заслуженный модератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Адрес: RF Moscow
Сообщений: 5,362
Репутация: 2407

icq: 438888048
По умолчанию

Может быть, попробуете составить формулы через матрицы перехода просто?
Прикинул формулы (перемещение точки, повороты по 2 осям, перемещение обратно) - получились сложнее, чем у вас сейчас. Скажите, вокруг какой точки совершаете повороты?
__________________
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 31.12.2016 в 20:32.
BDA вне форума   Ответить с цитированием
Старый 04.01.2017, 15:17   #4
кусака44
 
Регистрация: 27.12.2016
Сообщений: 9
Репутация: 10
По умолчанию

формула вращения из delphisources.ru программа - 3d_rotator
повороты вокруг любой точки
кусака44 вне форума   Ответить с цитированием
Старый 04.01.2017, 18:14   #5
BDA
Модератор
Заслуженный модератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Адрес: RF Moscow
Сообщений: 5,362
Репутация: 2407

icq: 438888048
По умолчанию

Так в коде 3d_rotator поворот вокруг начала координат, а не какой-то любой точки.
__________________
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума   Ответить с цитированием
Старый 07.01.2017, 15:13   #6
кусака44
 
Регистрация: 27.12.2016
Сообщений: 9
Репутация: 10
По умолчанию

Да, но этот код несложно подправить чтобы вращение было вокруг любой точки.

Последний раз редактировалось кусака44; 07.01.2017 в 15:18.
кусака44 вне форума   Ответить с цитированием
Старый 07.01.2017, 20:43   #7
BDA
Модератор
Заслуженный модератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Адрес: RF Moscow
Сообщений: 5,362
Репутация: 2407

icq: 438888048
По умолчанию

Чтобы сделать повороты вокруг 2 точек, стоит делать примерно так:
Сместить точку (x, y, z) (вычесть координаты точки поворота (x1, y1, z1));
Повернуть точку вокруг осей по формулам выше;
Сместить точку обратно (добавить координаты точки поворота (x1, y1, z1));
Повторить действия выше для точки поворота (x2, y2, z2).

Думаю, что просто не нужно делить nx и ny на nz, и не прибавлять к nz val1 сразу. Предположу, что это уже нужно для проецирования из 3D в 2D. То есть, для поворота оставить только работу с синусами и косинусами.
__________________
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума   Ответить с цитированием
Старый 08.01.2017, 17:36   #8
кусака44
 
Регистрация: 27.12.2016
Сообщений: 9
Репутация: 10
По умолчанию

Типа того уже сделал, вращается вокруг 2 точек. Крутится, перемещается и вращается (куб) как надо (вокруг своего центра и вокруг 2 точки), правда мелькают непонятные квадраты в конце цикла, но это дело поправимое.

Zoom2 := 256 ; поэтому nx и ny восстанавливаются, пока так оставил.

Всем спасибо, задача решена, особенно благодаря автору программы - 3d_rotator .

Последний раз редактировалось кусака44; 08.01.2017 в 17:54.
кусака44 вне форума   Ответить с цитированием
Ответ



Опции темы

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

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

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переполнение стека при вращении PNG grominfo Мультимедиа в Delphi 0 05.02.2015 20:39
Вращение камеры вокруг точки GoldBuzz Gamedev - cоздание и обсуждение игр 3 08.01.2013 14:01
Flash сглаживание при вращении изображения demon112 Общие вопросы Web 2 23.12.2012 11:17
Вращение камеры вокруг точки jetei Gamedev - cоздание и обсуждение игр 2 11.02.2012 12:48
поворот точки вокруг оси NiCola999 Общие вопросы C/C++ 5 13.08.2010 13:19




06:29.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru