首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#向量类-插值设计决策

C#向量类-插值设计决策
EN

Stack Overflow用户
提问于 2013-11-10 19:13:40
回答 1查看 1.1K关注 0票数 2

目前,我正在研究C#中的一个向量类,现在我要指出的是,我需要弄清楚如何实现两个向量之间的插值函数。首先,我提出将函数直接实现到向量类中.

代码语言:javascript
复制
public class Vector3D
{
    public static Vector3D LinearInterpolate(Vector3D vector1,
        Vector3D vector2, double factor) { ... }

    public Vector3D LinearInterpolate(Vector3D other, double factor { ... }
}

(我总是提供两种方法:一种是以两个向量为参数的静态方法,另一个是以一个向量为参数的非静态方法)

...but --然后我想到了使用扩展方法(例如,在一个称为“插值”的独立类中定义),因为插值实际上并不是一个只适用于向量的东西。因此,这可能是另一个解决方案:

代码语言:javascript
复制
public class Vector3D { ... }

public static class Interpolation
{
    public static Vector3D LinearInterpolate(this Vector3D vector,
        Vector3D other, double factor) { ... }
}

因此,这里有一个例子,您将如何使用不同的可能性:

代码语言:javascript
复制
{
    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
}

所以我真的不知道哪个设计更好..。我也不知道这样的事情是否有终极的卢布,或者仅仅是一些人个人更喜欢的.但我真的很想听听你的意见,有什么更好的(如果可能的话,为什么)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-10 19:43:56

在这些答案( Best practices and guidelines for designing an API )中有很多善良的联系

但是这里的问题是:如果可以通过使用类的公共API在外部实现,就不要将任何东西作为成员函数来实现。不过,我不记得在哪里读到过这方面的内容(可能是埃里克·利珀特·盖伊)。

更新

是斯科特·迈尔斯的人。When should functions be member functions?。对不起埃里克!

注释后的示例

按照Scott的建议,我将LinearInterpolationDotProduct等作为非扩展在一个名为VectorMathVectorAlgorithms的单独静态类中实现。之后,我会尝试使用那个API编写代码示例--可能会有很多实际的单元测试。这应该会给我一个良好和坚实的感觉,如果API是可用的,有效和简洁的。如果结果是笨手笨脚的:违背斯科特的建议。一定要先拿到证据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19893930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档