After the discussion about the intersecting hyperbolae it struck me
that the general equations

            eq1 = A*x**2 + B*x*y + C*y**2 + D*x + E*y + F = 0
            eq2 = G*x**2 + H*x*y + I*y**2 + J*x + K*y + L = 0

represent many different objects and so the general solution to them
is of ... general purpose. Since these equations end up requiring the
solution of a quartic equations, I solved the system for x and y and
stored them in a routine that can be used to solve for the
intersections of two such quantities quickly.

e.g. here is what it now looks like to solve for the intersection of a
circle and an ellipse:

var("x y c R")
for c in [4,R]: # do it once with a numerical r and again with a
symbolic c
    s,r = intersection((x-1)**2/2+(y-2)**2/4-c, x**2+y**2-10, x, y, 3)
    for k in sorted(r):
        if r[k]:
            print (k, r[k]),',',
    print
    for si in s:
        if type(s) is dict:
            print si, s[si]
        else:
            print si

(The numerical results match up with the nice solver/plotter at
wolframalpha.)

c=4
(A, 8) , (C, 4) , (D, -16) , (E, -16) , (F, -40) , (G, 1) , (I, 1) ,
(L, -10) ,
(-1.80, 2.60)
(3.36 + 4.2*I, -4.95 + 2.85*I)
(3.08, -0.707)
(3.36 - 4.2*I, -4.95 - 2.85*I)

c=R
(A, 8) , (C, 4) , (D, -16) , (E, -16) , (F, 24 - 16*R) , (G, 1) , (I,
1) , (L, -10) ,
x 1 + x*(1 + (-512 + 512*R + 512*y - 128*y**2)**(1/2)/16) - (-512 +
512*R + 512*y - 128*y**2)**(1/2)/16
y -516 + 208*R + 208*y - 32*R*y - 16*R**2 + 20*y**2 - 8*R*y**2 -
8*y**3 - y**4

Note that in the symbolic case, the equations to be solved are
returned since a general solution is not generally possible unless
certain discriminants can be determined.

If we solve for the intersection of a parabola and an ellipse we get:

>>> print intersection(y-(x**2-3),(x-1)**2/2+y**2-5,x,y,2)

(set([(-2.0, 0.80), (2.2, 2.1), (0.88, -2.2), (-1.2, -1.6)]), {E: 1,
K: 0, D: 0, J: -4, C: 0, G: 2, I: 4, B: 0, F: 3, H: 0, A: -1, L: -18})

which again match with wolframalpha.

This is commit labelled "Intersections" in my t2 branch. Eventually,
either solve should handle this, but for now it appears as a function
"intersection" in solvers.

Hyperbola could be added to the Geometry class, and any intersections
that aren't already defined there could use this one generic function
for calculating the intersections.

/c

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To post to this group, send email to sy...@googlegroups.com.
To unsubscribe from this group, send email to 
sympy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sympy?hl=en.

Reply via email to