Определение длины между векторами, дающими ошибочные результаты - PullRequest
0 голосов
/ 10 ноября 2019

Это начало моего кода, который должен быть присоединен к гораздо большему коду, где я должен использовать 3 вектора, чтобы определить, есть ли у меня треугольник, и если это так, вычислить область несколькими методами (например, по формуле Герона)для домашнего задания.

Мой главный вопрос заключается в том, что, учитывая приведенный ниже код, должны получиться стороны с длинами соответственно 5/4/3 ... почему я получаю результаты 4.6e-310 /6.9e-310 / 0.

Я знаю, что мой код может быть не очень красивым и может иметь грубые концептуальные ошибки, но я изучал C ++ только 3 недели после изучения Fortran в течение месяца .. ... и я чувствую себя супер потерянным, пытаясь это сделать.

#include <iostream>
#include <math.h>

// design vector class
class Vector {
    private:
    double Side1() {
        return sqrt(pow(p1x-p2x,2)+pow(p1y-p2y));
    }
    double Side2() {
        return sqrt(pow(p2x-p3x,2)+pow(p2y-p3y,2));
    }
    double Side3() {
        return sqrt(pow(p3x-p1x,2)+pow(p3y-p1y,2));
    }

    public:
        double p1x=1.0, p2x=4.0, p3x=4.0;
        double p1y=5.0, p2y=9.0, p3y=5.0;
};
// get length
int main() {
    double Side1, Side2, Side3;
    std::cout << "Side 1 length is " << Side1 << std::endl;
    std::cout << "Side 2 length is " << Side2 << std::endl;
    std::cout << "Side 3 length is " << Side3 << std::endl;
    return 0;
}

1 Ответ

2 голосов
/ 10 ноября 2019

В вашем коде есть пара ошибок:

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

class Vector {
    public:
    double Side1() {
        return sqrt(pow(p1x-p2x,2)+pow(p1y-p2y));
    }
    double Side2() {
        return sqrt(pow(p2x-p3x,2)+pow(p2y-p3y,2));
    }
    double Side3() {
        return sqrt(pow(p3x-p1x,2)+pow(p3y-p1y,2));
    }

    private:
        double p1x=1.0, p2x=4.0, p3x=4.0;
        double p1y=5.0, p2y=9.0, p3y=5.0;
};

Во-вторых, вам нужен объект типа Vector (потому что ваши функции не являются static членами этого класса). Затем для этого объекта вам нужно вызвать ваши методы.

int main() {
    Vector v; // create object
    std::cout << "Side 1 length is " << v.Side1() << std::endl; //note the call operator () 
    std::cout << "Side 2 length is " << v.Side2() << std::endl;
    std::cout << "Side 3 length is " << v.Side3() << std::endl;
    return 0;
}

В вашем текущем коде создаются 3 унифицированных double переменных, которые не имеют ничего общего с вашими функциями (они просто разделяют имя).

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