解决三角程序

Solving a triangle procedure

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

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

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

我天真的想法是用条件指令if...then...else来判断手头的case但是有点无聊。 Java 有一个 开关 可以让事情变得更短更清晰,但我希望有一个更智能的结构。

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

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

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

像下面这样的东西可能是一个好的开始:

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 );

returns:

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