C++写的点线面之间的关系

C++写的点线面之间的关系C++写的点线面之间的关系

1 #include <iostream>
  2 #include <cmath>
  3 using namespace std;
  4 
  5 class Point
  6 {
  7 public:
  8     Point(){}
  9     Point(int x, int y){pointX = x; pointY = y;}
 10     //Point(Point &p){pointX = p.pointX; pointY = p.pointY;}
 11     void setPointValue();
 12     float getX(){return pointX;}
 13     float getY(){return pointY;}
 14 private:
 15     float pointX;
 16     float pointY;
 17 };
 18 
 19 void Point::setPointValue()
 20 {
 21     cout << "请输入点的坐标<x, y>: ";
 22     cin >> pointX >> pointY;
 23 }
 24 
 25 class Line
 26 {
 27 public:
 28     Line(){}
 29     Line(Point p, float x):point(p), k(x){}
 30     Point getPoint(){return point;}
 31     float getK(){return k;}
 32     void setLineValue();
 33 private:
 34     Point point;
 35     float k;
 36 };
 37 
 38 void Line::setLineValue()
 39 {
 40     point.setPointValue();
 41     cout << "请输入直线的斜率k的值: ";
 42     cin >> k;
 43 }
 44 
 45 
 46 class Circle
 47 {
 48 public:
 49     Circle(){}
 50     Circle(Point p, float r):point(p), Radius(r){}
 51     Point getPoint(){return point;}
 52     float getRadius(){return Radius;}
 53     void setCircleValue();
 54 public:
 55     Point point;
 56     float Radius;
 57 };
 58 
 59 void Circle::setCircleValue()
 60 {
 61     point.setPointValue();
 62     cout << "请输入圆的半径的值: ";
 63     cin >> Radius;
 64 }
 65 
 66 class OptRelation
 67 {
 68 public:
 69     OptRelation(){}
 70     void setValue();
 71     void LinesRelation();
 72     void LineCircleRelation();
 73     void CirclesRelation();
 74     void PointCircleRelation();
 75 private:
 76     Point pValue;
 77     Line lValue;
 78     Line lValue2;
 79     Circle cValue;
 80     Circle cValue2;
 81 };
 82 
 83 void OptRelation::setValue()
 84 {
 85     cout << "请输入点的信息" << endl;
 86     pValue.setPointValue();
 87     cout << "请输入第一条直线的信息" << endl;
 88     lValue.setLineValue();
 89     cout << "请输入第二条直线的信息" << endl;
 90     lValue2.setLineValue();
 91     cout << "请输入第一个圆的信息" << endl;
 92     cValue.setCircleValue();
 93     cout << "请输入第二个圆的信息" << endl;
 94     cValue2.setCircleValue();
 95 }
 96 
 97 void OptRelation::LinesRelation()
 98 {
 99     if (lValue.getK() * lValue2.getK() == -1)
100         cout << "两条直线垂直"  << endl;
101     else if (lValue.getK() == lValue2.getK()) 
102         cout << "两条直线平行" << endl;
103     else
104         cout << "两条直线相交" << endl;
105 }
106 
107 void OptRelation::LineCircleRelation()
108 {
109     float c = lValue.getPoint().getY() - lValue.getK() * lValue.getPoint().getX();
110     float distance = abs( lValue.getK() * cValue.getPoint().getX() - cValue.getPoint().getY() + c)  / (float)sqrt(lValue.getK() * lValue.getK() + 1);
111 
112     if (distance == cValue.getRadius())
113         cout << "直线与圆相切" << endl;
114     if (distance < cValue.getRadius())
115         cout << "直线与圆相交" << endl;
116     else
117         cout << "直线与圆相离" << endl;
118 }
119 
120 void OptRelation::CirclesRelation()
121 {
122     float yDistPow = (cValue2.getPoint().getY()- cValue.getPoint().getY()) * (cValue2.getPoint().getY() - cValue.getPoint().getY());
123     float xDistPow = (cValue2.getPoint().getX() - cValue.getPoint().getX()) * (cValue2.getPoint().getX() - cValue.getPoint().getX());
124     float pointDist = sqrt(yDistPow + xDistPow);
125     bool pointEqual = (cValue.getPoint().getX() == cValue2.getPoint().getX()) && (cValue.getPoint().getY() == cValue2.getPoint().getY() );
126     if ( pointDist == (cValue.getRadius() + cValue2.getRadius()) )
127         cout << "两圆相切" << endl;
128     else if( pointDist < (cValue.getRadius() + cValue2.getRadius()) )
129         cout << "两圆相交" << endl;
130     else if ((pointDist == cValue.getRadius()) && ( pointEqual == true ))
131         cout << "两圆重叠" << endl;
132     else 
133         cout << "两圆相离" << endl;
134 }
135 
136 void OptRelation::PointCircleRelation()
137 {
138     float xDistPow = (pValue.getX() - cValue.getPoint().getX()) * (pValue.getX() - cValue.getPoint().getX());
139     float yDistPow = (pValue.getY() - cValue.getPoint().getY()) * (pValue.getY() - cValue.getPoint().getY());
140     float pointDist = sqrt(xDistPow + yDistPow);
141     
142     if (pointDist == cValue.getRadius())
143         cout << "点在圆上" << endl;
144     else if (pointDist < cValue.getRadius())
145         cout << "点在圆内" << endl;
146     else
147         cout << "点在圆外" << endl;
148 }
149 
150 
151 
152 int main(void)
153 {
154     OptRelation opt;
155     opt.setValue();
156     opt.CirclesRelation();
157     opt.LineCircleRelation();
158     opt.LinesRelation();
159     opt.PointCircleRelation();
160 
161     return 0;
162 }

C++点线面

原文链接: https://www.cnblogs.com/smileleeboo/archive/2013/06/13/smileleeboo.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/92022

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月10日 上午1:28
下一篇 2023年2月10日 上午1:28

相关推荐