c++计算点到折线类线段的最短距离,请问哪里错了?

// 444.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include <iostream>

#include <cmath>

using namespace std;

class CPoint{

public:

CPoint(int xx=0,int yy=0){x=xx;y=yy;}

int getX(){return x;}

int getY(){return y;}

private:

int x;

int y;

};

class CLine{

public:

CLine(CPoint *pp,int nn){

n=nn;

p=new CPoint[n]; //动态CPoint数组构成折线类

k=new double[n-1];

for(int i=0;i<n;i++){

p[i]=pp[i];

int x=p[i].getX()-p[i+1].getX();

int y=p[i].getY()-p[i+1].getY();

for(int j=0;j<n-1;j++)

k[j]=y/x;

//len[i]=sqrt(x*x+y*y);}}

}

}

~CLine(){

delete[]p;

delete[]k;}

void disdance(CPoint &p3){

double min=0;

double *d=new double[n];

for(int j=0;j<n;j++)

{

//cout<<j<<":"<<endl;

double pedalX;

if(k[j]==0)

pedalX=p[j].getX();

else

pedalX=(k[j]*k[j]*p[j].getX()-k[j]*p[j].getY()+p3.getX()+k[j]*p3.getY())/(k[j]*k[j]+1); //计算垂足x坐标

if((pedalX<p[j].getX()&&pedalX>p[j+1].getX())||(pedalX>p[j].getX()&&pedalX<p[j+1].getX())){

d[j]=fabs(k[j]*(p3.getX()-p[j].getX())+p[j].getY()-p3.getY())/sqrt(k[j]*k[j]+1);

//cout<<"the pedal is in the line"<<endl;

//cout<<j<<"the distance is:"<<dd<<endl;

}

else

{

//cout<<"the pedal is not in the line"<<endl;

int x1=p[j].getX()-p3.getX();

int y1=p[j].getY()-p3.getY();

double d1=sqrt(x1*x1+y1*y1);

int x2=p[j+1].getX()-p3.getX();

int y2=p[j+1].getY()-p3.getY();

double d2=sqrt(x2*x2+y2*y2);

if(d1>d2)

d[j]=d2;

//cout<<d2<<endl;

else

d[j]=d1;

//cout<<d1<<endl;

}

if(d[j]<d[j-1])

min=d[j];

}

delete[]d;

cout<<"the minimum distance is:"<<min<<endl;

}

private:

CPoint *p;

int n;

double* k;

};

int main(int argc, char* argv[])

{

CPoint p[3]={CPoint(0,0),CPoint(1,1),CPoint(2,0)};

CPoint p0(1,0);

CLine l1(p,3);

//cout<<"the point is:"<<"("<<p0.getX()<<","<<p0.getY()<<")"<<endl;

//l1.disdance(p0);

return 0;

}

(0,1)(2,3)(2,3)(4,5)(8,9)(0,1)(7,7)(8,9)循环一下找只出现一次的坐标就可以了.比如(0,1),如果没有其他的坐标和他相等,那么就是新线段的起点,否则的话找下一个追问

不是啊 我运行的时候直接弹框报错啊

温馨提示:答案为网友推荐,仅供参考
相似回答