擅长:python、mysql、java
<p>经过多次尝试和错误之后,最好的方法是:</p>
<p>1)首先,我们定义形状的中心,给定直线的X0{x,y}起点和X1{x,y}终点。在</p>
<pre><code>center_L1 = (X0 + X1) / 2.
</code></pre>
<p>2)然后求出直线的斜率(角度)。在</p>
^{pr2}$
<p>3)使用“坡度”和“形状”参数,可以计算以下框端的坐标。在</p>
<pre><code>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))
</code></pre>
<p>4)使用计算的坐标,我们绘制一个反走样多边形(感谢@martineau),然后按照<code>gfxdraw</code>网站上的建议填充它。在</p>
<pre><code>pygame.gfxdraw.aapolygon(window, (UL, UR, BR, BL), color_L1)
pygame.gfxdraw.filled_polygon(window, (UL, UR, BR, BL), color_L1)
</code></pre>