kealon(Ruslan)
Дата: 06.12.2017 19:23:52
roleks,
у вас как-то не очень с вопросами
>>С его границы идет вектор в точку 0 0 0
и что? что за вектор? с какой границы?
>>Как имея эти данные построить матрицу трансформации.
самый главный вопрос: куда матрица должна трансформировать?
http://compgraph.tpu.ru/3d.htmпотом смотрим произведение матриц
kealon(Ruslan)
Дата: 07.12.2017 00:01:22
roleks,
тут программисты ходют, и я думаю не многие из них поклонники автокада
но вот как нарисовать эту фиговинку большинство понимает, а что вы хотите - непонятно
exp98
Дата: 07.12.2017 10:25:36
Дык наверняка подразумеваются к.-нить проективные координаты, а "точка зрения" = тому самому вектору с "поверхности". Типа задайте его сами в общем виде, а мне дайте результат. Ни тебе самостоятельных попыток, ни уточняющих вопросов. Напоминает сериал о цилиндре.
kealon(Ruslan)
Дата: 07.12.2017 11:19:20
exp98,
ну давай потелепатим, возьмём изометрическую проекцию:
координаты наблюдателя (xn,yn,zn), сместим к ним координаты
Shift(-xn,-yn,-zn) * (x,y,n)
азимут просмотра - a [0, 2Пи)
RotateZ(-a) * Shift(-xn,-yn,-zn) * (x,y,n)
отклонение от вертикали - fi [-Пи/2, Пи/2]
RotateX(-fi) * RotateZ(-a) * Shift(-xn,-yn,-zn) * (x,y,n)
накинем матрицу масштаба с коэффициентом - S
Scale(S) * RotateX(-fi) * RotateZ(-a) * Shift(-xn,-yn,-zn) * (x,y,n)
итоговая матрица выходит:
Scale(S) * RotateX(-fi) * RotateZ(-a) * Shift(-xn,-yn,-zn)
exp98
Дата: 07.12.2017 15:42:16
"Так бы сразу и сказал"(с)
вектор (координаты) наблюдателя (xn-0, yn-0, zn-0) = b
азимут просмотра - a [0, 2Пи)
отклонение от вертикали - fi [-Пи/2, Пи/2]
^ - угол между векторами
Pr( b, XY ) - проекция b на плоскость XY, т.е zn :=0
Cos fi= Cos( b^OZ) = скалярное пр-ние
Cos( a) = Cos( OX ^ Pr( b, XY )) = скалярное пр-ние