求解三角形意味着找到所有可能的三角形,当它的一些边a,b和c以及角度A,B,C(A是与a相反的角度,等等......)是已知的。这个问题有0,1,2或无限多个解决方案。
我想写一个解决三角形的程序。用户将使用a,b,c,A,B和C中的一些数据来提供该过程(如果为了简单起见,您可以假设用户将避免存在无限多个解决方案的情况)和该程序将计算其他程序。通常需要根据情况使用正弦律或余弦定律。
因为它是一个Maths类,我也想显示函数图,我将在Maple中实现它。如果Maple不适合您的答案,请建议另一种语言(例如我在Java和Python初学者方面相当称职)。
我天真的想法是使用条件指令 if ... then ... else 来确定手头的情况,但它有点无聊。 Java有一个开关可以使事情更短更清晰,但我希望有一个更智能的结构。
因此我的问题是:假设某些变量与已知关系相关。当只给出一些值时,是否有一种简单明了的方法来组织一个过程来确定缺失的变量?
PS:我不确定如何标记这个问题。欢迎提出任何建议。
答案 0 :(得分:1)
一种方法可以是使用与名称对应的默认值使您的过程的所有参数可选:A,B,C,a,b,c。 由于我们可以假设所有缺失的变量都是非“数字”类型的变量,因此我们很容易快速确定哪些变量还没有值,并将这些值作为值发送给求解命令剩余的边或角度。
以下内容可能是一个好的开始:
--all
以下电话:
git push
返回:
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: