簡體   English   中英

c ++ 查找2點之間的距離

[英]c++ finding distance between 2 points

在我的測試程序中,我有兩個點,我想用我的 distancefrom 找到它們之間的距離。 但我得到的答案是 0。

  1. 為什么它給0?
  2. 我該如何解決?

    點<2> v1; // 這應該有 {0.0, 0.0} Point<2> v3 { list{2.0,3.0} }; 浮動 f = v1.distanceFrom(v3); cout << f << endl;

我有一個 point.h 文件。

#ifndef POINT_H
#define POINT_H
#include <iostream>
#include <list>
#include <sstream>
#include <string>
using std::stringstream;





#include <cmath>


using namespace std;

template<unsigned short n>
class Point {

public:
    list <float> coords = {0.0};

    Point <n>() = default;


    Point <n>(list<float> coords){
        if (coords.size()!=n) {
            throw string ("Vale koordinaatide arv");
        }
        this-> coords=coords;
        }



        string toString(){
            string sone;
            ostringstream ss;
            sone.append("(");
            auto it3= coords.begin();
            while ((it3) != coords.end()){  
                ss <<  (*it3);
                sone.append(ss.str());
                ss.str("");
                sone.append(",");
                ++it3;
                }
                sone.pop_back();
            sone.append(")");
            return sone;
        }



        float distanceFrom (Point <n> v){
            float s=0;
            list<float> coords;
            auto it1= coords.begin();
            auto it2= v.coords.begin();
            while ((it1) != coords.end()){  
                s+=(*it1 -*it2)*(*it1-*it2);
                it1++;
                it2++;
            }
        return sqrt(s);
        }
    friend std::ostream& operator <<(std::ostream& out, const Point<n>& v)
    {
        out << "("<<"Test"<<")";
        return out;
    }
};


#endif

首先, coords列表不知道您希望其大小為n 默認初始化后,其大小如下所示: 1

list <float> coords = {0.0};

構造它的正確方法是:

list <float> coords = list <float> (n, 0.0);

其次,在函數distanceFrom分配一個新coords

list<float> coords;

coords了您實際上要使用的點的真實coords 刪除該行,就可以了。

#include<iostream>
#include<cstdlib>
#include<cmath>

using namespace std;

class pointDistance{
    int x, y;
    public:
    pointDistance (int a, int b){
        x =a;
        y =b;
    }

    void pointShow(){
        cout<<"The Point is ("<<x<<","<<y<<")"<<endl;
    }
    friend void Distance(pointDistance , pointDistance);

};
//formula of distance between two points:
//d =((x1^2 - x2^2) + (y1^2 - y2^2))^1/2

void Distance(pointDistance o1, pointDistance o2)
{
    // pointDistance o3;
    int d1,d2;
    d1 = (o1.x -o2.x)*(o1.x -o2.x);
    d2 = (o1.y - o2.y)*(o1.y - o2.y);
    cout<<"So the distance between two point is "<< sqrt(d1+d2)<<endl;

}

int main(){
    pointDistance one(4,5);
    one.pointShow();

    pointDistance two(0,6);
    two.pointShow();

    Distance(one, two);
    

 return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM