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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2016, 17:03   #1
кусака44
 
Регистрация: 27.12.2016
Сообщений: 9
По умолчанию 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 в 17:25.
кусака44 вне форума Ответить с цитированием
Старый 31.12.2016, 18:02   #2
кусака44
 
Регистрация: 27.12.2016
Сообщений: 9
По умолчанию вроде так надо

nz := -(nz - Val1) ;
Хорошо поставленный вопрос это половина ответа.
Круг это свёрнутый в кольцо квадрат.
кусака44 вне форума Ответить с цитированием
Старый 31.12.2016, 19:08   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

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

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

формула вращения из delphisources.ru программа - 3d_rotator
повороты вокруг любой точки
Хорошо поставленный вопрос это половина ответа.
Круг это свёрнутый в кольцо квадрат.
кусака44 вне форума Ответить с цитированием
Старый 04.01.2017, 17:14   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

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

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

Последний раз редактировалось кусака44; 07.01.2017 в 14:18.
кусака44 вне форума Ответить с цитированием
Старый 07.01.2017, 19:43   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

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

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

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

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

Всем спасибо, задача решена, особенно благодаря автору программы - 3d_rotator .
Хорошо поставленный вопрос это половина ответа.
Круг это свёрнутый в кольцо квадрат.

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


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

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

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


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