zoukankan      html  css  js  c++  java
  • 求两直线交点的一般做法

    /**
    *假设有两条直线分别为m、n。直线m的直线方程为F(x,y)=a1*x+b1*y+c1=0。
    设直线m的两端点为(x1,y1)、(x2,y2),代入方程得
    a1*x1+b1*y1+c1=0,a1*x2+b1*y2+c1=0,联立解可得 a1=y1-y2,b1=x2-x1,c1=x1*y2-x2*y1。
    设直线n的两端点分别为(x3,y3)、(x4,y4),同理可得a2=y3-y4,b2=x4-x3,c2=x3*y4-x4*y3。
    又因为两直线相交即 a1*x+b1*y+c1=a2*x+b2*y+c2
    可解得x=c2*b1-b2*c1/D,y=c1*a2-c2*a1/D (D=a1*b2-a2*b1)
    */
    #include <iostream>
    #include<cstdio>
    using namespace std;
    const int maxn=1<<10;
    struct EDGE
    {
        double x1,y1,x2,y2;
    }edge[maxn];
    
    void getpoint(double &x,double &y,int m,int n)
    {
        double a1=edge[m].y1-edge[m].y2;
        double b1=edge[m].x2-edge[m].x1;
        double c1=edge[m].x1*edge[m].y2-edge[m].x2*edge[m].y1;
        double a2=edge[n].y1-edge[n].y2;
        double b2=edge[n].x2-edge[n].x1;
        double c2=edge[n].x1*edge[n].y2-edge[n].x2*edge[n].y1;
        double D=a1*b2-a2*b1;
        x=(c2*b1-b2*c1)/D;
        y=(c1*a2-c2*a1)/D;
    }
    int main()
    {
        printf("First line\n");
        scanf("%lf%lf%lf%lf",&edge[0].x1,&edge[0].y1,&edge[0].x2,&edge[0].y2);
        printf("Second line\n");
        scanf("%lf%lf%lf%lf",&edge[1].x1,&edge[1].y1,&edge[1].x2,&edge[1].y2);
        double x,y;
        getpoint(x,y,0,1);
        printf("x=%lf y=%lf\n",x,y);
        return 0;
    }
  • 相关阅读:
    斯特林公式
    高精度算法
    容斥原理
    贪心问题之——Dijkstra最短路
    博弈论
    JavaScript数据类型
    JavaScript变量
    认识JavaScript
    编程语言与计算机
    CSS验证工具
  • 原文地址:https://www.cnblogs.com/longlongagocsu/p/2962228.html
Copyright © 2011-2022 走看看