鉴于数学并不是我最强的一点,我正在实现3D动画的贝塞尔曲线。你如何让数学方程具有可读性和可维护性?
该公式显示为here,正如您所看到的,它非常讨厌。在我的编程中,我使用了描述性名称,并且喜欢将复杂的线条分解为更小的可管理的线条。
处理这种情况的最佳方法是什么?
是否忽视编程最佳实践并坚持使用变量名称,如x,y和t?
鉴于数学并不是我最强的一点,我正在实现3D动画的贝塞尔曲线。你如何让数学方程具有可读性和可维护性?
该公式显示为here,正如您所看到的,它非常讨厌。在我的编程中,我使用了描述性名称,并且喜欢将复杂的线条分解为更小的可管理的线条。
处理这种情况的最佳方法是什么?
是否忽视编程最佳实践并坚持使用变量名称,如x,y和t?
在我看来,当你有一个预定义的数学方程式是完全可以接受的使用对应于该等式的短变量名称:x,y,t,P_0等。请务必清楚地参考公式。
我鼓励你使用数学的最佳实践并用字母表示变量。只需提供公式上方变量的解释。如果你可以将公式分割成更小的子公式,甚至更好。
如果公式中萃取到它自己的功能我会用一定的规范数学表示,如果可能添加wiki页面的URL在评论
其代码嵌入与功能的具体使用则保持你的代码中的域名可能会更好
这取决于
看到,因为只有数学家你实际上是要理解公式,我的建议是去同一个风格,一个数学家将是最舒适(所以字母作为变量等...)
我也肯定会在那里清楚说明公式是什么以及它做了什么,例如“这种方法沿着二次贝塞尔曲线返回一系列点”。这样,当程序员重新访问代码时,你可以放心地忽略数学的复杂性,假设你的内部数学家已经检查过,以确保它的一切正常。
不要打扰。只需参考文档(在这种情况下维基百科页面,或者甚至更好的自己的文档),并确保变量名称符合您的文档。代码评论并不适合(也不需要他们)描述数学公式。
有时候参考比40行评论甚至暗示变量名称更好。
我倾向于将一个方程式分解为其根部分。
def sum(array)
array.inject(0) { |result, item| result + item }
end
def average(array)
sum(array)/array.length
end
def sum_squared_error(array)
avg = average(array)
array.inject(0) { |result, item| result + (item - avg) ** 2 }
end
def variance(array)
sum_squared_error(array)/(array.length - 1)
end
def standard_deviation(array)
Math.sqrt(variance(array))
end
您可能会考虑使用特定领域的语言来处理此问题。 Mathematica可以让你写出方程,就像它出现在数学概念中一样。
您的最终表单与原始方程式相似的程度越高,从长远来看,它的可维护性越高(否则每次看到代码时都必须解释代码)。
使C#(或其他偏好语言)中的公式尽可能类似于数学公式,并且包括对公式的引用,包括对变量的描述。编码的想法是可读的,如果你正在处理数学公式,那么最具可读性的表示形式就像数学一样。
您可以举一个例子,说明bezier示例中的“编程最佳实践”是什么? – 2009-12-11 12:43:57
描述性变量名称。保持简短的代码行,用C#编写的完整论坛会比纸上的要长。 – Finglas 2009-12-11 12:46:11