2015-01-21 61 views
0

當前爲一個項目我有一個包含36(x,y)座標的列表變量。目的是繪製一個內部填充的多邊形。所有的點都是隨機的,但限於圍繞屏幕邊界的大方塊,因此總是存在點的邊界。當我使用pygame.draw.polygon命令。看起來無論生成多少個不同的隨機點,出來的多邊​​形總是與大量的中心孔和三角形混淆在一起,就像形成的形狀,而不是一個填充的形狀。如何在Pygame中填充由隨機點組成的多邊形?

是否有某種使用draw.polygon命令的規則,我不明白?

我使用的積分數量是否會對形狀產生負面影響?

爲什麼我是做一個封閉的形狀,但它並沒有填滿所有的方式?

他們的另一種方法是製作一個填充多邊形嗎?

感謝您的幫助和時間。

(圖片旋轉一下鼠標方向) picture of points enlarged(rotated look at mouse position)

enter image description here 這幅畫是正面朝上

我的主要問題是,爲什麼多邊形心不是完全填充,爲什麼底部都不附加一路。
請參見下面的代碼:

def build(self): 
    for i in range(1,5): 
     for b in range(1,7): 
      if i == 1: 
       x = R.randrange(b*100,b*1000) 
       y = R.randrange(0,1000) 
       points.append([x,y]) 
      elif i == 2: 
       x = R.randrange(9000,10000) 
       y = R.randrange(b*1000-1000,b*1000) 
       points.append([x,y]) 
      elif i == 3: 
       x = R.randrange(b*1000,b*1000+1000) 
       y = R.randrange(9000,10000) 
       points.append([x,y]) 
      elif i == 4 and b!=9: 
       x = R.randrange(0,1000) 
       y = R.randrange(b*1000-1000,b*1000) 
       points.append([x,y]) 

這是我的FUNC鍵,使點

screen.fill(blue) 

    pygame.draw.polygon(screen,green,(points)) 

平局聲明

+0

你的問題不清楚。你應該顯示一些你嘗試過的座標。多邊形是一個複雜的對象。包含的座標太多。所以,如果有任何缺口或漏洞,它可能是你編寫的奇怪座標。 – GLHF 2015-01-21 06:41:39

+1

座標的順序很重要。如果你的所有座標都是完全隨機的,那麼多邊形就搞不定了。只是爲了好玩,看看一堆隨機的座標,這會導致一個混亂的多邊形,並嘗試在一張紙上繪製它。 – sloth 2015-01-21 08:01:56

+0

如果我計劃幾個小時,但是我的時間很短,我會添加一個插圖 – Ryan 2015-01-21 11:47:46

回答

2

我認爲有兩個問題。

第一個問題是造成圖像頂部的混亂。有在這條線在i == 1的情況下的錯誤:

x = R.randrange(b*100,b*1000) 

這通過每次循環選擇一個x值,但選擇是從重疊的範圍,而不是那些嚴格遞增。我懷疑你想用邏輯更像i == 3情況:

x = R.randrange(b*1000,b*1000+1000) 

第二個問題更是一個邏輯問題。你是i == 1i == 2個案分別描述了形狀的頂部和右側邊緣,分別增加了xy值。您的i == 3i == 4個案描述了底部和左側,但它們也用增加值xy的值進行描述。這打破了多邊形拐角之間的連接,並且負責反轉的顏色和長對角線(在底邊的末端和左邊的起始之間)。

這是我的建議解決方案,它將您的代碼進行了一些推廣。我沒有循環使用無意義的i數字並使用if語句來處理不同的邊緣,而是通過四元組的值(開始的x和y值以及每個連續點的偏移量)來描述每條邊,並在列表上循環的元組。循環體很簡單,作爲一個額外的隨機偏移被添加到每個座標,因爲它是計算:

for x, dx, y, dy in [(0,1000, 0, 0), (9000, 0, 0, 1000), 
        (9000, -1000, 9000, 0), (0, 0, 9000, -1000)]: 
    for b in range(9): 
     points.append([x + b*dx + R.randrange(1000), y + b*dy + R.randrange(1000)]) 

我目前還沒有工作pygame的安裝,所以我一直無法覈實,這將會像多邊形一樣正確繪製,但它至少可以讓你走上正確的軌道。

+0

非常感謝你的工作。我真正地熟悉你的時間和你在這裏做的事情 – Ryan 2015-01-23 01:33:09