2017-04-20 1 views
0

Ich untersuchte einige Zeichnungen auf der HTML-Zeichenfläche und landete schnell darauf, meine Formen in Dreiecke zu zerlegen, da dies der gebräuchlichste und sicherste Weg zu sein scheint Ich behandle nur einfache Polygone und nicht selbst-überschneidende (die sich auf eine etwas unkontrollierbare Weise zu mir ziehen).Haarlinie/leerer Raum beim Zeichnen eines triangulierten Rechtecks ​​auf Leinwand

Aber wenn ich ein einfaches Rechteck als Dreiecke ziehen wollte, bekam ich folgendes Ergebnis: enter image description here

Der Ansatz, den ich gemacht habe ist folgendes:

const rect = [{ 
    x: 200, 
    y: 225 
}, { 
    x: 490, 
    y: 225 
}, { 
    x: 490, 
    y: 375 
}, { 
    x: 200, 
    y: 375 
}]; 

const triangle1 = [rect[0], rect[1], rect[2]]; 
const triangle2 = [rect[0], rect[2], rect[3]]; 

fillPolygon(ctx, triangle1, 'blue'); 
fillPolygon(ctx, triangle2, 'blue'); 

die vollständige Beispiel finden Sie hier : https://jsfiddle.net/JLVva/85/

Da Dreiecke scheinen die Grundlage der Grafikzeichnung zu sein, ich denke, ich vermisse eine gemeinsame Workaround in diesen Szenarien angewendet. Wie wird das normalerweise gehandhabt?

+0

Diese Antwort kann eine Hilfe sein http://stackoverflow.com/a/33788934/3877726 – Blindman67

Antwort

0

Wenn Sie der Form auch einen Strich und eine Füllung hinzufügen, wird diese Lücke entfernt. Ich nehme an, der Strich ist standardmäßig transparent oder so.

Fügen Sie dies an das Ende Ihrer fillPolygon Funktion.

ctx.strokeStyle = color; 
ctx.stroke(); 
+0

Da ich nie Schlaganfall, ich glaube nicht, alles weiß/transparent gezeichnet wird. – Timm

+0

Aber ich denke, Ihre Idee könnte das Problem lösen, weil es die Dreiecke nur ein kleines bisschen größer macht (unter Annahme einer Strichbreite von 1). Ich habe andere gefunden, die vorschlagen, die Größe der Form "ein wenig" zu vergrößern, so dass sie sich überlappen, aber ich glaube nicht, dass dies die endgültige Lösung sein kann, da sie sehr ungenau ist und zu inkonsistenten Ergebnissen führen kann andere Farbe: Wenn Sie alle Pixel für Farbe zählen, sollten Sie die gleiche Menge erhalten, nicht mehr als die letzte, die gezeichnet wurde. – Timm

+0

Ich bin mir nicht sicher, aber ich würde sagen, es gibt entweder einen Schlaganfall automatisch angewendet oder eine Lücke für den Schlaganfall und das ist, warum Sie diese Haarlinie bekommen. – Razzildinho

Verwandte Themen