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.
Ah .. Dot produits. Ils ont été mon sauveur avant. – Kyle
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
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