0

Matlab で線をプロットしました。線がエッジと交差する座標を調べたいと思います。

ここに画像の説明を入力

提案やアドバイスはありますか?=) 私の関数 xy-limits は -1 から 1 です。これまでの私のコードは次のとおりです。

yp = -1 + (1-(-1)).*rand(1,2);
xp = -1 + (1-(-1)).*rand(1,2);
a = (yp(2)-yp(1)) / (xp(2)-xp(1));
b = yp(1)-a*xp(1);
xlim([-1 1])
ylim([-1 1])
xlims = xlim(gca);
ylims = ylim(gca);
y = xlims*a+b;
line( xlims, y );
4

2 に答える 2

3
  1. 線の方程式を見つけます。つまり、次のようになります。y=a*x+b
  2. 下限/上限の y 制限を使用して x を解決します。結果の x が x 制限内にある場合、これはエッジ ポイントです。
  3. 左/右の x 制限を使用して y を解決します。結果の y が y 制限内にある場合、これはエッジ ポイントです。
  4. 終わり

したがって、基本的に、制限内の結果のポイントは次の図の緑の点であり、制限外の結果のポイントは赤い点です。

ここに画像の説明を入力

于 2013-04-09T06:40:17.730 に答える
3

私はそれを自分で解決したと思います =) 誰かがこの問題に遭遇した場合、コードを次のように変更しました。

yp = -1 + (1-(-1)).*rand(1,2);
xp = -1 + (1-(-1)).*rand(1,2);
a = (yp(2)-yp(1)) / (xp(2)-xp(1));
b = yp(1)-a*xp(1);
xlim([-1 1])
ylim([-1 1])
x = xlim(gca);
y = x*a+b;

for i = 1:numel(y)
    if y(i) < -1
        y(i) = -1;
        x(i) = (-b-1)/a;
    elseif y(i) > 1
        y(i) = 1;
        x(i) = (1-b)/a;
    end
end

line( x, y );

これは私にとってはうまくいくようで、Gunthersの写真の「緑色の点」を解決できます=)

于 2013-04-09T07:32:22.763 に答える