我有一个包含 x,y,z 坐标的顶点类。此类具有多个实例,这些实例包含在以下字典中:
// Vertex Collection
var Vertexs = new Dictionary<int, Vertex>();
public class Vertex
{
public double x, y, z;
}
我还有三个课程如下:
public abstract class Element
{ }
public class TRI : Element
{
public int vertex1, vertex2, vertex3;
public double v1x, v1y, v1z;
// and so on for vertex 2 & 3
}
public class QUAD : Element
{
public int vertex1, vertex2, vertex3, vertex4;
public double v1x, v1y, v1z;
// and so on for vertex 2, 3 & 4
}
TRI 和 QUAD 类都有多个实例。这些包含在字典中,如下所示:
// Element Collection
var Elements = new Dictionary<int, Element>();
元素键(int 值)将与命名的 TRI/QUAD 字段等重合vertex1
。我不知道元素类型类实例化时顶点的坐标。所以创建字典后,我需要循环遍历并从 Vertex 字典中拉取顶点数据,并用它来填补空白。
foreach (var Elm in Elements)
{
// this is where I need help.
}
QUAD 元素需要从 Vertexs 字典中拉出四个顶点,TRI 元素需要拉出三个。所以我的 TRI 函数应该是这样的。
public void fetch_vertex_coords(Vertex vertex1, Vertex vertex3, Vertex vertex3)
{
v1x = vertex1.x; v1y = vertex1.y; v1z = vertex1.z;
v2x = vertex2.x; v2y = vertex2.y; v2z = vertex2.z;
v3x = vertex3.x; v3y = vertex3.y; v3z = vertex3.z;
}
问题是 QUAD 也需要调用 void 函数,但它将有 4 个输入而不是 3 个。
我对接口和所有委托类型的经验很少(只有对我没有帮助的简单书籍示例),所以我真的不知道如何继续。我需要一个函数“fetch_vertex_coords”,它需要 3 个参数,一个需要 4 个参数,我不知道这里是否应该使用接口或操作(委托)。
我是否因为使用“元素”字典值作为元素而让自己很难做到这一点?仅供参考,我的抽象类“元素”实际上是空白的,因为我不知道是否应该用字段填充它,因为派生类已经有字段。对此的任何评论也将不胜感激。
总是有创建更多字典的后备;一个用于 TRI,一个用于 QUAD,然后在我使用简单的方法填充顶点数据后将它们组合起来。但是我已经走到了这一步,我想学习一些关于接口和/或委托的实用知识。