В Line.h
у меня есть класс Line
и функция publi c под названием length()
, которая измеряет расстояние между всеми точками в векторе (в частности, points[10]
).
В Point.h
, у меня есть функция с именем distance()
, которая измеряет расстояние между двумя точками на графике.
Можно ли использовать функцию distance()
внутри length()
для измерения сумма расстояния между каждой точкой?
Есть несколько проблем, так как я не закончил весь код для этого назначения, это был только текущий, на котором я застрял.
//Line.cpp
#include "Point.h"
#include "FloatCompare.h"
#include "Line.h"
#include <stdexcept>
//default constructor
Line::Line(){
this->index = 0;
}
//destructor
Line::~Line(){
}
/**
* Add a point to the end of our line. If the line contains
* ten points then throw an out_of_range exception.
*/
/**
*
if index == 10 then
throw out-of-range exception
else
point[index] = p argument
index++ **/
void push_back(const Point& p){
unsigned int index =0;
Point points[10];
if (index == 10){
throw std::out_of_range ("Out of range.");}
else {
points[index] = p;
index++;}
}
/**
* Clear the list of points
*/
void clear(){
unsigned int index = 0;
}
/**
* Return the length of the line. The length is calculated as
* the sum of the distance between all points in the line.
*/
//this is where I am having my issues.
double length(){
float total = 0.0;
Point points[10];
for (unsigned int index = 0;index < 10; index++){
total += Point distance(points &index);
}
return total;
}
Line.h
содержит конструкторы для Line.cpp
/*
* Line.h
*
*/
#ifndef LINE_H_
#define LINE_H_
#include "Point.h"
class Line {
public:
/**
* Constructor and destructor
*/
Line();
virtual ~Line();
/**
* Add a point to the end of our line. If the line contains
* ten points then throw an out_of_range exception.
*/
void push_back(const Point& p);
/**
* Clear the list of points
*/
void clear();
/**
* Return the length of the line. The length is calculated as
* the sum of the distance between all points in the line.
*/
double length();
private:
unsigned int index;
Point points[10];
};
#endif /* LINE_H_ */
У меня такое ощущение, что я могу ошибаться, и мне, вероятно, не нужно вызывать функцию distance()
. Пожалуйста, дайте мне знать, если мне нужно включить любой другой код, .h
или .cpp
файлов.
Редактировать - вот файлы Point.h и Point. cpp
Point .h
#ifndef POINT_H_
#define POINT_H_
#include <iostream>
class Point {
public:
/**
* Constructor and destructor
*/
Point();
Point(const double x, const double y);
virtual ~Point();
/**
* Get the x value
*/
double getX() const;
/**
* Get the y value
*/
double getY() const;
/**
* Return the distance between Points
*/
double distance(const Point &p) const;
/**
* Output the Point as (x, y) to an output stream
*/
friend std::ostream& operator <<(std::ostream &out, const Point &point);
/**
* Declare comparison relationships
*/
friend bool operator ==(const Point &lhs, const Point &rhs);
friend bool operator <(const Point &lhs, const Point &rhs);
/**
* Declare math operators
*/
friend Point operator +(const Point &lhs, const Point &rhs);
friend Point operator -(const Point &lhs, const Point &rhs);
/**
* Copy constructor
*/
Point(const Point& t);
/**
* Copy assignment
*/
Point &operator =( const Point& rhs );
private:
double x;
double y;
};
#endif /* POINT_H_ */
Точка. cpp
#include "Point.h"
#include "FloatCompare.h"
#include "Line.h"
#include <cmath>
/** default constructor **/
Point::Point(){
// TODO Auto-generated constructor stub
this->x = 0.0;
this->y = 0.0;
}
//Overloaded Constructor
Point::Point(const double x, const double y){
// TODO Auto-generated constructor stub
this->x = x;
this->y = y;
}
/**
* Copy constructor */
Point::Point(const Point & t){
x = t.x;
y = t.y;
}
//Default destructor
Point::~Point() {
// TODO Auto-generated destructor stub
}
//Retrieve X value
double Point::getX() const {
return x;
}
//Retrieve Y value
double Point::getY() const {
return y;
}
//Function for finding distance between 2 points on a graph. Using ((x-p.x)^2+(y-p.y)^2)^1/2
double Point::distance(const Point &p) const{
return sqrt( pow((x - p.getX()),2) + pow((y - p.getY()),2));
}
/**
* Output the Point as (x, y) to an output stream
*/
std::ostream& operator <<(std::ostream &out , const Point &point){
out <<'(' << point.x << ',' << ' ' << point.y << ')';
return out;
}
/**
* Declare comparison relationships
*/
//Equal to
bool operator ==(const Point &lhs, const Point &rhs){
return essentiallyEqual(lhs.getX(), rhs.getX()) && essentiallyEqual(lhs.getY(), rhs.getY());
}
//Comparison less than
bool operator <(const Point &lhs, const Point &rhs){
//P1 < P2 if P1.x < P2.x || (P1.x == P2.x && P1.y < P2.y).
return definitelyLessThan(lhs.getX(), rhs.getX()) || (essentiallyEqual(lhs.getX(), rhs.getX()) && definitelyLessThan(lhs.getY(), rhs.getY()));
}
/**
* Declare math operators
*/
//Addition Operator
Point operator +(const Point &lhs, const Point &rhs){
return Point(lhs.x + rhs.x, lhs.y + rhs.y);
}
//Subtraction Operator
Point operator -(const Point &lhs, const Point &rhs){
return Point(lhs.x - rhs.x, lhs.y - rhs.y);
}
/**
* Copy assignment
*/
Point & Point::operator =(const Point& rhs){
x= rhs.x;
y= rhs.y;
return *this;
}