Как нарисовать траекторию движения снаряда в c#. NET Framework консольного приложения? - PullRequest
0 голосов
/ 24 апреля 2020

Ссылка на GitHub: https://github.com/pthdaniel/ProjectileMotion/tree/master

Эй, я работал над проектом, в котором мое приложение должно рассчитывать данные с начальной скоростью, углом и высотой движения, и теперь моя единственная проблема - путь, который делает снаряд. У меня была идея создать двумерный массив строк, чтобы имитировать его, но сама идея или мои вычисления неверны. Для массива я округляю данные двойного типа и затем приводю их к целым числам.

public Canvas(int height, int width)
    {
        this.height = height;
        this.width = width;
        board = new string[height+1, width+1]; //indexing needs more space

        for (int i = 0; i < height; i++)
        {
            for (int j = 0; j < width; j++)
            {
                board[i, 0] = "|";
                board[height - 1, j] = "-";
            }
        }
        board[height - 1, 0] = "O";
        board[(int)Math.Round(Program.p.Y0), 0] = "+";

        for (int j = 1; j < width; j++)
        {
            board[Program.p.OtherPosition(j), j] = "+";
        }
    }

Вот конструктор моего класса Canvas, который заполняет мою строку [,]. Program.p - это сам снаряд, имеющий такие атрибуты, как y0 , который является начальной высотой. OtherPosition принимает j для вычисления, где метод должен поместить символ *, где позиция x = j . Например:

public int OtherPosition(int position)
    {   
        y = y0 + v0y * (position / (2 * v0x)) - (g / 2) * Math.Pow(position / (v0x * 2), 2);

        return (int)(Math.Round(Program.p.Ymax, 1) * 2)+1- 2 * ((int)Math.Round(y));
    }

Генерация холста выглядит следующим образом:

static void GenerateCanvas(Projectile p)
    {
        int height = (int)(Math.Round(p.Ymax,5)*2);
        int width = (int)(Math.Round(p.Xmax,5)*2);
        board = new Canvas(height, width);
    }

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

...