2017-09-03 7 views
0

画像の2つのオブジェクトがどこを指しているのかを計算しようとしています。私はオブジェクトを直線に変換できるので、これを実行するために交差線を使用すると考えました。しかし、私が必要としないものである無限の線の間の交差を見つけるためのコードを見つけることがあるようです。2つのオブジェクト間の線が交差する

私はこのコードをa matlab blogから見つけました。交差する無限線を見つける方法を詳しく説明しています。

A = [lineA(1,:) - lineA(2,:); lineB(2,:) - lineB(1,:)]'; 
if rank(A) < 2 
    disp('Parallel') 
    B = [lineA(1,:) - lineA(2,:); lineA(1,:) - lineB(1,:)]'; 
    if rank(B) < 2 
     disp('Collinear') 
     if all((sort(lineA(:,1),'descend')-sort(lineB(:,1))) ... 
       .*[-1;1] <= sqrt(eps)) 
      tf = true; 
     else 
      tf = false; 
     end 
    else 
     tf = false; 
    end 
else 
    pq = linsolve(A,(lineB(2,:) - lineA(2,:))'); 
    tf = all(pq>=-sqrt(eps)) & all(pq<=1+sqrt(eps)); 
end 

また、私は必要かもしれないものに近い見えますline + circle intersectionsについての古い質問に位置しています。

しかし問題は、有限線と交差する1行をチェックしようとしていることです。写真は、私が何を描こうとしているのかを表しています。青い線は長さが限られていますが、赤い線は無限大で、交差するかどうかを判断しようとしています。

enter image description here

+1

を使用してdを解くことができます。線分/線分交点アルゴリズムを探している場合は、[here](https://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-セグメント交差)と[here](http://www.geeksforgeeks.org/check-if-two-given-line-segments-intersect/) – jodag

+0

申し訳ありません。はい、私は2つの線分の間の交差点を探していますが、1つは線分として残り、もう1つは無限になります。 –

答えて

1

すでに二行(すなわち、無限の線)の交点を決定する能力を持っているようですね。そのポイントを取得したら、交差点が線分に当たっているかどうかを簡単に確認することができます。

p0p1は、線分の端点を定義する点であり、pxは、2つの無限線の交点であるとします。次の条件は、pxp0p1の間にあるかどうかをチェックします。

d = dot(px-p0,p1-p0)/sum((p1-p0).^2); 
if d >= 0 && d <= 1 
    % intersecting 
else 
    % not intersecting 
end 

正当

我々は、それが次のパラメータベクトル式で表すことができ、次いでp0p1によって画定される線に沿って落下px点を仮定した場合dである

px = p0 + (p1 - p0)*d 

スカラーパラメータ式から、pxp0p1の間にあることが明らかになるのは、0 <= d <= 1の場合のみです。

私たちは、それはあなたが達成しようとしているものの図から、私にははっきりしていないいくつかの線形代数

% subtract p0 from both sides 
(px - p0) = (p1 - p0)*d 

% multiply by (p1 - p0)' to make the vectors into scalars 
(p1 - p0)'(px - p0) = (p1 - p0)'(p1 - p0)*d 

% divide to find d 
d = ((p1 - p0)'(px - p0))/((p1 - p0)'(p1 - p0)) 

% express using dot product and l2 norm. 
d = dot(p1-p0,px-p0)/norm(p1-p0)^2 
関連する問題