使用c#创建3D矩形

时间:2011-08-10 07:19:30

标签: c# .net algorithm graphics 3d

我读到了rectangle structure in c#及其中的交叉函数

我的问题是:如何定制它以便我可以拥有3D矩形,具有x,y,z坐标

并将其与另一个相交?

任何想法

3 个答案:

答案 0 :(得分:3)

创建自己的。以下是一些想法:

  • 3D矩形不仅具有宽度和高度,还具有平面
  • 平面可以用法向量和点(原点)来描述
  • 原点类似于2D矩形中的(x,y),即“左上角”点,但任何都可以
  • 与另一个矩形相交可能就像两个平原交叉一样容易,然后检查交叉线是否“切割”任何一个矩形
  • 有大量与数学相关的网站,以检查有关如何执行此操作的公式
  • 机会非常好,在您的应用程序中,您不需要以优化的方式执行此操作。真。只需编写代码并试一试即可。您可以稍后进行优化。

修改

等待。第二个想法:原点,高度,宽度和法线向量不会真正削减它,因为你没有像2D那样有“向上”的感觉。

所以,抓一点。考虑它会发现2D中的宽度和高度实际上是向量二,除了它们的方向是暗示的:宽度是x方向上矢量的长度,高度是y方向上矢量的长度。

所以,像这样建模你的矩形:

  • 一个点(Origin
  • 向量Width(在数学中通常称为u
  • 向量Height(在数学中通常称为v
  • 不再需要法向量,因为它可以通过Width x Height的矢量积来计算

然后可以将矩形的其他三个点计算为:

  • Origin + Width
  • Origin + Width + Height
  • Origin + Height

答案 1 :(得分:2)

您链接的矩形类为2D矩形建模(我不知道3D矩形是什么,BTW)。

几乎整个System.Drawing命名空间处理2D,因此您无法以这种方式对其进行自定义。

  

System.Drawing父命名空间包含支持基本GDI +图形功能的类型。子命名空间支持高级二维和矢量图形功能,高级成像功能以及与打印相关的印刷服务。

(强调我的)

答案 2 :(得分:2)

(关于交叉口功能)

您无法创建此类功能。

2D中2个矩形的交叉功能很有意思,因为它会返回第三个矩形(可以为空)。

空间中2“3D矩形”的交点并不总是3D矩形!

(例如,取两个相同的矩形并旋转一个,然后取交点...)

因此,您不仅可以创建一个矩形对象,还可以创建一个返回矩形对象的交集函数。

您需要更完整的3D对象管理库。

<强>备注:

3D矩形由6个平面分隔。 所以你可以通过x,y,z上的6个约束来识别它

然后,2个3D矩形的交集将只是由12个约束标识的3D对象。

如果这12个约束可以简化为6个约束,它可以是一个矩形(但并非总是如此) 如果它不能那么它不是一个矩形。