@@ -62,11 +62,21 @@ func (triangle Triangle) boundingTriangle(canvas *Canvas, color color.NRGBA, per
6262 return 0 , 0 , 0 , 0 , fmt .Errorf ("Triangle area is less than 1 pixel" ) // discarding triangles that cover less than a pixel
6363 }
6464
65- // TODO: add canvas bounds check (via min/max with canvas bounds?)
66- bbminx = int (math .Min (math .Min (triangle .a .x , triangle .b .x ), triangle .c .x ))
67- bbminy = int (math .Min (math .Min (triangle .a .y , triangle .b .y ), triangle .c .y ))
68- bbmaxx = int (math .Max (math .Max (triangle .a .x , triangle .b .x ), triangle .c .x ))
69- bbmaxy = int (math .Max (math .Max (triangle .a .y , triangle .b .y ), triangle .c .y ))
65+ // outer min / max resembles a canvas bounds check (0 to width/height)
66+ borders := canvas .canvas .Rect
67+ minx := math .Min (math .Min (triangle .a .x , triangle .b .x ), triangle .c .x )
68+ miny := math .Min (math .Min (triangle .a .y , triangle .b .y ), triangle .c .y )
69+ maxx := math .Max (math .Max (triangle .a .x , triangle .b .x ), triangle .c .x )
70+ maxy := math .Max (math .Max (triangle .a .y , triangle .b .y ), triangle .c .y )
71+
72+ bbminx = max (int (math .Floor (minx )), borders .Min .X )
73+ bbminy = max (int (math .Floor (miny )), borders .Min .Y )
74+ bbmaxx = min (int (math .Ceil (maxx )), borders .Max .X - 1 )
75+ bbmaxy = min (int (math .Ceil (maxy )), borders .Max .Y - 1 )
76+
77+ if bbminx > bbmaxx || bbminy > bbmaxy {
78+ return
79+ }
7080
7181 inv_total_area := 1 / total_area
7282
0 commit comments