zoukankan      html  css  js  c++  java
  • 定义点类和直线类,计算两条直线的交点

    定义点类和直线类,计算两条直线的交点。

    要求利用 Point 的组合完成 class Line ,也就是说需要利用两个点构成一条直线;

    其次题目保证两直线必定相交,也就是说我们直接利用公式求解即可;

    代码如下:

     1 #include<iostream>
     2 
     3 using namespace std;
     4 
     5 class Point
     6 {
     7     private:
     8         double x , y;
     9     public:
    10         Point(double x_ = 0, double y_ = 0):x(x_),y(y_) {}
    11         Point(const Point & rhs);
    12         ~Point();
    13         Point & operator = (const Point & rhs);
    14         friend ostream & operator <<(ostream & os , const Point & rhs);
    15         friend class Line;
    16 };
    17 
    18 Point::Point(const Point & rhs)
    19 {
    20     if(this != &rhs)
    21     {
    22         x = rhs.x;
    23         y = rhs.y;
    24     }
    25 }
    26 
    27 Point::~Point()
    28 {
    29     cout<<"~ ~ ~Point X , Y "<<x<<" , "<<y<<endl;
    30 }
    31 
    32 Point & Point::operator = (const Point & rhs)
    33 {
    34     x = rhs.x; 
    35     y = rhs.y; 
    36     return (*this);
    37 } 
    38 
    39 ostream & operator <<(ostream & os , const Point & rhs)
    40 {
    41     os<<"("<<rhs.x<<" , "<<rhs.y<<")"<<endl;
    42     return (os);
    43 }
    44 
    45 class Line
    46 {
    47     private:
    48         Point point0 , point1 ;
    49     public:
    50         Line(double x0 = 0,double y0 = 0,double x1 = 0,double y1 = 0):point0(x0,y0),point1(x1,y1) { }
    51         Line(const Line & rhs);
    52         ~Line();
    53         Point Jiaodian(const Line zhi1);
    54 };
    55 
    56 Line::Line(const Line & rhs)
    57 {
    58     if(this != &rhs)
    59     {
    60         point0 = rhs.point0;
    61         point1 = rhs.point1;
    62     }
    63 }
    64 
    65 Line::~Line() 
    66 {
    67     cout<<"~ ~ ~Line Point0 , Point1"<<endl;
    68 }
    69 
    70 Point Line::Jiaodian( const Line zhi1)
    71 {
    72     double a0,a1,b0,b1,c0,c1;
    73     double xx , yy ;
    74     a0 = point1.x - point0.x;
    75     b0 = point1.y - point0.y;
    76     c0 = point0.y*point1.x - point1.y*point0.x;
    77     a1 = zhi1.point1.x - zhi1.point0.x;
    78     b1 = zhi1.point1.y - zhi1.point0.y;
    79     c1 = zhi1.point0.y*zhi1.point1.x - zhi1.point1.y*zhi1.point0.x;
    80     xx = (c1*a0 - c0*a1)/(b0*a1 - a0*b1);
    81     yy = (c0*b1 - c1*b0)/(a0*b1 - a1*b0);
    82     return   Point(xx , yy);
    83 }
    84 
    85 int main()
    86 {  
    87     int a,b,c,d;
    88     cin>>a>>b>>c>>d; 
    89     Line L1(a,b,c,d) ;
    90     cin>>a>>b>>c>>d;
    91     Line L2(a,b,c,d) ;
    92     Point aa = L1.Jiaodian(L2); 
    93     cout<<"交点为 :"<<aa;
    94     return 0;
    95 }
    View Code

    测试例子:

    0 0 2 2

    0 2 2 0

    输出:

    ~ ~ ~Line Point0 , Point1

    ~ ~ ~Point X , Y 2 , 0

    ~ ~ ~Point X , Y 0 , 2

    交点为 :(1 , 1)

    ~ ~ ~Point X , Y 1 , 1

    ~ ~ ~Line Point0 , Point1

    ~ ~ ~Point X , Y 2 , 0

    ~ ~ ~Point X , Y 0 , 2

    ~ ~ ~Line Point0 , Point1

    ~ ~ ~Point X , Y 2 , 2

    ~ ~ ~Point X , Y 0 , 0

  • 相关阅读:
    T-Sql语法:行转列(pivot)和列转行(unpivot)
    T-Sql语法:GROUP BY子句GROUPING SETS、CUBE、ROLLUP
    Asp.net使用Plupload上传组件详解
    form标签属性enctype之multipart/form-data请求详解
    基于Owin Oauth2构建授权服务器
    AutoFac使用~IOC容器(DIP,IOC,DI)
    第二节:模型(Models)和管理后台(Admin site)
    第三节:视图(Views)和模板(Templates)
    THINKPHP 3.2 PHP SFTP上传下载 代码实现方法
    Linux 上导出导入sql文件到服务器命令
  • 原文地址:https://www.cnblogs.com/2015-16/p/12179992.html
Copyright © 2011-2022 走看看