2010-09-08 3 views
3

J'ai une toile carrée avec une largeur de 100 et une hauteur de 100. Dans ce carré, je dessine un arc comme ceci:Comment puis-je obtenir les coordonnées x/y des premier et dernier points de l'arc dessiné par rapport au coin supérieur gauche de la toile?

var canvas = document.getElementById('myCanvas'); 
var ctx = canvas.getContext('2d'); 
ctx.clearRect(0,0,100,100) // clears "myCanvas" which is 100pixels by 100 pixels 
ctx.beginPath(); 
ctx.arc(50, 50, 30, 0, Math.PI*2/6 , false) 
ctx.stroke(); 

La question est: Comment puis-je obtenir les coordonnées des x/y de le premier et le dernier point de la ligne dessinée par rapport au coin supérieur gauche de la toile?

Répondre

4

Le point de départ est trivialement (x + radius, y). Le point final est, par simple trigonométrie, (x + radius*cos(angle), y + radius*sin(angle)). Notez que le point de départ dans ce cas est un cas particulier du point de terminaison plus général, avec angle égal à zéro. Ces valeurs doivent également être arrondies à l'entier le plus proche, pour des raisons évidentes.

(Notez que cela ne vaut que lorsque l'argument anticlockwise est faux, et en supposant que toutes les coordonnées sont mesurées à partir du haut à gauche. Si anticlockwise est vrai, inverser le signe du second composant de la coordonnée y. Si les coordonnées sont mesurées à partir Dans un autre coin, appliquez des arithmétiques simples pour corriger cela, notez aussi que ceci est complètement à l'envers pour tout vrai mathématicien.)

+0

Je suis sûr que vous êtes sur place, juste pour m'assurer que je fais ce qu'il faut, parce que l'anglais est ma deuxième langue, pourriez-vous s'il vous plaît élaborer la partie où vous dites "inverser le signe de la deuxième composante de la coordonnée y"? – Quickredfox

+0

Eh bien, si 'anticlockwise' est vrai, nous devrions remplacer la coordonnée y par' y - radius * sin (angle) ', car il serait effectivement reflété dans l'axe des x. Ainsi, inversez le signe. (J'avoue, c'était une formulation inutilement compliquée) – You

+0

Merci d'avance. Résolu tous mes malheurs. – Quickredfox

Questions connexes