C# 在XNA中填充闭合形状

C# 在XNA中填充闭合形状,c#,.net,math,curve,C#,.net,Math,Curve,我需要渲染一个2D图像,其中轴是代表X轴的纬度(φ)和代表Y轴的经度(λ)。假设视点始终位于原点(0,0,0),则笛卡尔坐标系中的三维直线段就是该图像中的二维曲线段。这里,曲线上的每个点表示φ和λ角。具有从P1到P2的3D线段,并且知道相应2D曲线段的方程式λ=f(φ),可以从φ1到φ2绘制曲线。三条线组成一个三角形。因此,三角形被绘制为三段曲线,形成闭合形状 问题在于,此形状的绘制方式与线框模式类似,并且封闭区域未填充。我想不出任何办法来填充这个区域。有可能做到这一点吗?我感谢任何帮助,并愿意

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

问题在于,此形状的绘制方式与线框模式类似,并且封闭区域未填充。我想不出任何办法来填充这个区域。有可能做到这一点吗?我感谢任何帮助,并愿意与其他人讨论。谢谢

*编辑:

此立方体已在Autocad中绘制:

从P1(x1,y1,z1)到P2(x2,y2,z2)的三维线的方程为:

这张图像(以纬度(φ)和经度(λ)为轴)显示了从原点看的同一个立方体:

沿φ1到φ2的二维曲线给出λ的方程(根据P1和P2计算)通过以下方式获得:

λ= 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));
}

for(double-tetha=φ1;tetha实际的XNA几何体代码在哪里?抱歉。我编辑了标记。不涉及XNA。如果使用XNA渲染,则需要提供用于渲染基本体的代码。即GraphicsDevice.DrawPrimitives
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));
}