2010-11-23 30 views
0

J'ai un point de départ et un point final. Je veux travailler sur l'angle que j'ai cette formule qui semble fonctionnerAngle des triangles Trig

double dx = end.X - start.X; 
double dy = end.Y - start.Y; 

double degrees = Math.Acos((-Math.Pow(dy, 2) + Math.Pow(dx, 2) + Math.Pow(dx, 2))/(2 * Math.Pow(dx, 2))); 
degrees = degrees * 180/Math.PI; 

Alors je veux prendre l'angle et de prolonger la longueur de la ligne. J'ai ceci jusqu'à présent

end.Y = (start.Y + (len * Math.Sin(angle))); 
end.X = (start.X + (len * Math.Cos(angle))); 

maintenant cela ne me donne pas la bonne valeur.

blanc est la ligne originale et rouge est l'étend

white is original line and red is the extending

ce que je fais WRO

+0

Peut-yopu poster code complet? – TalentTuner

+0

en allongeant la longueur de ligne que vous voulez dire en allongeant la longueur? – thumbmunkeys

+1

Pourquoi avez-vous besoin de l'angle? Ne pouvez-vous pas simplement calculer les nouveaux points d'extrémité en utilisant les valeurs dx et dy et en les normalisant, puis en multipliant par len? – mrjames

Répondre

1

C'est ce que je voulais dire dans le code:

double dx = end.X - start.X; 
double dy = end.Y - start.Y; 

double dlen = Math.Sqrt(dx * dx + dy * dy); 

dx = dx/dlen; 
dy = dy/dlen; 

end.X = start.X + (dx * len); 
end.Y = start.Y + (dy * len); 
+0

un problème je suis gettig -degrees. – Pintac

+0

@Pintac - vous n'obtenez pas ce problème avec la solution @mrjames. – ysap

0

Si vous voulez juste continuer votre ligne, d'abord, vous devrez trouver la fonction qui définit votre ligne.

Ceci est une ligne "simple" ... sa fonction est f (x) = ax + b. Trouvez un et b.

Pour trouver un:

a = (start.y - end.y)/(start.x - end.x) 
// easy, isn't it ? 

Pour b:

b = (start.y) - (a * start.x) 
// you can check switching "start" by "end" 

Aucun accord avec des angles, Cosinus ou sinus ...

Bye

+0

ok après que vous avez la valeur a et b que faites-vous avec – Pintac

+0

Je me rends compte que c'est un fil un peu vieux, mais cette réponse est fausse b/c au cas où votre segment de ligne est vertical, vous finissez par avoir un div par 0! L'approche de l'OP, en utilisant les fonctions trigonométriques, est en fait plus avantageuse dans ce cas. – ysap

0

si vous n » t avoir l'hypoténuse (dont vous n'avez pas besoin), vous devez utiliser une fonction trigonométrique tangente Like

double rads = Math.Atan(dy/dx); 

Votre degré calc est assez compliqué, bien que ma voie consiste à suivre les quadrants. Voir: http://www.mathwizz.com/algebra/help/help29.htm

+0

un problème je suis gettig - degrés – Pintac

+0

vous dites degrés, mais quelles unités est "angle" dans votre échantillon? il devrait être en radians. Est-ce que c'est peut-être tout ce qui ne va pas? Personnellement, la réponse de Guillaume est la meilleure façon de résoudre votre problème. – timh

+0

Vous devriez utiliser la fonction ATAN2() à la place, pour éviter le problème div by 0. – ysap