Ok, je suis un peu rouillé sur ma trigonométrie.
Essentiellement, j'essaie de faire une sorte de projecteur dans la toile. J'essaie de maintenir un angle de 9 degrés, ce qui explique pourquoi c'est un peu délicat. Voici ma violon jusqu'à présent.
Http://jsfiddle.net/uq8fe/
it's a bit long please refer to the fiddle /\
Assez proche, mais j'ai besoin des points tangents sur le cercle afin que je puisse dessiner un triangle entre ces deux points et la souris, alors je ressemble à un beau faisceau lisse.
Http://en.wikipedia.org/wiki/File:Inscribed_angle_theorem4.svg
Ci-dessus est essentiellement le schéma et la formule que je dois mettre en œuvre. J'ai besoin du point T et S. J'espère que cela a du sens.
C'est le code pour calculer les tangentes: Démo
//Calculate Tangents var pointDistance = { x: beamCenter.x - mousePos.x, y: beamCenter.y - mousePos.y, length: function () { return Math.sqrt(this.x * this.x + this.y * this.y) } } var radius = getDist(p1.x, p1.y, p2.x, p2.y) / 2; //Alpha var a = Math.asin(radius / pointDistance.length()); //Beta var b = Math.atan2(pointDistance.y, pointDistance.x); //Tangent angle var t = b - a; //Tangent points var T1 = { x: beamCenter.x + radius * Math.sin(t), y: beamCenter.y + radius * -Math.cos(t) }; t = b + a; var T2 = { x: beamCenter.x + radius * -Math.sin(t), y: beamCenter.y + radius * Math.cos(t) }