Ваша панель определяется нормальным вектором
n=(xn,yn,zn)
Для трансформации координации нам понадобятся 2 базовых вектора и нулевая точка для панели.
Базовые векторы
Мы выбрали те, которые "естественно" подходят к панели x / y (см. Ниже для случая краев):
b1=(1,0,zb1)
b2=(0,1,zb2)
И мы хотим
b1 x b2 = n*c
(c const скаляр)
чтобы убедиться, что эти два действительно базовые
Теперь решите это:
b1 x b2= (0*zb2-zb1*1,zb1*0-1*zb2,1*1-0*0) = (zb1,zb2,1)
zb1*c=xn
zb2*c=yn
1*c=zn
c=zn,
zb2=yn/c=yn/zn
zb1=xn/c=xn/zn
b1=(1,0,yn/zn)
b2=(0,1,xn/zn)
и нормализовать это
bv1=(1,0,yn/zn)*sqrt(1+(yn/zn*yn/zn))
bv2=(0,1,yn/zn)*sqrt(1+(xn/zn*xn/zn))
Крайний случай - это когда zn = 0: в этом случае вектор нормали параллелен панели x / y, и естественных базовых векторов не существует, в этом случае вам нужно выбрать базовые векторы b1 и b2 с помощью эстетической точки зрения и пройти через тот же процесс решения или просто выбрал bv1 и bv2.
Нулевая точка
вы говорили об отсутствии точки привязки для вашей панели в OQ, но необходимо отличать вашу панель от бесконечного семейства параллельных панелей.
Если ваша точка привязки (0,0,0), это идеальная точка привязки для преобразования координат, и ваша панель имеет
x*xn+y*yn+z*zn=0,
(y0,y0,z0)=(0,0,0)
Если нет, я предполагаю, что у вас есть точка привязки (xa, ya, za), и ваша панель имеет
x*xn+y*yn+z*zn=d
с d const скаляр. Естественной подгонкой будет точка панели, которая определяется нормальной проекцией исходной нулевой точки на панель:
P0=(x0,y0,z0)
с участием
(x0, y0, z0) = c * (xn,yn,zn)
Решение этого против
x*xn+y*yn+z*zn=d
дает
c*xn*xn+c*yn*yn+c*zn*zn=d
и
c=d/(xn*xn+yn*yn+zn*zn)
таким образом
P0=(x0,y0,z0)=c*(xn,yn,zn)
находится.
Окончательное преобразование
достигается путем представления каждой точки вашей панели (то есть тех точек, которые вы хотите показать) как
P0+x'*bv1+y'*bv2
где x 'и y' являются новыми координатами. Поскольку мы знаем P0, bv1 и bv2, это довольно тривиально. Если мы не находимся в граничном случае, у нас есть нули в bv1.y и bv2.x, что еще больше снижает проблему.
x 'и y' - новые координаты, которые вам нужны.
person
Eugen Rieck
schedule
08.01.2012