【发布时间】:2013-11-11 04:45:14
【问题描述】:
目前我正在研究 C# 中的向量类,现在我要说到点子上了,我必须弄清楚我想如何实现两个向量之间的插值函数。 起初我想出将这些函数直接实现到向量类中......
public class Vector3D
{
public static Vector3D LinearInterpolate(Vector3D vector1,
Vector3D vector2, double factor) { ... }
public Vector3D LinearInterpolate(Vector3D other, double factor { ... }
}
(我总是同时提供:一个静态方法,两个向量作为参数,一个非静态方法,只有一个向量作为参数)
...但是后来我想到了使用扩展方法(例如在名为“插值”的单独类中定义),因为插值实际上并不是仅可用于向量的东西。 所以这可能是另一种解决方案:
public class Vector3D { ... }
public static class Interpolation
{
public static Vector3D LinearInterpolate(this Vector3D vector,
Vector3D other, double factor) { ... }
}
这里有一个示例,您将如何使用不同的可能性:
{
var vec1 = new Vector3D(5, 3, 1);
var vec2 = new Vector3D(4, 2, 0);
Vector3D vec3;
vec3 = vec1.LinearInterpolate(vec2, 0.5); //1
vec3 = Vector3D.LinearInterpolate(vec1, vec2, 0.5); //2
//or with extension-methods
vec3 = vec1.LinearInterpolate(vec2, 0.5); //3 (same as 1)
vec3 = Interpolation.LinearInterpolation(vec1, vec2,
0.5); //4
}
所以我真的不知道哪个设计更好......我也不知道这样的事情是否有最终的规则,或者它是否只是个人更喜欢的东西......但我真的会喜欢听听你的意见,什么更好(如果可能的话,为什么;))。
【问题讨论】:
-
另一种选择是制作扩展方法,或者将
static从您的第一个代码块中取出。 -
我认为程序员将是一个更好的地方来发布这个问题 - programmers.stackexchange.com
-
如果您在设计方面需要帮助,我认为查看 XNA 或其他库/框架可能很有用。在 XNA 上,插值被定义为 Vector3 类的静态函数,如您所见 here
-
@FabioMarcolini:谢谢:)。我知道 XNA 的设计,但我不知道使用扩展方法是否会更好,即使这些人因找出“最佳”设计而获得报酬,而且他们不做任何事情一整天:P。
-
程序员更适合概念性问题,比如设计模式等。
标签: c# vector extension-methods interpolation