Here is an example, assuming dx=1, dy=1the inclusion of arbitrary step size x and y should not be difficult
%
z=peaks(60);
%
spoint=[30,30];
%
angle=pi/4;
%
distance=10;
%
endpoint=[spoint(1)+distance*cos(angle) spoint(2)+distance*sin(angle)];
%
npoints=100;
%
[cx,cy,cz]=improfile(z,[spoint(1) endpoint(1)],[spoint(2) endpoint(2)],npoints);
%
dcx=diff(cx);
dcy=diff(cy);
dcz=diff(cz);
totaldist=cumsum(sqrt(dcx.^2+dcy.^2+dcz.^2));
%
ind=find(totaldist<distance,1,'last');

Visualization code
imagesc(z);axis xy;colormap gray
hold on;
plot(spoint(1),spoint(2),'r.','markersize',10)
plot(endpoint(1),endpoint(2),'r*','markersize',5)
plot([spoint(1) endpoint(1)],[spoint(2) endpoint(2)],'b')
plot(cx(ind),cx(ind),'g*','markersize',10)
source
share