在XNA中填充封闭的形状

时间:2014-10-16 13:27:30

标签: c# .net math curve

我需要渲染一个2D图像,其中轴是代表X轴的纬度(φ)和Y轴的经度(λ)。假设视点始终位于原点(0,0,0),则笛卡尔坐标中的3D线段是该图像中的2D曲线段。这里沿曲线的每个点表示φ和λ角。具有从P1到P2的3D线段,并且知道相应的2D曲线段的等式,λ= f(φ),该曲线可以从φ1到φ2绘制。三条线形成一个三角形。因此,三角形绘制为三个曲线段,形成闭合形状。

问题在于,这种形状的绘制方式与线框模式相同,并且未填充封闭区域。我想不出任何方式以某种方式填补该区域。是否有可能实现这一目标?我感谢任何帮助,并喜欢与其他人讨论。感谢

*编辑:

此立方体已在Autocad中绘制: enter image description here

从P1(x1,y1,z1)到P2(x2,y2,z2)的3D线的等式是:

(x-x1)/(x2-x1) = (y-y1)/(y2-y1) = (z-z1)/(z2-z1)

此图像(以纬度(φ)和经度(λ)为轴)显示从原点查看的相同立方体: enter image description here

以这种方式获得沿着从φ1到φ2(从P1和P2计算)弯曲的2D给出λ的等式:

λ= f(φ) = Atan((u/tan(φ)+z1)/ Sqrt((u/tan(φ)^2 + ((u/tan(φ))*w + y1)^2 ))

u和w是常数,计算为P1和P2坐标。

以下是上述等式的代码:

for (double tetha = φ1; tetha <= φ2; tetha += step){
double a = p1.X - p0.X;
double b = p1.Y - p0.Y;
double c = p1.Z - p0.Z;

double x = (a * p0.Y - b * p0.X) / (a * Math.Tan(tetha) - b);
double z = (((x - p0.X) * c) / a) + p0.Z;
double y = (((x - p0.X) * b) / a) + p0.Y;

if (a == 0)
{
y = (Math.Tan(tetha) * (b * p0.X - a * p0.Y)) / (b - a * Math.Tan(tetha));
z = (((y - p0.Y) * c) / b) + p0.Z;
x = (((y - p0.Y) * a) / b) + p0.X;
}

double landa = Math.Atan2(z, Math.Sqrt(x * x + y * y));
}

0 个答案:

没有答案