我用pygame繪製線(給出一些起點和終點),如下所示:pygame.draw.line(window, color_L1, X0, X1, 2)
,其中2是定義線的粗細。Pygame繪製反鋸齒粗線
由於抗鋸齒不支持.draw
,所以我搬到.gfxdraw
和pygame.gfxdraw.line(window, X0[0], X0[1], X1[0], X1[1], color_L1)
。
但是,這不允許我定義線條的粗細。我怎麼能一起厚度和抗鋸齒?
我用pygame繪製線(給出一些起點和終點),如下所示:pygame.draw.line(window, color_L1, X0, X1, 2)
,其中2是定義線的粗細。Pygame繪製反鋸齒粗線
由於抗鋸齒不支持.draw
,所以我搬到.gfxdraw
和pygame.gfxdraw.line(window, X0[0], X0[1], X1[0], X1[1], color_L1)
。
但是,這不允許我定義線條的粗細。我怎麼能一起厚度和抗鋸齒?
許多試驗和錯誤之後,最佳的方式做這將是如下:
1)首先,我們定義給出的X0_ {形狀的中心x,y} start和X1_ {x,y}結束點。
center_L1 = (X0 + X1)/2.
2)然後找到線的斜率(角度)。
length = 10 # Line size
thickness = 2
angle = math.atan2(X0[1] - X1[1], X0[0] - X1[0])
3)使用斜率和形狀參數可以計算出盒端部的下面的座標。
UL = (center_L1[0] + (length/2.) * cos(angle) - (thickness/2.) * sin(angle),
center_L1[1] + (thickness/2.) * cos(angle) + (length/2.) * sin(angle))
UR = (center_L1[0] - (length/2.) * cos(angle) - (thickness/2.) * sin(angle),
center_L1[1] + (thickness/2.) * cos(angle) - (length/2.) * sin(angle))
BL = (center_L1[0] + (length/2.) * cos(angle) + (thickness/2.) * sin(angle),
center_L1[1] - (thickness/2.) * cos(angle) + (length/2.) * sin(angle))
BR = (center_L1[0] - (length/2.) * cos(angle) + (thickness/2.) * sin(angle),
center_L1[1] - (thickness/2.) * cos(angle) - (length/2.) * sin(angle))
4)用計算出的座標我們繪製抗鋸齒的多邊形(感謝@martineau),然後填充它的gfxdraw
網站上的建議。
pygame.gfxdraw.aapolygon(window, (UL, UR, BR, BL), color_L1)
pygame.gfxdraw.filled_polygon(window, (UL, UR, BR, BL), color_L1)
我會建議填充的矩形,如下所示:https://www.pygame.org/docs/ref/gfxdraw.html#pygame.gfxdraw.rectangle。
您的代碼看起來是這樣的:
thickLine = pygame.gfxdraw.rectangle(surface, rect, color)
,然後記得要補的表面。這是沿着線:
thickLine.fill()
非常感謝!我試過以及'box',但是我找不到我如何定義開始和結束,因爲我只有線的開始和結束的座標。 –
問題在於我的線條正在旋轉,所以一個簡單的+ -1是不夠的,因爲你最終可能會得到一個不跟隨另一端旋轉的恆定邊。 –
根據線條的端點和寬度定義適當的偏移線,並使用它們來定義代表胖線的多邊形。然後使用'pygame.gfxdraw.aapolygon()'來繪製它。 – martineau
我的線在每一步都在旋轉,所以我不確定將其末端定義爲多邊形,在這種情況下+ -1不起作用。 –
以我建議的方式繪製胖線是抵消退化多邊形的一種情況。通常涉及相當數量的數學。請參閱[_An算法爲膨脹/縮小(偏移,緩衝)polygons_](http://stackoverflow.com/questions/1109536/an-algorithm-for-inflating-deflating-offsetting-buffering-polygons)。 – martineau