问题: 给定3个输入“弹跳”,“落球高度”和“球视图高度”。
我该如何计算观察者可以看到球传球的次数。 因此,我的代码给出了正确的输出,但是随着反弹接近1,我需要花费更长的时间。如何在本质上确定性。
Private Shared Sub dgvRowFormatting(dgv As DataGridView)
For Each row As DataGridViewRow In dgv.Rows
Dim CompareValue = Convert.ToInt32(dgv(1, row.Index).Value)
row.DefaultCellStyle.ForeColor = MyConditions.SetCondition(CompareValue)
Next
End Sub
Public Class MyConditions
Public Enum Condition
LessThanZero = -1
EqualToZero
GreaterThanZero
End Enum
Public Shared Function SetCondition(Of T As IComparable)(ByVal Value As T) As Color
Return SetColorOnCondition(CType(Value.CompareTo(0), Condition))
End Function
Private Shared Function SetColorOnCondition(Comparison As Condition) As Color
Select Case Comparison
Case Condition.LessThanZero
Return Color.Red
Case Condition.EqualToZero
Return Color.Black
Case Condition.GreaterThanZero
Return Color.Green
End Select
End Function
End Class
我不是在寻找代码答案,而只是在寻找需要思考的方向。 目前,我认为,如果我能以某种方式建立线性关系并创建一个“猜测”通过的函数,它将更快。
答案 0 :(得分:0)
不确定多少是正确的。但是,
var heightDiff = (BallDropHeight - ViewerHeight);
var reducedHeight = BallDropHeight *(1 - BounceFactor);
var BallSeenTimes = ((heightDiff/reducedLength)*2)+1;
实际上可以解决它。您只需要找到每次跳下时降低的高度即可。然后,将查看器与落球点之间的高度差除以减少的高度,将得出球在查看器上方反弹的次数。此后,对于每个跳出观看者,乘以2便会看到两次。而添加一个是第一次下降。
不涉及循环。因此,执行所需的时间只会很小。希望它会有所帮助。