Attualmente sto codificando una classe Vector
in C # e sto arrivando al punto, dove devo capire, come voglio implementare una funzione / metodo per interpolare tra due vettori. La (ovvia) e anche la mia prima soluzione è stata semplicemente implementarla come metodo nella stessa classe vettoriale:
public class Vector3D
{
public static Vector3D LinearInterpolate(Vector3D vector1,
Vector3D vector2, double factor) { ... }
public Vector3D LinearInterpolate(Vector3D other, double factor { ... }
}
(Ho deciso di offrire sia un metodo statico con due vettori come parametri che uno non statico, con un solo vettore come parametro)
Ma poi ho avuto l'idea di usare i metodi di estensione (definiti in una classe separata chiamata per esempio Interpolation
per esempio), poiché l'interpolazione non è realmente limitata ai soli vettori. Quindi questo potrebbe essere un altro approccio:
public class Vector3D { ... }
public static class Interpolation
{
public static Vector3D LinearInterpolate(this Vector3D vector,
Vector3D other, double factor) { ... }
}
Ed ecco un esempio che mostra come si utilizzerebbero le diverse implementazioni:
{
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
}
Non posso davvero decidere quale sia il design preferibile. Esiste una regola empirica su come implementare metodi / funzioni simili a quella sopra o è piuttosto una questione di preferenza? Mi piacerebbe davvero sentire le tue opinioni su cosa è meglio e - se possibile - perché.