Wydaje się to dziwne, ale mimo to HTML5 obsługuje rysowanie linii, okręgów, prostokątów i wielu innych podstawowych kształtów, nie ma nic odpowiedniego do rysowania podstawowego punktu. Jedynym sposobem na to jest symulacja punktu z tym, co masz.
Zasadniczo istnieją 3 możliwe rozwiązania:
- narysuj punkt jako linię
- narysuj punkt jako wielokąt
- narysuj punkt jako okrąg
Każda z nich ma swoje wady
Linia
function point(x, y, canvas){
canvas.beginPath();
canvas.moveTo(x, y);
canvas.lineTo(x+1, y+1);
canvas.stroke();
}
Pamiętaj, że zbliżamy się do kierunku południowo-wschodniego, a jeśli jest to krawędź, może być problem. Ale możesz także rysować w dowolnym innym kierunku.
Prostokąt
function point(x, y, canvas){
canvas.strokeRect(x,y,1,1);
}
lub w szybszy sposób przy użyciu fillRect, ponieważ silnik renderujący wypełnia tylko jeden piksel.
function point(x, y, canvas){
canvas.fillRect(x,y,1,1);
}
okrąg
Jednym z problemów z kręgami jest to, że silnik jest trudniejszy do ich renderowania
function point(x, y, canvas){
canvas.beginPath();
canvas.arc(x, y, 1, 0, 2 * Math.PI, true);
canvas.stroke();
}
ten sam pomysł jak w przypadku prostokąta, który można osiągnąć dzięki wypełnieniu.
function point(x, y, canvas){
canvas.beginPath();
canvas.arc(x, y, 1, 0, 2 * Math.PI, true);
canvas.fill();
}
Problemy ze wszystkimi tymi rozwiązaniami:
- trudno jest śledzić wszystkie punkty, które zamierzasz wylosować.
- podczas powiększania wygląda brzydko.
Jeśli zastanawiasz się: „Jak najlepiej narysować punkt? ”, Wybrałbym wypełniony prostokąt. Możesz zobaczyć mój jsperf tutaj z testami porównawczymi .