2010-02-05 9 views

Répondre

1
 
i = C+kV 
Lets call N the normal to the line A,B so N = [-(B-A).y, (B-A).x] 
Also, for any point on the line: 
(P-A)*N = 0  -- substitute from line 1 above: 
(C+kV-A)*N = 0 
(kV+C-A)*N = 0 
kV*N + (C-A)*N = 0 
kV*N = (A-C)*N 
k = [(A-C)*N]/V*N 
Now that we have k, plug it into line 1 above to get i. 

Here I « utilise * pour représenter le produit de points, de manière à élargir la multiplication régulière:

 
k = ((A.x-C.x)*-(B.y-A.y) + (A.y-C.y)*(B.x-A.x))/(V.x*-(B.y-A.y) + V.x*(B.x-A.x)) 
I.x = C.x + k*V.x 
I.y = C.y + k*V.y 

à moins que je visse quelque chose u p ....

+0

Ah .. Dot produits. Ils ont été mon sauveur avant. – Kyle

+0

J'apprécie l'aide de tout le monde (beaucoup !!), mais je pense que c'est ce dont j'avais besoin, bien que je ne sois pas sûr à 100% puisque je ne l'ai pas testé. Merci encore. – Kyle

+0

Vous avez fait ce que je faisais habituellement et doublé la même dimension à la dernière ligne (x). Le coupable probable était probablement copier et coller .. Ah, ceux qui peuvent blesser! Évidemment, la dernière ligne devrait être C.y comme vous le savez probablement. – Kyle

3

Si vous connaissez A et B, vous savez équation de la droite AB, et vous dites que vous connaissez V, de sorte que vous pouvez former l'équation pour la ligne V .... Eh bien i est le point seulement satisfait à ces deux équations.

équation pour la ligne AB:

(bx-ax)(Y-ay) = (by-ay)(X-ax) 

Si vous knpow la direction (ou pente = m) du vecteur, et un point qui se trouve sur le vecteur, l'équation de la droite pour le vecteur V est

Y = mX = b

où m est la pente ou de la direction de la ligne, et b est la coordonnée y où elle traverse thevertical y = axe (X = 0)

si vous connaissez un point sur la ligne (c.-à-C = (s, t), alors vous résoudre pour b par:

t = ms + b ==> b = t - ms,

si l'équation devient

Y = mX + t-ms 
+0

Dans ce cas, V est simplement un vecteur directionnel. Je demande essentiellement quelle (s) équation (s) j'utiliserais pour trouver l'intersection "i" étant donné cette direction de C. – Kyle

+0

Évidemment, je réalise que vous avez peut-être déjà répondu, mais je ne suis pas sûr de ce que vous 'équations' se référant à dans votre réponse. – Kyle

+0

si V est juste un vecteur directionnel, vous ne pouvez pas résoudre ce problème. Vous devez connaître non seulement la direction du vecteur, mais le point sur lequel il provient (ou tout point qu'il traverse) La direction est la pente de la ligne m, et sachant tout point sur la ligne, vous pouvez déterminer l'équation de la ligne –

0

Algèbre simple. La partie difficile consiste souvent à écrire les équations de base, mais une fois écrite, le reste est facile.

Pouvez-vous définir une ligne qui émane du point C = [c_x, c_y] et des points le long du vecteur V = [v_x, v_y]? Une bonne façon de représenter une telle ligne est d'utiliser une représentation paramétrique. Ainsi,

V(t) = C + t*V 

En ce qui concerne des éléments vectoriels, nous avons comme

V(t) = [c_x + t*v_x, c_y + t*v_y] 

Regardez comment cela fonctionne. Lorsque t = 0, nous obtenons le point C, mais pour toute autre valeur de t, nous obtenons un autre point sur la ligne. Qu'en est-il du segment de ligne passant par A et B? Une façon de résoudre ce problème serait de définir une deuxième ligne de manière paramétrique de la même manière. Puis résoudre pour un système de deux équations dans deux inconnues pour trouver l'intersection.

Une approche plus simple consiste à observer le vecteur normal au segment AB.Ce vecteur est donné comme

N = [b_y - a_y , a_x - b_x]/sqrt((b_x - a_x)^2 + (b_y - a_y)^2) 

Notez que N est défini ici pour avoir une norme unitaire. Alors maintenant, quand savons-nous si un point se trouve le long de la ligne qui relie A et B? C'est facile maintenant. Cela se produira lorsque le produit scalaire défini ci-dessous est exactement nul.

dot(N,V(t) - A) = 0 

Développez cette option et résolvez le paramètre t. Nous pouvons l'écrire en utilisant des produits scalaires.

t = dot(N,A-C)/dot(N,V) 

Ou, si vous préférez,

t = (N_x*(a_x - c_x) + N_y*(a_y - c_y))/(N_x*v_x + N_y*v_y)) 

Et une fois que nous avons t, remplacer dans l'expression ci-dessus pour V (t). Permet de voir tout ce travail en pratique. Je vais prendre quelques points A, B, C et un vecteur V.

A = [7, 3] 
B = [2, 5] 
C = [1, 0] 

V = [1, 1] 

Notre vecteur normal N, après la normalisation, ressemble à quelque chose comme

N = [0.371390676354104, 0.928476690885259] 

Le paramètre de ligne, t, est alors

t = 3.85714285714286 

Et nous trouvons le point d'intersection comme

C + t*V = [4.85714285714286, 3.85714285714286] 

Si vous tracez les points sur un morceau de papier, ils devraient tous être assemblés, et le tout en seulement quelques expressions simples.

+0

Merci beaucoup! Bon travail. – Kyle