2013-06-30 4 views
3

Pour un algorithme de collision que je développe, j'ai besoin de savoir comment réfléchir une ligne sur une autre.Comment faire pour refléter une ligne sur une autre ligne

Ligne 1:

y=ax+b 

Ligne 2:

y=cx+d 

Ligne 3:

(a result of reflecting line 1 over line 2) y=ex+f 

Y at-il algébrique façon de déterminer e et f en termes de a, b, c, et d?

+0

gardez à l'esprit que vous pourriez courir dans y = infini (perpendiculaire à y = 0) si vous suivez cette méthode, alors basculez entre x = ay + b et y = ax + b quand vous avez besoin à, afin d'éviter le problème :) – CME64

+0

Cela m'a dérangé, désolé. Ce qui précède est trompeur. Vous NE pouvez PAS simplement échanger les valeurs a et b. x = (y-b)/a. En outre, 99% de vos problèmes avec les pentes verticales peuvent être résolus en sauvegardant la pente comme une structure qui contient un numérateur et un dénominateur. Ainsi, vous pouvez savoir que si le dénominateur est 0, la ligne est verticale. – BrainSteel

Répondre

12

J'ai déjà exécuté ce même problème auparavant. Reste avec moi ici ...

Ce problème comporte deux parties:

1. Trouver le point où ils se croisent

pour trouver où deux lignes se croisent, nous utilisons les deux équations des lignes:

y = M1x + B1 
y = M2x + B2 

substitution par:

M1x + B1 = M2x + B2 
M1x - M2x = B2 - B1 
x(M1 - M2) = B2 - B1 
x = (B2 - B1)/(M1 - M2) 

Pour trouver le val y ue, il suffit de le brancher:

y = M1x + B1 

2. Trouvez la pente de la ligne à partir des deux autres pentes.

La seconde est beaucoup plus délicate. En utilisant la trigonométrie, ce n'est pas impossible.

Soit L1 la "ligne de base". (Avec une pente de M1)

Soit L2 la ligne qui doit être réfléchie sur la "ligne de base". (Avec une pente de M2)

Soit L3 notre ligne résultante. (Avec une pente de M3)

L'équation I utilisée est la suivante:

double M3 = ((2 * M1) + (M2 * pow(M1, 2)) - M2)/(2 * M1 * M2 - pow(M1, 2) + 1); 

droite de mon code C. Il est important de noter que les deux pentes doivent être définies. Vous pouvez utiliser la règle de L'Hopital pour obtenir une équation quand l'une des pentes approche l'infini.

EN MARCHE AVEC L'EXPLICATION!

Line Diagram

Voici un dessin brut de trois lignes. L2 est réfléchie sur L1, ce qui donne L3. Le dessin n'est pas exact. L'angle entre L1 et L2, ainsi que L2 et L3, est marqué comme R.\ Voici les faits:

M1 = tan(A1) 
M2 = tan(A2) 
M3 = tan(A3) 

Cela vient de la définition de la tangente. Ceci est un peu plus délicat à voir, mais si vous dessinez une ligne horizontale au point d'intersection, il devient évident.

Ainsi, notre objectif est de trouver tan (A3). Pour ce faire, nous devons trouver R. Comme nous pouvons le voir, R peut être trouvé dans un triangle avec A2 et le supplément de A1 comme les autres angles. Ainsi, nous savons:

R + (180 - A1) + A2 = 180 
R - A1 + A2 = 0 
R = A1 - A2 

Prenons la tangente des deux côtés:

tan(R) = tan(A1 - A2) 

trigonométrie, nous savons:

tan(R) = (tan(A1) - tan(A2))/(1 + tan(A1)tan(A2)) 
R = arctan((tan(A1) - tan(A2)/(1 + tan(A1)tan(A2)) 

arctan étant tangente inverse. D'après notre formule précédente, A3 = R + A1, nous obtenons:

A3 = arctan((tan(A1) - tan(A2)/(1 + tan(A1)tan(A2)) + A1 
A3 = arctan((M1 - M2)/(1 + M1*M2)) + A1 

Mais nous ne voulons pas A3. Nous voulons bronzer (A3). Donc, encore une fois, nous prenons la tangente des deux côtés.

tan(A3) = M3 = tan(arctan((M1 - M2)/(1 + M1*M2)) + A1) 
M3 = tan(arctan((M1 - M2)/(1 + M1*M2))) + tan(A1)/(1 - tan(arctan((M1 - M2)/(1 + M1*M2))) * tan(A1)) 

Malheureusement, c'est horriblement hideux. Remplacement des tangentes avec des pentes et simplification, nous obtenons

M3 = ((M1 - M2)/(1 + M1*M2)) + M1/(1 - ((M1 - M2)/(1 + M1*M2)) * M1) 
M3 = (M1 - M2 + M1*(1 + M1*M2))/(1 + M1*M2 - M1*M1 + M1*M2) 
M3 = (M1^2 * M2 + 2*M1 - M2)/(1 + 2*M1*M2 - M1^2) 

Ce qui est exactement le même que la formule ci-dessus. Désolé pour tous les calculs laids. Lorsque M2 est complètement vertical, vous pouvez utiliser la règle de L'Hopital pour obtenir

M3 = (M1^2 - 1)/2*M1 

Si quelqu'un est si incliné, vérifiez mes maths. Mais je suis fatigué maintenant.

0
  1. En supposant que les deux lignes ne sont pas parallèles les uns aux autres

Etape 1:

d'abord trouver l'intersection de la droite y = ax + b avec la ligne y = cx + d, que est en résolvant sort pour être

m = (d - b)/(c - a)

Etape 2:

La ligne finale a un point de la forme (x, ex + f), donc nous savons que la ligne joignant le point et l'image correspondante est perpendiculaire à la ligne miroir ET le point milieu du premier point et son image sur la ligne de miroir. Résolution pour la première exigence ....

(pente du point de jonction de la ligne et son image) * (pente de la ligne miroir) = -1

nous obtenons ...

c * (e * pt + f - a * n - b)/(pt - n) = -1 -----> La première équation.

Ensuite, le point médian de la pointe et son mensonge d'image sur la ligne centrale, à savoir

coordonnée Y du point médian - (c * x de coordonnées du point médian + d) = 0

coordonnée y du point central = (a * n + e * pt)/2 et coordonnée x = (pt + n)/2

mettre au-dessus de nous obtenons ...

(a * n + e * pt) c - c (pt + n) - 2d = 0 ----> deuxième équation

3.

maintenant le point et son image font des angles égaux du point d'intersection .... un moyen simple de dire que l'angle entre la ligne de miroir, ligne de point et ligne d'image, ligne de point étant égal .. . ... donc la tangente de l'angle entre les lignes et mI mM est égale à celle de mM et mP

assimilant nous obtenons

(mM + Mp)/(1 + mp * mM) = (pI - mM)/(1 + mI * mM)

où mM = c, mI = e, et mP = a -----> troisième équation

le mettre dans leurs respectifs

endroits vous obtenez trois équations à trois inconnues, pt, e et f et résoudre ... juste x à la place de n plus tôt et là, vous avez votre e, f en termes de a B c d.

RÉSOLVIONS vous ....

Toutefois, si elles sont parallèles est simple, vous avez deux équations à deux variables utilisent la méthode milieu

0

Encore une autre méthode:

Matrice de transformation affine pour la réflexion par rapport à la ligne y = ax + b (fonctionne pour les lignes non verticales!). Soit de pa = 1 + a^2, ma = 1-a^2, alors la matrice est (du livre Geometry Computer Nikulin)

ma/pa 2a/pa  0 
2a/pa -ma/pa  0 
-2ab/pa 2b/pa  1 

On peut donc obtenir deux points arbitraires en deuxième ligne, appliquer cette transformation, et calculez l'équation de nouvelle ligne

Questions connexes