/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:设计平面坐标点类,计算两点之间距离、到原点距离、关于坐标轴和原点的对称点等
* 作 者: 张艳明
* 完成日期: 2012 年 03 月 27 日
* 版 本 号: V1.0
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:
* 程序输出:
* 程序头部的注释结束
*/
- #include<iostream>
- #include<cmath>
- using namespace std;
- enum SymmetricStyle { axisx,axisy,point};//分别表示按x轴, y轴, 原点对称
- class CPoint
- {
- private:
- mutable double x; // 横坐标
- mutable double y; // 纵坐标
- public:
- CPoint(double xx=0,double yy=0);
- double Distance(CPoint p) const; // 两点之间的距离(一点是当前点,另一点为参数p)
- double Distance0() const; // 到原点的距离
- CPoint SymmetricAxis(SymmetricStyle style) const; // 返回对称点
- void input(); //以x,y 形式输入坐标点
- void output(); //以(x,y) 形式输出坐标点
- };
- int main()
- {
- CPoint c1,c2;
- c1.input();
- cout<<c1.Distance0()<<endl;
- c2.input();
- cout<<c1.Distance(c2)<<endl;
- c1.SymmetricAxis(axisx);
- cout<<endl;
- return 0;
- }
- CPoint::CPoint(double xx,double yy)
- {
- x=xx;
- y=yy;
- }
- void CPoint::input()
- {
- bool found;
- found=true;
- cout<<"请您输入一个点的横纵坐标:(以“x,y”的形式输入)";
- char m;
- while(found)
- {
- cin>>x>>m>>y;
- if(m!=',')
- {
- cout<<"您输入的格式不正确,请从新输入。";
- }
- else
- {
- found=false;
- }
- }
- }
- void CPoint::output() //以(x,y) 形式输出坐标点
- {
- cout<<"("<<x<<","<<y<<")"<<endl;
- }
- double CPoint::Distance0() const
- {
- double d;
- d=sqrt(x*x+y*y);
- cout<<"点("<<x<<","<<y<<")"<<"到原点的距离为:";
- return d;
- }
- double CPoint::Distance(CPoint p) const
- {
- double d;
- d=sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y));
- cout<<"点p("<<p.x<<","<<p.y<<")"<<"与点q("<<x<<","<<y<<")的距离为:";
- return d;
- }
- CPoint CPoint::SymmetricAxis(SymmetricStyle style) const // 返回对称点
- {
- switch(style)
- {
- case axisx:
- cout<<"点("<<x<<","<<y<<")"<<"关于x轴对称的点为:";
- x=-x;
- cout<<"("<<x<<","<<y<<")";
- break;
- case axisy:
- cout<<"点("<<x<<","<<y<<")"<<"关于y轴对称的点为:";
- y=-y;
- cout<<"("<<x<<","<<y<<")";
- break;
- case point:
- cout<<"点("<<x<<","<<y<<")"<<"关于原点对称的点为:";
- x=-x;
- y=-y;
- cout<<"("<<x<<","<<y<<")";
- break;
- }
- return 0;
- }