Dopo molte prove ed errori, il modo migliore per farlo sarebbe il seguente:
1) In primo luogo, si definisce il centro della forma data la X0_ { x, y} start e X1_ {x, y} punti finali della linea.
center_L1 = (X0 + X1)/2.
2) Quindi individuare la pendenza (angolo) della linea.
length = 10 # Line size
thickness = 2
angle = math.atan2(X0[1] - X1[1], X0[0] - X1[0])
3) Utilizzando i parametri di inclinazione e forma è possibile calcolare le seguenti coordinate delle estremità della scatola.
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) Usando le coordinate calcolate tracciamo un poligono con anti-aliasing (grazie a @martineau) e poi riempirlo come suggerito sul sito web gfxdraw
.
pygame.gfxdraw.aapolygon(window, (UL, UR, BR, BL), color_L1)
pygame.gfxdraw.filled_polygon(window, (UL, UR, BR, BL), color_L1)
fonte
2015-06-02 14:47:57
Definire le linee di offset corrette in base ai punti finali e alla larghezza della linea e utilizzarle per definire un poligono che rappresenta la linea adipe. Quindi usa 'pygame.gfxdraw.aapolygon()' per disegnarlo. – martineau
La mia linea sta ruotando ad ogni passo quindi non sono sicuro di definire le sue estremità come un poligono, + -1 non funzionerebbe in questo caso. –
Disegnare linee di grasso come ho suggerito è un caso di compensazione di un poligono degenerato. Di solito viene coinvolta una discreta quantità di matematica. Vedi [_Algoritmo per gonfiare/sgonfiare (compensare, buffering) i poligoni_] (http://stackoverflow.com/questions/1109536/an-algorithm-for-inflating-deflating-offsetting-buffering-polygons). – martineau