| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 397 人关注过本帖
标题:各位大虾们,帮小弟看看这个怎么回事
只看楼主 加入收藏
cnsongzi
Rank: 1
来 自:安徽合肥
等 级:新手上路
帖 子:27
专家分:6
注 册:2010-10-2
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:4 
各位大虾们,帮小弟看看这个怎么回事
我是想求出两条直线(取的直线相交)的交点,但是得不到想要的结果,这个自己真不知道怎么办了,特向各位大虾求助,谢谢各位!


代码如下:

程序代码:
#include <iostream>
#include <cmath>
using namespace std;
class point{

public:
    point(int xx,int yy)
    {
        x=xx;y=yy;
    }
    point(){};
    ~point(){}

    point(point &p)
    {
        x=p.x;y=p.y;
    }

    int getx(){return x;}
    int gety(){return y;}

private:
    int x,y;
};


class line{

public:

    line(point pt1,point pt2):p1(pt1),p2(pt2)
    {
        double k=(p2.gety()-p1.gety())/(p2.getx()-p1.getx());    //求出斜率K
        double b=(p1.gety()-k*p1.getx());            //求出b
    }
    line(){}

    line(line &l):p1(l.p1),p2(l.p2)
    {
        k=l.k;b=l.b;
    }

friend point jd(line &l1,line &l2)
{
    point p((l1.b-l2.b)/(l2.k-l1.k),l1.k*(l1.b-l2.b)/(l2.k-l1.k));

    return p;
}



private:    
    point p1,p2;
    double k,b;
};





void main()
{
    point p1(0,0),p2(2,2),p3(0,2),p4(2,0);   //初始化4点
    line l1(p1,p2),l2(p3,p4);        //两条不相交的直线
    point px(jd(l1,l2));
    cout<<px.getx()<<"\t"<<px.gety()<<endl;
}


[ 本帖最后由 cnsongzi 于 2011-5-20 20:36 编辑 ]
2011-05-20 20:35
hyp_eagle
Rank: 2
等 级:论坛游民
帖 子:11
专家分:21
注 册:2010-10-6
收藏
得分:3 
double k=(p2.gety()-p1.gety())/(p2.getx()-p1.getx());    //求出斜率K
double b=(p1.gety()-k*p1.getx());            //求出b
这两句的 double 应该去掉;
还有就是 友元函数的 声明放在类得里面,但定义最好放在类得外面;
2011-05-20 22:45
lucky563591
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:765
专家分:2103
注 册:2009-11-18
收藏
得分:3 
我直接用面向过程的方法,列方程组解。
2011-05-21 07:57
linw1225
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
帖 子:110
专家分:145
注 册:2011-4-7
收藏
得分:3 
友元函数的那边总觉得像函数重载一样,实话,我也不太懂楼主的代码行不行,总觉的你的想法怪怪的。
按我的想法,代码如下(希望对你有帮助):
程序代码:
#include<iostream>
using namespace std;
class Line  //定义直线类
{
    float a,  //直线y=ax+b中的a
    float b;  //直线y=ax+b中的b
public:
    void print()  //输出直线方程的函数
    {
        cout<<"y="<<a<<"x+"<<b<<endl;
    }
    Line(float m,float n)  //构造函数
    {
        a=m;
        b=n;
    }
    friend void setPoint(Line &L1,Line &L2); //求交点的友元函数的声明
};
void setPoint(Line &L1,Line &L2)  //友元函数的定义
{
    double x,y;
    if(L1.a!=L2.a)
    {
    x=(L2.b-L1.b)/(L1.a-L2.a);
    y=L1.a*x+L1.b;
    cout<<"x="<<x<<endl;
    cout<<"y="<<y<<endl;
    }
    else
        cout<<"两直线平行无交点"<<endl;
}
int main()
{
    float a1,b1,a2,b2;
    cout<<"输入第一个直线的参数:";
    cin>>a1>>b1;
    cout<<"输入另一个直线的参数:";
    cin>>a2>>b2;
    Line L1(a1,b1);
    Line L2(a2,b2);
    L1.print();
    L2.print();
    setPoint(L1,L2);
    return 0;
}

Einmal ist keinmal
2011-05-21 20:24
cnsongzi
Rank: 1
来 自:安徽合肥
等 级:新手上路
帖 子:27
专家分:6
注 册:2010-10-2
收藏
得分:0 
回复 2楼 hyp_eagle
灰常感谢,好了!
2011-05-22 21:19
快速回复:各位大虾们,帮小弟看看这个怎么回事
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030356 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved