2011-05-02 74 views
0

哎,那是一個很大的問題。
Diagram
對,所以我有兩個點,在矩形的邊界上,還有兩條線,它們是從原點投射的。爲了簡單起見,P1/P2的排列是任意的。通過長方形上兩點之間的矩形的邊界循環?

我的問題是,我該如何循環矩形的綠色區域(基本上最小的區域)?

執行:我想在我創建的遊戲中創建視野效果。起源是玩家,他們可以在當前視口的任何位置(矩形)。線條的方向偏離了玩家面對的方向。我打算從原點追蹤綠地上的所有位置,檢查障礙物。

我寧願一個代碼示例的答案,任何語言,但最好是C#

+0

您的問題不能回答。 「循環」是什麼意思?什麼是循環矩形? – 2011-05-02 10:19:04

+0

循環顯示突出顯示的區域上的每個整數座標。 – 2011-05-02 10:47:16

回答

1

我認爲,你想要的是這樣的:

所有座標C以下標準都在綠線是矩形R的一部分:

(P1.y == P2.y) 
? 
(
    C.x >= P1.x && C.x <= P2.x 
) 
: 
(
    (C.x >= P2.x && C.x <= R.right && C.y == P2.y) || 
    (C.x >= P1.x && C.x <= R.right && C.y == P1.y) || 
    (C.x == R.x && C.y <= P1.y && C.y >= P2.y) 
) 

這假定P1如果它們不在同一條線上,它們將低於P2,如果它們在同一條線上,則P1將在P2之前。

+0

因此,假設我在所述矩形邊界上的所有點周圍環繞,並用此檢查每個點,它是否會爲綠色區域中的每個點返回true? – 2011-05-02 10:59:41

+0

圖片中沒有綠色區域。這隻會返回真正的綠色**線**上的點,如您的問題所示... – 2011-05-02 11:01:30

+0

對不起,我誤解了我的問題。但是,是的,這正是我想要的。 – 2011-05-02 11:08:33

0

我想像做你想做什麼(視野)會先畫一切屏最簡單的方法,然後在任何你不希望看到的東西處繪製黑色。

所以基本上把黑暗畫在沒有戰爭的霧幕上。

+0

我不想幫助繪圖。這樣我才能發現**需要隱藏的內容**。 – 2011-05-02 10:48:08

1

如果你想找出哪些對象在「綠色區域」 ......

假設你知道你可以計算出你感興趣的(起源多邊形頂點的矩形的大小, P1,P2和可見的矩形拐角),那麼你可以遍歷你的對象來找到哪些在多邊形檢測中使用點。例如

Randolph Franklyn's。內部點返回1,外部點返回0 ...

int pnpoly(int npol, float *xp, float *yp, float x, float y) 
{ 
    int i, j, c = 0; 
    for (i = 0, j = npol-1; i < npol; j = i++) { 
    if ((((yp[i] <= y) && (y < yp[j])) || 
     ((yp[j] <= y) && (y < yp[i]))) && 
     (x < (xp[j] - xp[i]) * (y - yp[i])/(yp[j] - yp[i]) + xp[i])) 
     c = !c; 
    } 
    return c; 
}