繁体   English   中英

使用 c# 创建 3D 矩形

[英]create 3D rectangle using c#

在 c# 和交叉点 function 中阅读了有关矩形结构的信息

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

并让它与另一个相交?

任何想法

只需创建自己的。 这里有一些想法:

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

编辑:

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

所以,从头开始。 仔细想想,二维中的宽度和高度实际上是向量二,只是它们的方向是隐含的:宽度是向量在x方向的长度,高度是向量在y方向的长度。

所以,model 你的矩形是这样的:

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

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

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

您链接到的矩形 class 为二维矩形建模(我不知道 3D 矩形是什么,顺便说一句)。

几乎整个System.Drawing命名空间都处理 2D,因此您不能以这种方式自定义它。

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

(强调我的)

(关于交集函数)

您不能创建这样的 function。

2D 中 2 个矩形的相交 function 很有趣,因为它返回了第三个矩形(可以是空的)。

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

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

所以你不能只创建一个矩形 object,然后创建一个交集 function,它返回一个矩形 object。

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

评论:

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

那么 2 个 3D 矩形的交集将只是一个由 12 个约束标识的 3D object。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM