Hi folks,
I've managed to loop my function to (correctly) determine the distance travelled by each line through the grid cells it intersects. It is as follows:
if true for Z = 1:length(ev_longitude)x1 = -4:10; %Grid x-range
A = min(ev_longitude(Z),st_longitude(Z)); %Determine min x coordinate of line
B = max(ev_longitude(Z),st_longitude(Z)); %Determine max x coordiante of line
x = [A B]; %x-range of line
y1 = 56:63; %Grid y-range
C = min(ev_latitude(Z),st_latitude(Z)); %Determine min y coordinate of line
D = max(ev_latitude(Z),st_latitude(Z)); %Determine max y coordinate of line
y = [C D]; %y-range of line
lxmb = @(x,mb) mb(1).*x + mb(2); %Line equation: y = m*x+b
coefficients = polyfit([A, B], [C, D], 1); %Determine line coefficients
m = coefficients (1); %Gradient
b = coefficients (2); %y-value intercept
mb = [m b]; %Matrix of [slope intercept] values
L1 = lxmb(x,mb); %Calculate Line #1 = y(x,m,b)
start_of_line = [A C]; %Start of line
end_of_line = [B D]; %End of line
hix = @(y,mb) [(y1-mb(2))./mb(1); y1]; %Calculate horizontal intercepts
vix = @(x,mb) [x1; lxmb(x1,mb)]; %Calculate vertical intercepts
hrz = hix(x(1:end),mb)'; %[X Y] Matrix of horizontal intercepts
vrt = vix(y(1:end),mb)'; %[X Y] Matrix of vertical intercepts
hvix = [start_of_line; hrz; vrt; end_of_line]; %Concatanated ‘hrz’ and ‘vrt’ arrays
srtd = unique(hvix,'rows'); %Remove repeats and sort ascending by ‘x’
Longitude_Values = srtd(:,1);Latitude_Values = srtd(:,2);i = find((Latitude_Values<=D) & (Latitude_Values>=C)); %Remove values beyond the drawn line
Final_Latitude_Values=Latitude_Values(i); %Remove values beyond the drawn lineii = find((Longitude_Values<=B) & (Longitude_Values>=A)); %Remove values beyond the drawn lineFinal_Longitude_Values=Longitude_Values(i); %Remove values beyond the drawn linefor j = 1:length(Final_Latitude_Values)-1 %Determine the distance per each segment
Segment_Distances(j) = sqrt((Final_Longitude_Values(j+1)-Final_Longitude_Values(j))^2 + (Final_Latitude_Values(j+1)-Final_Latitude_Values(j))^2) %euclidean distance in degrees.
endclearvars -except ev_latitude ev_longitude st_latitude st_longitudeendend
I want to save the variable Segment_Distances, but unless I clear it from the memory using the clearvars function then it remains in memory and is used incorrectly by the function to calculate the next line's Segment_Distances variable.
I essentially need a way to store the values for Segment_Distances created by the loop, but for the previous values of Segment_Distances to not be incorporated in the next loop.
If anyone can suggest an amendment to this it would be much appreciated.The only data needed is ev_latitude, ev_longitude, st_latitude and st_longitude. These are column vectors of random numbers.
Thanks.
Best Answer