2017-10-20 15 views
1

私は3点[x1,y1],[x2,y2][x3,y3]の座標を下に示すように持っています。ポイントとラインから矩形座標を取得

これらは、矩形の片側である線と、矩形の平行/反対側にある点を定義します。私は他の2つのコーナーの座標を取得したい。

図のようにポイント[xa, ya][xb, yb]を計算するにはどうすればよいですか?

image

clc; 
clear; 

I = imread('peppers.png'); 
imshow(I); 
h = imline; 
lineEndPoints = wait(h); 

x1 = round(lineEndPoints(1,1),2); 
y1 = round(lineEndPoints(1,2),2); 
x2 = round(lineEndPoints(2,1),2); 
y2 = round(lineEndPoints(2,2),2); 
hold on 

[x3, y3] = ginput(1); 
plot(x3, y3,'b*'); 

slope = (y2 - y1)/ (x2 - x1); 
slopePerp = -1/slope; 
+0

はあなたの第三の点の直交射影について考えたことがあります[基準線から直角までの距離](https://stackoverflow.com/questions/28848406/distance-from-reference-line-at-right-angle/28867384#28867384)を参照してください。あなたが距離と交差点を持っていれば、ほぼ完了です。 – Irreducible

答えて

2

あなたが[x1, y1][x2, y2]間の傾き(slope)と[x3, y3]slopPerp)に垂直な線に対する傾きを有します。

は、だから、あなたはまた、その後[x3, y3]

cPerp = y3 - slopePerp*x3; 

点を通る垂直線のy切片を得ることができます

% From y=mx+c -> c=y-mx 
c = y1 - slope*x1; 

として[x2, y2]にライン[x1, y1]ためのy切片を持っていますあなたの2本の黒線が会う場所は、[x4,y4]

です

今、私たちが必要とするすべては、xとyの違い

xdiff = x3 - x4; % So x4 + xdiff = x3 
ydiff = y3 - y4; % So y4 + xdiff = y3 

されており、これらすべてを、私たちの1と2ポイント

xa = x1 + xdiff; 
ya = y1 + ydiff; 
xb = x2 + xdiff; 
yb = y2 + ydiff; 

image


注意にこれらを追加します反復処理では、xyの値をseparatではなく配列に格納するほうがうまくいくでしょう変数。

また、roundを使用する理由はありません。その結果はあまり正確ではありません。値を表示するために四捨五入している場合は、sprintfまたはとして計算前に表示します。

0

ベクトルアプローチは、ラインP1P2上に​​点P3の投影を使用し、長方形のいずれかの回転のために動作します(傾斜が軸整列長方形のために存在していないことに注意してください)

P4 = P1 + (P2 - P1) * DotProduct(P3 - P1, P2 - P1)/DotProduct(P2 - P1, P2 - P1) 
    Pa = P1 + (P3 - P4) 
    Pb = P2 + (P3 - P4) 
関連する問題