2010-11-25 18 views
5

J'ai 2 points P1 et P2. J'ai besoin de trouver le P3, afin queTrouvez le troisième point

  • tous les points d'être sur la même ligne;
  • P3 devrait être à la distance d du P2 (loin de P1)

j'ai commencé un système compliqué à résoudre apparemment à peine ...
alt text

PS.

Les réponses vectorielles sont cool, mais j'utilise C# et je ne sais pas comment ajouter des vecteurs là-bas.

+0

http://math.stackexchange.com/- peut-être trouvez-vous de meilleures réponses ;-) – Svisstack

+0

Vous avez seulement DEUX points dans une li li ne qui sont à distance ** d ** de ** P2 ** !! –

+0

@Svisstack: peut-être que je devrais transférer cette question là, mais je ne sais pas comment. – serhio

Répondre

5
P3 = P2 + d * ±(P2 - P1)/|P2 - P1| 

EDIT:

Parce que le shopping est facile:

mag = sqrt((P2x - P1x) ** 2 + (P2y - P1y) ** 2) 
P3x = P2x + d * (P2x - P1x)/mag 
P3y = P2y + d * (P2y - P1y)/mag 
+0

vraiment j'ai oublié la division vectorielle ... et pourquoi + -? – serhio

+0

ignacio, mec, pourriez-vous suggérer une réponse non vectorielle s'il vous plaît ...: "(Je devrais reconnaître ne pas être un homme de maths – serhio

+0

Parce qu'il y a deux points colinéaires' d' loin de 'P2': un loin de' P1 '(positif), et un vers' P1' (négatif) –

2

Je traduis le code à l'objectif C

float distanceFromPx2toP3 = 1300.0;  

float mag = sqrt(pow((px2.x - px1.x),2) + pow((px2.y - px1.y),2)); 
float P3x = px2.x + distanceFromPx2toP3 * (px2.x - px1.x)/mag; 
float P3y = px2.y + distanceFromPx2toP3 * (px2.y - px1.y)/mag; 

CGPoint P3 = CGPointMake(P3x, P3y); 
+0

Merci! Cela a fonctionné pour moi. (Pour les autres chercheurs, les mots-clés que j'essayais de trouver cette réponse avec: projection de la ligne Bresenham au 3ème point) –