It is not hard to write a closed form solution in terms of sine, cosine and the lengths of Q1, Q2, and the distance of the pivot point from the origin assuming the initial rotation angle is zero (makes it simpler).  Is there any reason to object to that solution letting sympy do the messy algebra.  I just takes a little vector algebra to set up the problem.

On 8/6/22 10:37 PM, Kevin Pauba wrote:
Also, oscar, none of the radicals in the formulas are due to my getting the lengths.  All q* terms are quadrances ... no lengths are used in the formulas.  I should have said quadrance of DP (the square of the length of the segment DP) instead of just segment DP.  Once I have the values for q1, q2, q_dp and s, I'll convert them to length and angles for human consumption.

On Saturday, August 6, 2022 at 2:26:36 PM UTC-7 Kevin Pauba wrote:

    Oscar, I think I misstated something about rational trig that
    reinforces your statement that it avoids square roots.  Maybe
    there is some manipulation of the equations (similar in spirit to
    using sympy.unrad()) that would keep them in a form that doesn't
    require the square roots.  It would seem that sqrt would only be
    needed in the very last step when evaluating the quadrances when I
    want a final distance measure once solved ( d = sqrt(q1), for
    instance).

    On Saturday, August 6, 2022 at 10:35:38 AM UTC-7 Kevin Pauba wrote:

        Rational trigonometry totally eschews the use of
        transcendental functions like sine and cosine.  The "Triple
        Spread Formula" relating the speads to the quadrances, for
        example, is quadratic (as is the "Triple Quad Formula") -- the
        use of square roots is unavoidable.

        After working the same problem using traditional circular
        functions (sine & cosine), I was pleased to see a much simpler
        solution (that took relatively little processing time).  I am
        intrigued with rational trigonometry but a bit disappointed
        that a solution is more elusive.

        On Saturday, August 6, 2022 at 9:14:19 AM UTC-7 Oscar wrote:

            The equations you are attempting to solve lead to a very
            complicated
            Groebner basis that is slow to compute (I'm not sure how
            long it
            takes) and probably gives quite a complicated expression
            for the
            solution.

            It might be better if you can derive the equations without
            introducing
            radicals i.e. to work with the quadrances rather than
            square rooting
            them to get lengths. I'm not sure how you derived this but
            I imagine
            the intention of rational geometry is to avoid things like
            square
            roots.

            On Sat, 6 Aug 2022 at 16:22, Kevin Pauba
            <[email protected]> wrote:
            >
            > That might be another approach but this represents an
            applied geometry problem (mechanics). The segment DP
            (along with s) is an input measure that is easy to
            determine/specify.
            >
            > On Saturday, August 6, 2022 at 4:45:13 AM UTC-7
            [email protected] wrote:
            >>
            >>
            >> Kevin, I took a look at some of the rational geometry
            links -- it makes me wonder if you might approach the
            relationship between Q1 and Q2 and the area of the
            triangle extending past the line instead of simply the
            length DP.
            >>
            >> /c
            >> On Friday, August 5, 2022 at 9:11:39 PM UTC-5
            [email protected] wrote:
            >>>
            >>> Hi Oscar,
            >>>
            >>> That very well may be (as you've noticed, I'm not well
            versed in math as I once was). This is an applied geometry
            problem (see attached diagram) where the triangle rotates
            about point A. I am solving for the relationships between
            q1 and q2, the perpendicular distance from P to the base
            of the triangle (segment DP) and the angular measure s
            using rational trigonometry (see
            https://stijnoomes.com/laws-of-rational-trigonometry/). I
            have a solution using sin, cos but I'm interested in this
            alternative method.
            >>>
            >>> equ1 in my working example solves for the segment DP
            given q1, q2 and s (and angular measure). The problem
            presented here is to determine q1 and q2 given two known
            segments and angular measures (q_dp1, s1) and (q_dp2, s2).
            >>>
            >>> I hope this makes sense and that the information might
            help you help me.
            >>>
            >>> Thanks for taking the time looking into it!
            >>>
            >>> On Friday, August 5, 2022 at 4:50:09 PM UTC-7 Oscar
            wrote:
            >>>>
            >>>> I just had a quick look and I think that maybe this
            has a positive
            >>>> dimensional solution set.
            >>>>
            >>>> On Fri, 5 Aug 2022 at 16:08, Kevin Pauba
            <[email protected]> wrote:
            >>>> >
            >>>> > Here's the minimal working example (except for it
            hanging on solve()):
            >>>> >
            >>>> > import sympy as sym
            >>>> > from sympy import sqrt
            >>>> >
            >>>> > q1, q2, s, s1, s2, q_dp1, q_dp2 = sym.symbols('Q_1,
            Q_2, s, s_1, s_2, Q_dp_1, Q_dp_2')
            >>>> >
            >>>> > equ1 = q1*s - q2*s + 2*q2 - 2*sqrt(q2*(q1*s - q2*s
            + q2 + 2*sqrt(q1*q2*s*(1 - s)))) + 2*sqrt(q1*q2*s*(1 - s))
            >>>> >
            >>>> > eq1 = equ1.subs({ s: s1 }) - q_dp1
            >>>> > print(f"{eq1} = 0")
            >>>> >
            >>>> > eq2 = equ1.subs({ s: s2 }) - q_dp2
            >>>> > print(f"{eq2} = 0")
            >>>> >
            >>>> > soln = sym.solve([eq1, eq2], (q1, q2), simplify=False)
            >>>> > print(f"soln = {soln}")
            >>>> >
            >>>> > On Friday, August 5, 2022 at 7:47:07 AM UTC-7 Oscar
            wrote:
            >>>> >>
            >>>> >> You should be able to obtain a parametric Groebner
            basis to represent
            >>>> >> the solutions of this system. Whether that leads
            to an explicit
            >>>> >> solution in radicals is hard to say without trying.
            >>>> >>
            >>>> >> I would demonstrate how to do this but the code
            for putting together
            >>>> >> the equations is incomplete.
            >>>> >>
            >>>> >> On Fri, 5 Aug 2022 at 14:01, Chris Smith
            <[email protected]> wrote:
            >>>> >> >
            >>>> >> > If you remove the radicals
            (`sympy.solvers.solvers.unrad(eq1)`) and replace `Q1` and
            `Q2` with `x` and `y` and `Q_dp_1` with a and `s1` with
            `b` you will get an expression that is of degree 4 in
            every variable and can be split into a term with `a` and
            `b` and a term with only `b` -- both with `x` and `y`.
            >>>> >> >
            >>>> >> > u1 = a*(a**3 - 4*a**2*y*(2 - b) -
            2*a*y**2*(-3*b**2 + 8*b - 8) - 4*b**3*x**3 +
            2*b**2*(-x**2*(-3*a + 2*y*(b - 2)) + 2*y**3*(b - 2)) -
            4*b*x*(a**2 + a*y*(b - 2) + y**2*(-b**2 - 8*b + 8))) + \
            >>>> >> > b**2*(b*(x**2 + y**2) + 2*x*y*(b - 2))**2
            >>>> >> >
            >>>> >> > Replace a,b with c,d (for `q_dp_2` and `s2`) to
            get `u2`. I can't imagine that solving a pair of quartics
            is going to give a nice solution. But solving this system
            with known values for `a` and `b` would be straightforward
            with `nsolve`.
            >>>> >> >
            >>>> >> > /c
            >>>> >> >
            >>>> >> > On Thursday, August 4, 2022 at 11:54:24 PM UTC-5
            [email protected] wrote:
            >>>> >> >>
            >>>> >> >> And eq1=Q_1*s_1 - Q_2*s_1 + 2*Q_2 - Q_dp_1 -
            2*sqrt(Q_2*(Q_1*s_1 - Q_2*s_1 + Q_2 +
            2*sqrt(Q_1*Q_2*s_1*(1 - s_1)))) + 2*sqrt(Q_1*Q_2*s_1*(1 -
            s_1)) ... sorry, long day!
            >>>> >> >>
            >>>> >> >> On Thursday, August 4, 2022 at 9:39:53 PM UTC-7
            Kevin Pauba wrote:
            >>>> >> >>>
            >>>> >> >>> Sorry, Jeremy. Good suggestion!
            >>>> >> >>>
            >>>> >> >>> s1, s2, q_dp1, q_dp2 = sym.symbols('s_1, s_2,
            Q_dp_1, Q_dp_2')
            >>>> >> >>> eq1 = equ1.subs({ s: s1 }) - q_dp1
            >>>> >> >>> md( "$" + sym.latex(eq1) + " = 0$\n" )
            >>>> >> >>>
            >>>> >> >>> eq2 = equ1.subs({ s: s2 }) - q_dp2
            >>>> >> >>> md( "$" + sym.latex(eq2) + " = 0$\n" )
            >>>> >> >>>
            >>>> >> >>> soln = sym.solve([eq1, eq2], q1, q2)
            >>>> >> >>> print(f"soln = {soln}")
            >>>> >> >>>
            >>>> >> >>> I'll set simplify to False and see how it goes
            ...
            >>>> >> >>> On Thursday, August 4, 2022 at 8:18:00 PM
            UTC-7 Kevin Pauba wrote:
            >>>> >> >>>>
            >>>> >> >>>> I've attached a portion of a jupyter
            notebook. I'm attempting to solve a simultaneous equation
            using sympy. The sym.solve() in the green input box
            doesn't return (well, I waited over night on my macbook
            pro). Might the solution be intractable? Is there another
            way to get a solution? Any help is greatly appreciated.
            >>>> >> >
            >>>> >> > --
            >>>> >> > You received this message because you are
            subscribed to the Google Groups "sympy" group.
            >>>> >> > To unsubscribe from this group and stop
            receiving emails from it, send an email to
            [email protected].
            >>>> >> > To view this discussion on the web visit
            
https://groups.google.com/d/msgid/sympy/72f1b075-dbe2-41c0-bba6-9305c5960443n%40googlegroups.com.

            >>>> >
            >>>> > --
            >>>> > You received this message because you are
            subscribed to the Google Groups "sympy" group.
            >>>> > To unsubscribe from this group and stop receiving
            emails from it, send an email to
            [email protected].
            >>>> > To view this discussion on the web visit
            
https://groups.google.com/d/msgid/sympy/54eddcdc-a42e-4ebc-87b8-b6aaea1e2d0an%40googlegroups.com.

            >
            > --
            > You received this message because you are subscribed to
            the Google Groups "sympy" group.
            > To unsubscribe from this group and stop receiving emails
            from it, send an email to [email protected].
            > To view this discussion on the web visit
            
https://groups.google.com/d/msgid/sympy/357f1ceb-d50f-484f-ae1e-0c82a1414a62n%40googlegroups.com.


--
You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/da2d4dba-9b7a-478c-9454-755cf0b9f2cbn%40googlegroups.com <https://groups.google.com/d/msgid/sympy/da2d4dba-9b7a-478c-9454-755cf0b9f2cbn%40googlegroups.com?utm_medium=email&utm_source=footer>.

--
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/489ed715-994d-f2c7-3e87-bcf6307ab061%40gmail.com.

Reply via email to