几何问题知识点积累

给定两点,让你求其Ax+By+C的形式,代码如下:

//Ax+By+C=0
double getDist(Point a,Point b)
{
    double A=a.y-b.y;
    double B=b.x-a.x;
    double C=a.x*b.y-a.y*b.x;
    return get(A,B,C);
}


 

点到Ax+By+C的距离代码:

//点x,y到直线Ax+By+C的距离
double get(double A,double B,double C)
{
    double k=fabs(A*x+B*y+n*C);
    double v=sqrt(A*A+B*B);
    return k/v;
}


 直线p1p2和直线p3p4判断共线:由叉积的原理知道如果p1,p2,p3共线的话那么(p2-p1)X(p3-p1)=0。因此如果p1,p2,p3共线,p1,p2,p4共线,那么两条直线共线。

 if(Cross(p2-p1,p3-p1)==0&&Cross(p2-p1,p4-p1)==0)

由向量可以判断出两直线是否平行。如果两直线平行,那么向量p1p2、p3p4也是平等的。即((p1.x-p2.x)*(p3.y-p4.y)-(p1.y-p2.y)*(p3.x-p4.x))==0说明向量平等。

if(Cross(p2-p1,p4-p3)==0)


求两直线(p1p2和p3p4)相交的交点。假设交点为p0(x0,y0)。则有:

(p1-p0)X(p2-p0)=0

(p3-p0)X(p2-p0)=0

展开后即是

(y1-y2)x0+(x2-x1)y0+x1y2-x2y1=0

(y3-y4)x0+(x4-x3)y0+x3y4-x4y3=0

将x0,y0作为变量求解二元一次方程组。

假设有二元一次方程组

a1x+b1y+c1=0;

a2x+b2y+c2=0

那么

x=(c1*b2-c2*b1)/(a2*b1-a1*b2);

y=(a2*c1-a1*c2)/(a1*b2-a2*b1);

因为此处两直线不会平行,所以分母不会为0。

//求解二元一次方程
Point solve(double a1,double b1,double c1,double a2,double b2,double c2)
{
    Point p;
    p.x=(c1*b2-c2*b1)/(a2*b1-a1*b2);
    p.y=(a2*c1-a1*c2)/(a1*b2-a2*b1);
    return p;
}
int main()
{
        double a1,a2,b1,b2,c1,c2;
        a1=p1.y-p2.y;b1=p2.x-p1.x;c1=p1.x*p2.y-p2.x*p1.y;
        a2=p3.y-p4.y;b2=p4.x-p3.x;c2=p3.x*p4.y-p4.x*p3.y;
        Point p0=solve(a1,b1,c1,a2,b2,c2);
        printf("POINT %.2f %.2f\n",p0.x,p0.y);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值