#include <iostream>
#include <math.h>
using namespace std;
class Rectangle
{
public:
Rectangle(float *x,float *y)
{
setCoordinate(x,y);
}
void setCoordinate(float *x,float *y) //设置坐标
{
for(int i=0;i<4;i++)
{
if((x[i]<=0.0)||(x[i]>20.0)||(y[i]<=0.0)||(y[i]>20.0))
{
cout<<"有错误,请重新输入\n";
break;
}
else
X[i]=x[i];
Y[i]=y[i];
}
if( ( (Y[0]-Y[1])*(Y[2]-Y[1])+(X[0]-X[1])*(X[2]-X[1]) )!=0)
cout<<"该四边形不是长方形\n";
else if
( ((Y[1]-Y[0])*(Y[1]-Y[0])+(X[1]-X[0])*(X[1]-X[0]))!=((Y[3]-Y[2])*(Y[3]-Y[2])+(X[3]-X[2])*(X[3]-X[2])) )
cout<<"该四边形不是长方形\n";
*d=0;
}
//获得长
float getLength()
{
float length,temp1,temp2;
temp1=pow((Y[1]-Y[0])*(Y[1]-Y[0])+(X[1]-X[0])*(X[1]-X[0]),0.5);
temp2=pow((Y[2]-Y[1])*(Y[2]-Y[1])+(X[2]-X[1])*(X[2]-X[1]),0.5);
if(temp1>temp2)
length=temp1;
else
length=temp2;
return length;
}
//获得宽
float getWidth()
{
float width,temp1,temp2;
temp1=pow((Y[1]-Y[0])*(Y[1]-Y[0])+(X[1]-X[0])*(X[1]-X[0]),0.5);
temp2=pow((Y[2]-Y[1])*(Y[2]-Y[1])+(X[2]-X[1])*(X[2]-X[1]),0.5);
if(temp1>temp2)
width=temp2;
else
width=temp1;
return width;
}
//计算周长
float getPerimeter()
{
return (2*getLength()+2*getWidth());
}
//计算面积
float getArea()
{
return (getLength()*getWidth());
}
//判断是否是正方形
void guessSquare()
{
if((getWidth()==0)||(getLength()==0))
cout<<"无法判断";
else if(getWidth()==getLength())
{
cout<<"该图是正方形\n";
}
else
{
cout<<"该图不是正方形\n";
}
}
private:
float X[4],Y[4],*d;
};
int main()
{
int i;
float x[4],y[4];
float *d=a;
float *p=x,*q=y; //指针指向数组
cout<<"从长方形左上角开始顺时针输入坐标(坐标在第一象限且小于等于20\n";
for (i=0;i<4;i++)
{
cin>>x[i];//输入数组
cin>>y[i];
}
if(a!=0)
Rectangle nb(p,q);//给类成员
cout<<"长为:"<<nb.getLength()<<endl;
cout<<"宽为:"<<nb.getWidth()<<endl;
nb.guessSquare();
return 0;
}
之前刚写过这个,可以参考一下
#include <iostream>
using namespace std;
typedef struct _POINT
{
double x,y;
}POINT;
class Rectange
{
POINT LT;
POINT LB;
POINT RT;
POINT RB;
public:
Rectange() {}
bool isValid(POINT pt)
{
if(pt.x <= 0 || pt.x > 20)
return false;
if(pt.y <= 0 || pt.y > 20)
return false;
return true;
}
bool SetPoints(POINT lt,POINT lb,POINT rt,POINT rb)
{
if(!isValid(lt))
return false;
if(!isValid(lb))
return false;
if(!isValid(lt))
return false;
if(!isValid(lt))
return false;
//
if(lt.x != lb.x)
return false;
if(lt.y != rt.y)
return false;
if(lb.y != rb.y)
return false;
if(rt.x != rb.x)
return false;
//
if(rt.x - lt.x != rb.x - lb.x)
return false;
if(rb.y - rt.y != lb.y - lt.y)
return false;
LT = lt;
LB = lb;
RT = rt;
RB = rb;
}
bool square()
{
if(length() == width())
return true;
return false;
}
double length() {return RT.x-LT.x > RT.y-RB.y ? RT.x-LT.x:RT.y-RB.y;}
double width() {return RT.x-LT.x > RT.y-RB.y ? RT.y-RB.y:RT.x-LT.x;}
double perimeter() {return length()*2+width()*2;}
double area() {return length()*width();}
};
int main()
{
Rectange r;
POINT pts[4];
pts[0].x = 5;
pts[0].y = 10;
pts[1].x = 5;
pts[1].y = 5;
pts[2].x = 10;
pts[2].y = 10;
pts[3].x = 10;
pts[3].y = 5;
r.SetPoints(pts[0],pts[1],pts[2],pts[3]);
cout<<r.perimeter()<<endl;
cout<<r.area()<<endl;
return 0;
}
if( ( (Y[0]-Y[1])(Y[2]-Y[1])+(X[0]-X[1])(X[2]-X[1]) )!=0)
cout<<"该四边形不是长方形\n";
这是啥公式,凭什么不这样它就是个长方形了
长方形的特点是对边相等,其中一个角是直角,你判断的代码呢