鉴于数学不是我的强项,我正在为 3D 动画实现贝塞尔曲线。
公式在这里显示,你可以看到它非常讨厌。在我的编程中,我使用描述性名称,并且喜欢将复杂的行分解为更小的易于管理的行。
处理这种情况的最佳方法是什么?
是否忽略编程最佳实践并坚持使用变量名称,例如 x、y 和 t?
鉴于数学不是我的强项,我正在为 3D 动画实现贝塞尔曲线。
公式在这里显示,你可以看到它非常讨厌。在我的编程中,我使用描述性名称,并且喜欢将复杂的行分解为更小的易于管理的行。
处理这种情况的最佳方法是什么?
是否忽略编程最佳实践并坚持使用变量名称,例如 x、y 和 t?
在我看来,当你有一个预定义的数学方程时,使用短变量名是完全可以接受的:x、y、t、P_0 等,它们对应于方程。不过,请务必清楚地引用公式。
如果将公式提取到它自己的函数中,我当然会使用规范的数学表示,并且可能在评论中添加 wiki 页面 url
如果它嵌入在具有特定功能用法的代码中,那么将域名从您的代码中保留可能会更好
这取决于
看到只有你心中的数学家才能真正理解这个公式,我的建议是采用数学家最熟悉的风格(所以字母作为变量等......)
我也肯定会在某处发表评论,明确说明公式是什么以及它的作用,例如“此方法返回沿二次贝塞尔曲线的一系列点”。这样,每当您的程序员重新访问代码时,您可以放心地忽略数学复杂性,并假设您的内心数学家已经检查过以确保一切正常。
我鼓励您使用数学的最佳实践并用字母表示变量。只需对公式上方的变量进行解释即可。如果您可以将公式拆分为更小的子公式,那就更好了。
不要打扰。只需参考文档(在这种情况下是维基百科页面,甚至更好的是您自己的文档)并确保变量名称与您的文档匹配。代码注释不太适合(也不需要)描述数学公式。
有时一个引用比 40 行注释甚至暗示性的变量名要好。
使 C#(或其他首选语言)中的公式尽可能类似于数学公式,并包含对公式的引用,包括对变量的描述。编码的想法是可读的,如果你正在处理数学公式,最可读的表示是看起来最像数学的表示。
我倾向于将方程分解为其根部分。
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 将允许您写出方程,就像它在数学概念中出现的那样。
您的最终形式与原始方程式越相似,从长远来看,它就越可维护(否则您每次看到它时都必须解释代码)。