ABTOMAT, такой(математической) не существует, если нету закономерности у индексов вершин. Если террайн создаёться в блице но мешем, то есть возможность.
Вот примерно так выглядит математическая версия функции, она полностью на математике, и поэтому её производительность на высоте (без проблем вызывай хоть по 10 раз за цикл)

Function mTerrainY#(x#,z#) ; Terrain
Local TerTotTilWH%=(CCnt*TilS)
Local TerCurQuadX%,TerCurQuadZ%
Local TerCurX#,TerCurZ#
Local tX1#,tZ1#,tY1#
Local tX2#,tZ2#,tY2#
Local tX3#,tZ3#,tY3#
Local QuadPX#,QuadPZ#
Local a#,b#,c#,d#
If x>0
If x<(HeightMapS*TilS)
If z>0
If z<(HeightMapS*TilS)
For t.Ter=Each Ter
TerCurX#=((t\X-1)*TerTotTilWH)
TerCurZ#=((t\Z-1)*TerTotTilWH)
If x>TerCurX
If x<((t\X)*TerTotTilWH)
If z>TerCurZ
If z<((t\Z)*TerTotTilWH)
TerCurQuadX=((x-TerCurX-(TilS*.5))/TilS)
TerCurQuadZ=((z-TerCurZ-(TilS*.5))/TilS)
QuadPX= (x-TerCurX-(TerCurQuadX*TilS))
QuadPZ=(TilS-(z-TerCurZ-(TerCurQuadZ*TilS)))
If TerQR(t\X,t\Z,TerCurQuadZ,TerCurQuadX)=1
tX2=(((TerCurQuadX+1)*TilS)+TerCurX)
tZ2=((TerCurQuadZ*TilS)+TerCurZ)
tY2=TerVY(t\x,t\z,(TerCurQuadX+1),TerCurQuadZ)
tX3=tX2-TilS
tZ3=tZ2+TilS
tY3=TerVY(t\x,t\z,TerCurQuadX,(TerCurQuadZ+1))
If ((TilS-QuadPX)+QuadPZ)>TilS
tX1=tX3
tZ1=tZ2
tY1=TerVY(t\x,t\z,TerCurQuadX,TerCurQuadZ)
Else
tX1=tX2
tZ1=tZ3
tY1=TerVY(t\x,t\z,(TerCurQuadX+1),(TerCurQuadZ+1))
EndIf
Else
tX2=((TerCurQuadX*TilS)+TerCurX)
tZ2=((TerCurQuadZ*TilS)+TerCurZ)
tY2=TerVY(t\x,t\z,TerCurQuadX,TerCurQuadZ)
tX3=tX2+TilS
tZ3=tZ2+TilS
tY3=TerVY(t\x,t\z,(TerCurQuadX+1),(TerCurQuadZ+1))
If (QuadPX+QuadPZ)>TilS
tX1=tX3
tZ1=tZ2
tY1=TerVY(t\x,t\z,(TerCurQuadX+1),TerCurQuadZ)
Else
tX1=tX2
tZ1=tZ3
tY1=TerVY(t\x,t\z,TerCurQuadX,(TerCurQuadZ+1))
EndIf
EndIf
a#=-(tz3*ty2-tz1*ty2-tz3*ty1+ty1*tz2+ty3*tz1-tz2*ty3)
b#= (tz1*tx3+tz2*tx1+tz3*tx2-tz2*tx3-tz1*tx2-tz3*tx1)
c#= (ty2*tx3+ty1*tx2+ty3*tx1-ty1*tx3-ty2*tx1-tx2*ty3)
d#=-a*tx1-b*ty1-c*tz1
Y#=-(a*x+c*z+d)/b
Return Y
EndIf
EndIf
EndIf
EndIf
Next
EndIf
EndIf
EndIf
EndIf
End Function
А так можешь покурить
это.
Делал по
этой статье.