Assuming the elevation changes are linear and run perpendicular to a line between the first
and second picked points this will return an elevation for the third picked point.
Code:
(defun c:test (/ p1 p2 p3 p4 el1 el2 el3 d12 vecs tepPt deltaE deltaE3)
(and (setq p1 (getpoint "\nPick First point: "))
(setq el1 (getdist "\nEnter elevation."))
(setq p2 (getpoint p1 "\nPick Second point: "))
(setq el2 (getdist "\nEnter elevation."))
(setq deltaE (- el2 el1)
d12 (distance p1 p2))
(while (setq p3 (getpoint "\nPick point for elevation: "))
(redraw)
(grvecs (list 1 p1 p3 p3 p2))
(setq tmpPt (polar p3 (+ (/ pi 2) (angle p1 p2)) 10.0))
(setq p4 (inters p1 p2 p3 tmpPt nil))
(setq deltaE3 (*(/ (distance p1 p4) (distance p1 p2))deltaE))
(if (> (distance p2 p4) d12)
(setq el3 (- el1 deltaE3))
(setq el3 (+ el1 deltaE3))
)
(print (strcat "Elevation at point is " (rtos el3)))
)
)
(princ)
)
PS Use at your own risk. Testing is recommended.