簡體   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