gpt4 book ai didi

algorithm - 从法向量给定的平面到 XY 平面的映射坐标

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:54:17 24 4
gpt4 key购买 nike

所以,我有这个算法来计算 3D 形状的横截面,平面带有法向量。

但是,我目前的问题是,横截面是一组 3D 点(全部位于给定平面上)并且要显示它,我需要将此坐标映射到 XY 平面。

如果平面法线类似于 (0,0,c) - 我只是复制 x 和 y 坐标并丢弃 z。

这是我的问题:因为我不知道如何转换任何其他平原,任何人都可以给我任何关于我现在应该做什么的提示吗?

最佳答案

您的 Pane 由法向量定义

n=(xn,yn,zn)

对于坐标变换,我们需要 2 个基向量和一个零点用于 Pane

基向量

我们选择了那些“自然地”适合 x/y Pane 的那些(请参阅后面的边缘案例):

b1=(1,0,zb1)
b2=(0,1,zb2)

我们想要

b1 x b2 = n*c(c 常量标量)

确保这两个是真正的基地

现在解决这个问题:

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 Pane 并且不存在自然基础向量,在这种情况下,您必须通过美学 POV 选择基础 b1 和 b2 向量并完成相同的求解过程或只选择 bv1 和 bv2。

零点

您在 OQ 中谈到您的 Pane 没有 anchor ,但有必要将您的 Pane 与无数平行 Pane 系列区分开来。

如果你的 anchor 是 (0,0,0) 这是坐标转换的完美 anchor ,你的 Pane 有

x*xn+y*yn+z*zn=0,
(y0,y0,z0)=(0,0,0)

如果没有,我假设你有一个 anchor (xa,ya,za) 并且你的 Pane 有

x*xn+y*yn+z*zn=d

d const 标量。一个自然的拟合是 Pane 的点,它由原始零点在 Pane 上的法线投影定义:

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)

找到了。

最终转换

是通过将 Pane 的每个点(即您要显示的那些点)表示为

来实现的
P0+x'*bv1+y'*bv2

x' 和 y' 是新坐标。因为我们知道 P0、bv1 和 bv2,所以这很简单。如果我们不在边缘情况下,我们在 bv1.y 和 bv2.x 中有零,进一步减少问题。

x' 和 y' 是您想要的新坐标。

关于algorithm - 从法向量给定的平面到 XY 平面的映射坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8780646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com