【问题标题】:Solving a triangle procedure求解三角形过程
【发布时间】:2016-07-20 10:03:00
【问题描述】:

求解一个三角形意味着当它的一些边 a、b 和 c 以及角 A、B、C(A 是与 a 相对的角,等等......)已知时,找到所有可能的三角形。这个问题有 0、1、2 或无限多个解。

我想写一个求解三角形的程序。用户将在 a、b、c、A、B 和 C 之间提供一些数据(如果为了简单起见有必要,您可以假设用户将避免存在无限多解决方案的情况)和该过程将计算其他的。通常需要根据情况使用正弦定理或余弦定理。

因为它是一个数学类,我也想显示函数图,我将在 Maple 中实现它。如果 Maple 不适合您的答案,请建议另一种语言(例如,我在 Java 方面相当胜任,在 Python 方面是初学者)。

我的幼稚想法是使用条件指令 if...then...else 来确定手头的情况,但这有点无聊。 Java 有一个 switch 可以让事情变得更短更清晰,但我希望有一个更智能的结构。

因此我的问题是:假设某些变量与已知关系相关。当只给出一些值时,是否有一种简单明了的方法来组织一个程序来确定缺失的变量?

PS:不确定我应该如何标记这个问题。欢迎提出任何建议。

【问题讨论】:

    标签: maple


    【解决方案1】:

    一种方法是使您的过程的所有参数都是可选的,默认值对应于名称:A、B、C、a、b、c。 由于我们可以假设所有缺失的变量都是不属于“数字”类型的变量,因此我们很容易快速确定哪些变量还没有值,并将这些值作为值提供给求解命令,该命令可以找到剩下的边或角。

    以下内容可能是一个好的开始:

    trisolve := proc( { side1::{positive,symbol} := A, side2::{positive,symbol} := B, side3::{positive,symbol} := C, 
                        angle1::{positive,symbol} := a, angle2::{positive,symbol} := b, angle3::{positive,symbol} := c } )
        local missing := remove( hastype, [ side1, side2, side3, angle1, angle2, angle3 ], numeric );
    
        return solve( { 180 = angle1 + angle2 + angle3, 
                    side1/sin(angle1*Pi/180)=side2/sin(angle2*Pi/180),
                    side1/sin(angle1*Pi/180)=side3/sin(angle3*Pi/180),
                    side2/sin(angle2*Pi/180)=side3/sin(angle3*Pi/180),
                    side1^2=side2^2+side3^2-2*side2*side3*cos(angle1) },
                    missing );
    end proc:
    

    以下调用:

    trisolve( side1 = 1, angle1 = 90, angle2 = 45 );
    

    返回:

    [B = (1/2)*sqrt(2), C = (1/2)*sqrt(2), c = 45]
    

    【讨论】:

    • 谢谢。我想出了一个类似的解决方案。请注意,正弦定律是不够的,应将余弦定律添加到方程列表中。我在声明变量时遇到了问题,因为我将使用带有弧度的过程,并且像 Pi/2 这样的表达式具有类型“*”。此外,该过程会返回“奇怪”的结果,例如 arctan(sqrt(2)/2,sqrt(2)/2)。再次显示解决方案会显示简化的表达式,例如 Pi/4。
    猜你喜欢
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    相关资源
    最近更新 更多