フィルターのクリア

2D matrix indexing for element wise operation

1 回表示 (過去 30 日間)
Raj Raj
Raj Raj 2016 年 2 月 19 日
編集済み: Star Strider 2016 年 2 月 19 日
Hello all, I am using following code to estimate pairwise angle between for a vector. Where the angle should be between 0 to 2*pi. I am able to predict the angle. But I need your advise on implementing this two for loops. This is slowing the code. Looking forward for your attention. In the code, XYdata is a n x 2 matrix representing the Cartesian coordinates of individual point [xi, yi]. I presume this slow is because of two FOR loops.
for i2 =1:length(XYdata_new)
for j2 = 1:length(XYdata_new)
angle_ij(i2,j2)= Angle360(XYdata_new(i2,1), XYdata_new(i2,2), XYdata_new(j2,1),XYdata_new(j2,2));
end
end
Thanks in advance.
  3 件のコメント
Raj Raj
Raj Raj 2016 年 2 月 19 日
function angleout = Angle360(x1,y1,x2,y2)
if x1 == x2 && y1 ==y2
angleout = Inf;
end
angle = atan((y2-y1)/(x2-x1));
if angle > 0
if (y2 < y1) % y2 > y1, x2 > x1 % dy > 0, dx > 0 %first quadrant
angleout=pi+ angle;
else %
angleout= angle; % 3rd quadrant
end
elseif angle < 0
if x2 < x1 && y2 > y1
angleout= pi + angle; % 2nd quadrant
elseif y2 < y1 && x2 > x1
angleout= 3*pi/2 + (pi/2+angle); % 4th quadrant
elseif y2 < y1 && x2-x1 == 0
angleout= pi - angle; % 4th quadrant
end
elseif angle == 0
if x2 < x1
angleout = pi +angle;
else
angleout = angle;
end
end
Raj Raj
Raj Raj 2016 年 2 月 19 日
here it is

サインインしてコメントする。

採用された回答

Star Strider
Star Strider 2016 年 2 月 19 日
I would use the atan2 or atan2d functions. They are vectorised, so you can likely give your matrix columns to them directly and then do the angle difference calculations.
  8 件のコメント
Raj Raj
Raj Raj 2016 年 2 月 19 日
Thanks Star, I have marked it as answered.
Star Strider
Star Strider 2016 年 2 月 19 日
編集済み: Star Strider 2016 年 2 月 19 日
My pleasure!
Thank you.
EDIT More efficient versions of the angle conversion lines are:
Angles360 = rem(360+a, 360);
Angles2pi = rem(2*pi+a, 2*pi);

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by