Anonymní profil Lader – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Lader – Programujte.comAnonymní profil Lader – Programujte.com

 

Příspěvky odeslané z IP adresy 89.102.201.–

Lader
Visual Basic › Priesecnik usecky a elipsy
26. 7. 2014   #192403
Lader
Visual Basic › Priesecnik usecky a elipsy
26. 7. 2014   #192401

#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
Visual Basic › Priesecnik usecky a elipsy
26. 7. 2014   #192400

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
Visual Basic › Priesecnik usecky a elipsy
26. 7. 2014   #192390

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.

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý