C # - пользовательский класс треугольника, вызов значений - PullRequest
3 голосов
/ 19 июля 2011

Я пытаюсь создать собственный класс для хранения трех позиций вершин, которые определяют треугольник для рисования и деления.Проблема, с которой я сталкиваюсь, заключается в том, чтобы убедиться, что я возвращаю правильные значения.

вот код, который у меня есть:

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;
        }

    }
}

Я создаю новый элемент треугольника, подобный этому:

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

поэтому, чтобы получить значение для позиций вершин, я вызываю класс следующим образом:

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

Моя проблема в том, что я не уверенесли это работает, и я не совсем уверен, как проверить это на данный момент, потому что здесь недостаточно, чтобы фактически заставить программу работать.Кажется ли, что теория, лежащая в основе этого, сработает?

Кроме того, как примечание, я программист-любитель, поэтому, если есть какие-то вопиющие проблемы, которые идут вразрез со стандартами кодирования, смелоукажите мне на них ^^

Ответы [ 2 ]

3 голосов
/ 19 июля 2011

Я предполагаю, что вы хотите получить эти вершинные переменные.

Это потому, что вы не должны пытаться сделать эти функции статичными (исходя из того, как вы пытаетесь их вызывать), вместо этого сделайте следующее:

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

Если вам действительно нужны геттеры, то я бы порекомендовал получить более явное имя, например GetVertex1, или даже лучше, указать его как свойство , например:

public Vector3 Vertex1 { get; private set; }

Итак, что же такое свойство ? Это просто лучший способ получить или установить данные.

Здесь мы указываем public как уровень доступа к вершине, так что Vertex1 может быть доступным публично (вы можете получить значение вершины снаружи класса). Вот так:

Vector3 vertex = triangle.Vertex1;

В этой конкретной ситуации вы можете или не хотите, чтобы другие люди из-за пределов класса изменили вершину. Если вы не хотите, чтобы они меняли его, вы указываете setter свойства равным private, так что вы можете изменять только значение Vertex1 в классе.

Вы бы использовали это так:

TriXYZ myTriangle = new TriXYZ(pos1, pos2, pos3, depth);
Vector3 vertex1 = myTriangle.Vertex1;
0 голосов
/ 19 июля 2011

Попробуйте посмотреть этот исходный файл C # .По сути, это то, что вы пытаетесь сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...