C# - 自定义三角类,调用值

时间:2011-07-19 02:47:50

标签: c# class call

我正在尝试创建一个自定义类来保存三个顶点位置,这些顶点位置定义了要绘制和细分的三角形。我遇到的问题是如何确保我返回正确的值。

这是我到目前为止的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace Icosahedron_Test
{
    class TriXYZ
    {
        Vector3 vertex1;
        Vector3 vertex2;
        Vector3 vertex3;
        int depth;
        float material; // float because the material can be part grass / part dirt or part sand / part rock, etc...  for blending

        public TriXYZ(Vector3 pos1, Vector3 pos2, Vector3 pos3, int tDepth)
        {
            vertex1 = pos1;
            vertex2 = pos2;
            vertex3 = pos3;
            depth = tDepth;
        }

        public TriXYZ(Vector3 pos1, Vector3 pos2, Vector3 pos3, int tDepth, float tMaterial)
        {
            vertex1 = pos1;
            vertex2 = pos2;
            vertex3 = pos3;
            depth = tDepth;
            material = tMaterial;
        }

        public Vector3 Vertex1(TriXYZ triangle)
        {
            return vertex1;
        }
        public Vector3 Vertex2(TriXYZ triangle)
        {
            return vertex2;
        }
        public Vector3 Vertex3(TriXYZ triangle)
        {
           return vertex3;
        }
        public int Depth(TriXYZ triangle)
        {
            return depth;
        }
        public Vector3 Midpoint(Vector3 pos1, Vector3 pos2, int tDepth)
        {
            Vector3 midpoint;  // returned midpoint between the two inputted vectors

            //PLACEHOLDER

            return midpoint;
        }

    }
}

我创建了一个新的Triangle元素:

new TriXYZ(pos1, pos2, pos3, depth); // the depth will deal with LOD later on

所以,为了得到顶点位置的值,我正在调用这样的类:

vertex1 = TriXYZ.Vertex1(verticiesList[listPos]);

我的问题是我不确定它是否有效,而且我现在还不完全确定如何检查它,因为这里没有足够的实际运行程序。这背后的理论是否会起作用?

另外,作为旁注,我是业余程序员,所以如果有任何明显的问题与编码标准相反,请随时向我指出^^

2 个答案:

答案 0 :(得分:3)

我假设你想要的是这些顶点变量的getter。

这是因为您不应该尝试将这些功能设置为静态(从您试图调用它们的方式),请执行以下操作:

public Vector3 Vertex1()
{
    return vertex1;
}
public Vector3 Vertex2()
{
    return vertex2;
}
public Vector3 Vertex3()
{
    return vertex3;
}

如果您真正想要的是吸气剂,那么我建议您使用更明确的名称,例如GetVertex1,或者更好,将其设为属性,如下所示:

public Vector3 Vertex1 { get; private set; }

那么,property究竟是什么?这是获取或设置数据的更好方法。

在此,我们将public指定为顶点的访问级别,以便公开访问 Vertex1(您可以获取类的外部顶点的值)。像这样:

Vector3 vertex = triangle.Vertex1;

在这种特殊情况下,您可能希望或不希望来自课外的其他人更改顶点。如果您不希望他们更改它,请将属性的 setter 指定为private,这样您就只能在课程中更改Vertex1的值

你会这样使用它:

TriXYZ myTriangle = new TriXYZ(pos1, pos2, pos3, depth);
Vector3 vertex1 = myTriangle.Vertex1;

答案 1 :(得分:0)

尝试查看this C# Source file。它基本上就是你要做的事情。