Napsal jsem makro, které používá lineární interpolaci:
Function Najdi(Xa1#,Ya1#,Za1#,Xa2#,Ya2#,Za2#,Xb1#,Yb1#,Zb1#,Xb2#,Yb2#,Zb2#, X#, Z#) As Variant
Dim Y#
On Local Error GoTo Chyba
Ya=-((Xa1-X)*Ya2+(X-Xa2)*Ya1)/(Xa2-Xa1)
Yb=-((Xb1-X)*Yb2+(X-Xb2)*Yb1)/(Xb2-Xb1)
Za=-((Xa1-X)*Za2+(X-Xa2)*Za1)/(Xa2-Xa1)
Zb=-((Xb1-X)*Zb2+(X-Xb2)*Zb1)/(Xb2-Xb1)
Y=(Ya*Zb-Yb*Za+(Yb-Ya)*Z)/(Zb-Za)
Najdi = Y
Exit Function
Chyba:
Najdi = "?"
End Function
Zadáš do něj čtyři body nejblíž k hledanému bodu.
Příklad - hledáš hodnotu Y pro souřadnici X=14200 a hodnotu Z=0.
Najdeš si nejbližší čtyři body, dva na červené lince (budou mít index A) a dva na zelené lince (budou mít index B) a vyplníš parametry takto:
Tedy Xa1=13500 (nejbližší menší jak 14200), tomu odpovídá Ya1=75 a Za1=0.
Dále Xa2=15000 (nejbližší větší jak 14200), tomu odpovídá Ya2=200 a Za2=3.
Na druhé lince Xb1=12500 (nejbližší menší jak 14200), tomu odpovídá Yb1=-75 a Zb1=-7.
Dále Xb2=14750 (nejbližší větší jak 14200), tomu odpovídá Yb2=125 a Zb2=2.
Zapíšeš hledanou hodnotu X=14200 a Z=0.
Funkce ti vrátí vypočtenou hodnotu Y=83.26389.
Neodpovídá tomu co si nalezl (Y=100), protože ta tvoje kresba není úplně dokonalá.
citovat