2016-10-12 4 views
1

私はこれを今何時間か行う方法を理解しようとしています。 I(x、y)はにプロットなる二つの式のプログラムが実行されるとMatlabは、ユーザの入力が私のプロット上の点であるかどうかをチェックします

x = v*cosd(theta)*t; 
y = -(g*t.^2)/2 + v*sind(theta)*t; 
plot(x,y) 

変数V、シータ、xanimal、yanimalがユーザ入力によって充填されているフォーマットを有します。 xanimalとyanimalは基本的に単一点がどこにあるのか、vとthetaは軌道を作成する上の方程式に入る変数です。 私が探しているのは、ポイント(xanimal、yanimal)がプロット上にあるかプロット(x、y)の0.5以内にあるかを決定する条件文です。 プロット(x、y)は、方程式の値がユーザーの入力を介して入力されるため、常に変化します。

私は何も働いていない別のものを試しました。

One Attempt 

for i=1:max(x) 
if xanimal == x(i) && yanimal == y 
disp('Success') 
end 
end 

また、このメソッドは、事前に

Second Attempt 
Xmax_animal = xanimal +.5; 
Xmin_animal = x-.5; 

Ymax_animal = y+.5 
Ymin_animal = y-.5 
Y_animal = linspace(max(y),min(y),1) 

if(Y_animal>max1) 
disp('food fight') 
else 

a = find(y >= Y_animal); 
b = x(a); 
d = b(1); 
c1 = b(end); 

if (Xmax_animal >= d) && (d >= Xmin_animal) 
set(handles.edit5, 'String', 'Success') 

おかげで動作しませんでした!

+0

"プロット(x、y)の0.5以内"は、ポイントとラインの間のユークリッド距離(y軸上)が0.5を超えてはならないことを意味します。 – obchardon

+0

Matlab Exchangeでは、この機能を利用することができます。https://www.mathworks.com/matlabcentral/fileexchange/34869-distance2curve 問題を解決できますか。 – Eskapp

答えて

0

各座標の代わりに両方の座標を個別に使用する距離関数が必要です。以下の作業をする必要があります:

function d = dist(x , y, xpoint, ypoint) 
    d = sqrt((x - xpoint).^2 + (y - ypoint).^2); 
end 

あなたは距離の配列を生成するために、それをあなたのxとyのベクトルとあなたのxanimalとyanimalポイントを与えて、この点を呼び出すことができます。次に使用する

if sum(d < 0.5) > 0 
    disp('Close enough!'); 
else 
    disp('too far away'); 
end 
+0

xpointとypointはxanimalとyanimalを入力するところにホルダーを置きますか? – Rami

+0

はい、ちょうど 'd = dist(x、y、xanimal、yanimal)'や任意の変数を使って関数を呼び出すことができ、関数の結果で変数 'd'を生成します。 – Trogdor

関連する問題