我正在做的是通用的,已经完成了一千次,但我无法弄清楚其他程序员是如何做到的。
我正在使用Sines法则返回A的角度。有两种组合,例如:
----注意:总共有六个,每个角度两个)----
我无法重载函数,因为签名不是唯一的。参数和返回类型是原始类型Double。
使用别名可以用来阅读代码,但无法解决我的问题。
我想到的一种方法是为每个边和角度创建一个结构;但是,我不想创造比所需更多的复杂性。
另一种解决方案可能是使用策略设计模式吗?
我是一个业余爱好者程序员(仍处于初级阶段);我正在尝试构建一些优秀的编程实践。任何帮助将不胜感激。
答案 0 :(得分:0)
可能最好的办法是使用一种方法。您的方法的签名看起来像这样:
Public Function GetAngle(commonSide As Double, commonAngle As Double, otherSide As Double) As Double
您的方法将返回三角形的另一个目标角度。不过,我真的想不起更好的参数名称。
答案 1 :(得分:0)
ASCII艺术时间!
a
__________
\B C/
\ /
c \ / b
\ A/
\/
鉴于b
和B
可以与c
和C
进行转置,您只需要三个公式:
A =ƒ(a,b,B),必要时转换
(b, B)
(c, C)
。
如果需要,A =ƒ(a,b,C),转换(b, C)
(c, B)
A =ƒ(b,c,B),必要时转换(B)
(C)
。
鉴于这些都有两个长度和一个角度,你需要三个不同的方法名称:
GetAngleFromOppositeLineAndLooseAngle(oppositeLine , adjacentLine , looseAngle)
GetAngleFromOppositeLineAndJointAngle(oppositeLine , adjacentLine , jointAngle)
GetAngleFromAdjacentLines (adjacentLine1, adjacentLine2, looseAngle)
否则,是的,你必须通过一个结构并辨别丢失的信息。使用Nullable(Of Double)
或Double.NaN
传递未知值。
答案 2 :(得分:0)
我建议使用不同的命名约定和布尔参数:
Public Function GetAngle(adjacentSide As Double, oppositeSide As Double, knownAngle As Double, Optional knownAngleCorrespondsToAdjacentSide As Boolean = True) As Double
当被叫时,你现在知道它是否是:
GetAngle(c, a, C) 'or
GetAngle(b, a, B) 'or
GetAngle(b, a, C, False) 'or
GetAngle(c, a, B, False)
那说,因为A,B和& C是任意标签:
a b c
__________ __________ __________
\B C/ \C A/ \A B/
\ / \ / \ /
c \ / b => a \ / c => b\ / a
\ A/ \ B/ \ C/
\/ \/ \/
你需要两个函数(Private可以正常工作)或者只是根据布尔值在内部处理你的计算:
Public Function GetAngle(adjacentSide As Double, oppositeSide As Double, knownAngle As Double, Optional knownAngleCorrespondsToAdjacentSide As Boolean = True) As Double
If knownAngleCorrespondsToAdjacentSide Then
'Calculate one way
' or call private method
Else
'Calculate the other
' or call the other private method
End If
Return calculatedAngle
End Function