none
請問二維空間的偵測問題 RRS feed

  • 問題

  • 各位先進好

    我在二維空間設定了一個矩形
    這個矩形可以是水平、垂直或是斜的

    今天使用者在這個二維空間點選任意座標 (X,Y)

    請問我該如何判斷這個座標在矩形裡面還是外面?

    謝謝

    2010年12月29日 上午 02:54

解答

  • .Net 型別應該是用 Region 來處理,但只能處理單精度問題。

     

    通用演算法:

    http://tlcheng.twbbs.org/Paper/dtmhbp/dtmhbp.htm

    3.6.1 節

    5.2.4 節

     

    減少計算誤差提高精度參考:5.2.2 節。


    T.L. Cheng
    2011年1月1日 上午 06:12
    版主
  • 所以我說用 .AddPolygon 直接輸入你的點座標阿~
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 saintchou 2011年1月3日 上午 01:36
    2011年1月1日 下午 04:58

所有回覆

  • 如果沒有斜的狀況下

    根據左上與右下角的點就可以算出來了.

    假設左上(10,10) , 右下 (80,120)

    如果有個點是 30,40 , 因為30介於 10與80間, 且 40 介於10與120間. 那就在裡面

    如果點是 30,121, 因為30介於10與80間, 但121不在10與120間, 那就在外面

    如果是斜的狀況, 那應該就要用三角函數來算了

    不過, 矩形有斜的嗎 ?


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2010年12月29日 上午 03:35
    版主
  • 感謝您上面清楚的說明

    我的矩型有可能會這樣放
    http://www.matrix67.com/blogimage/200609261.GIF

    若這樣放,我就不清楚要從哪邊著手了

    2010年12月29日 上午 03:47
  • 您可以利用Rectangle的Contains方法來判斷
    2010年12月30日 上午 01:38
  • 謝謝您
    Contains 讓我節省了很多判斷的程式碼


    請問 Rectangle 怎麼樣旋轉?
    沒有看到 rotation 之類的屬性

    2010年12月30日 上午 02:58
  • 如果您用的是.NET 4.0, 可以利用Graphics類別的RotateTransform方法
    2010年12月31日 上午 01:29
  • .Net 型別應該是用 Region 來處理,但只能處理單精度問題。

     

    通用演算法:

    http://tlcheng.twbbs.org/Paper/dtmhbp/dtmhbp.htm

    3.6.1 節

    5.2.4 節

     

    減少計算誤差提高精度參考:5.2.2 節。


    T.L. Cheng
    2011年1月1日 上午 06:12
    版主
  • Region.IsVisible 方法 (PointF)

    測試指定的 PointF 結構是否包含在這個 Region 中。

     

    配合 Region 建構函式 (GraphicsPath)


    T.L. Cheng
    2011年1月1日 上午 06:24
    版主
  • 感謝指導 Region 的方法

    Dim originalRectangle As New Rectangle(0, 0, 100, 100)
    Dim smallRegion As New Region(originalRectangle)
    Dim matrix As Matrix = New Matrix()
    matrix.RotateAt(40, New PointF(100, 100))
    myRegion.Transform(matrix)

    請問我用的方法 Transform 旋轉後,我該如何取得旋轉後 四點的座標

    謝謝

    2011年1月1日 下午 12:38
  • 配合 Region 建構函式 (GraphicsPath)

    前面網友有說,配合 GraphicsPath ,我建議用:

    GraphicsPath.AddPolygon 方法 (PointF())

     

    .Net 裡面的旋轉基本上是將圖紙旋轉,所以在畫面上跟著轉了,但是座標不變,變動的是 Mapping 系統。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年1月1日 下午 03:24
  • 心冷熱情熄 先進您好

    我實做後也發現旋轉後 Region 或 Rectangle 的座標並沒有變
    請問有辦法取得 Mapping 系統 的資訊嗎?

    謝謝

    2011年1月1日 下午 04:37
  • 所以我說用 .AddPolygon 直接輸入你的點座標阿~
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 saintchou 2011年1月3日 上午 01:36
    2011年1月1日 下午 04:58