# calculate distance and angles between points in a grid

16 ビュー (過去 30 日間)
ELISABETTA BILLOTTA 2021 年 9 月 3 日

I have created a grid of this type where for each point I know the coordinates and each point of the grid is one degree both in latitude and in longitude. I therefore have to calculate the distance in km and the angle in degrees from the blue point (x = 14.75: y = 40.5) to all the other orange points.
I created a function to calculate the distances and angles between two points, but where I always have to enter the coordinate values and I would like to avoid this step. I wonder, is it possible to calculate the distances and angles for all these points without manually entering the coordinate values?
##### 3 件のコメント表示非表示 2 件の古いコメント
ELISABETTA BILLOTTA 2021 年 9 月 6 日

this is the code:
A=load('plot_mappe_jacopo.txt'); %plottare i confini dei continenti!!!
plot(A(:,1),A(:,2));
hold on
clear;
cx = 14.75; % coordinata x punto centrale, x-coordinates = 50 (example)
cy = 40.5; % coordinata y punto centrale, y-coordinates = 25 (example)
hold on
longrd=0:1:30; %dimensione griglia
latgrd=25:1:55;
ic=0; %contatore
for i=1:length(latgrd) %matrice che contiene tutti i valori
for j=1:length(latgrd)
ic=ic+1;
lonlatgrd(ic,1)=longrd(i);
lonlatgrd(ic,2)=latgrd(j);
end
end
%figure()
plot(lonlatgrd(:,1),lonlatgrd(:,2),'.');

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

### 採用された回答

Alamanda Ponappa Poovaya 2021 年 9 月 7 日
Based on the inromation you have provided, the below code should calculate the distance and angle for all 961 coordinates from cx and cy. I have made some small changes to your original code as well, it should run faster now that I have eliminated the for loop
cx = 14.75; % coordinata x punto centrale, x-coordinates = 50 (example)
cy = 40.5; % coordinata y punto centrale, y-coordinates = 25 (example)
hold on
longrd=0:1:30; %dimensione griglia
latgrd=25:1:55;
[X ,Y] = ndgrid(longrd,latgrd);
X = reshape(X.',1,[]);
Y = reshape(Y.',1,[]);
lonlatgrd(:,1) = X';
lonlatgrd(:,2) = Y'
%figure()
plot(lonlatgrd(:,1),lonlatgrd(:,2),'.');
%sqrt((x-x1)^2 + (y-y1)^2)
D1 = X - cx;
D2 = Y - cy;
D1 = D1.*D1;
D2 = D2.*D2;
distance = sqrt(D1+D2);
%angle = tan(y-y1/x-x1);
D1 = X - cx;
D2 = Y - cy;
angle = tan(D2./D1);

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

### カテゴリ

Find more on Subplots in Help Center and File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by