// 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;
}
不是啊 我运行的时候直接弹框报错啊