Tady je to jako ukázkový demo.
Příspěvky odeslané z IP adresy 89.102.201.–
Lader
Lader
#3 Lader
Jo a
A,B - jsou poloosy elipsy
Xe,Ye - je střed elipsy
X1,Y1 - je libovolný bod na přímce
X2,Y2 - je jiný libovolný bod na přímce
Body X1,Y1,X2,Y2 udávají všechny parametry přímky včetně směru
Funkce vrací pole 4 údajů, jsou to souřadnice dvou bodů, které udávají místo kde se protne přímka s elipsou. Pokud se neprotne, funkce vrací prázdný údaj. Pokud se protne pouze v jednom místě, budou oba body identické.
Lader
Tak jsem to zjednodušil a převedl do basicu:
Function Prusecik(A,B,Xe,Ye,X1,Y1,X2,Y2)
Dim D#,J#,U#,V#,X12#,Y12#, P(4,1) As Variant
X12 = X1-X2
Y12 = Y1-Y2
D = (Ye^2+B^2)*X12^2+2*((X2-X1)*((Xe-X1)*Y2+(X2-Xe)*Y1)*Ye+((Xe-X1)*(Xe-X2)-A^2)*Y1*Y2) _
-(Xe-X2-A)*(Xe-X2+A)*Y1^2-((Xe-X1-A)*(Xe-X1+A))*Y2^2
If D>=0 Then
D = sqr(D)
J = A^2*Y12^2+B^2*X12^2
P(0,0) = (A^2*Y12*(X12*Ye-X1*Y2+X2*Y1)+B*X12*(A*D-B*Xe*X12))/J
P(1,0) = (B^2*X12*((X1-Xe)*Y2+(Xe-X2)*Y1)+A*Y12*(B*D-A*Ye*Y12))/J
P(2,0) = (A^2*Y12*(X12*Ye-X1*Y2+X2*Y1)-B*X12*(B*Xe*X12+A*D))/J
P(3,0) = (B^2*X12*((X1-Xe)*Y2+(Xe-X2)*Y1)-A*Y12*(A*Ye*Y12+B*D))/J
End If
Prusecik = P
End Function
Tu omáčku si dodělej.
Lader
Udělal jsem funkční kód do maximy (pouze numerické řešení). Pokud bude zájem můžu jej sem poslat. Ten můj kód je výpočetně náročnější než ten tvůj, asi by jej chtělo více zoptimalizovat.