首页 > 其他分享 >直线求交点公式及代码

直线求交点公式及代码

时间:2023-08-18 15:12:45浏览次数:119  
标签:直线 公式 A1 A2 B1 B2 交点 C2

直线求交点

题目链接:https://www.acwing.com/problem/content/3693/

1. 直线的表示

直线标准形式:Ax + By = C

设直线经过的两个点为(x1, y1),(x2, y2)

则:

A = y2 - y1
B = x1 - x2
C = A * x1 + B * y1

2. 两条直线求交点

设两条直线方程为:A1x + B1y = C1 A2x + B2y = C2

特殊情况:

  1. 两条直线有0个交点,即两条直线不同且平行

    如果两条直线平行,则A1 * B2 == A2 * B1

  2. 两条直线有无穷多个交点,即两条直线相同:

    A1 == A2;B1 == B2;C1 == C2

设两条直线的交点为(x0, y0)
则:x0 = (B2 * C1 - B1 * C2) / (A1 * B2 - A2 * B1)
y0 = (A1 * C2 - A2 * C1) / (A1 * B2 - A2 * B1)

3. C++代码实现:

#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i = a;i < b;i++)
#define per(i,a,b) for(int i = b - 1;i >= a;i--)
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
typedef long long ll;
typedef pair<int,int> PII;
typedef vector<int> VI;
const int INF = 0x3f3f3f3f;
const double eps = 1e-4;

int main() {
    int x1, y1, x2, y2, x3, y3, x4, y4;
    scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
    scanf("%d%d%d%d", &x3, &y3, &x4, &y4);

    int A1 = y2 - y1, B1 = x1 - x2, C1 = A1 * x1 + B1 * y1;
    int A2 = y4 - y3, B2 = x3 - x4, C2 = A2 * x3 + B2 * y3;

    if((A1 * B2 == A2 * B1) || (A1 == A2 && B1 == B2 && C1 == C2)) {
        puts("Parallel or coincident");
        return 0;
    }

    double x0 = 1.0 * (B2 * C1 - B1 * C2) / (A1 * B2 - A2 * B1);
    double y0 = 1.0 * (A1 * C2 - A2 * C1) / (A1 * B2 - A2 * B1);
    if(abs(x0) < eps) x0 = 0;
    if(abs(y0) < eps) y0 = 0;
    printf("%.2lf %.2lf\n", x0, y0);

    return 0;
}

标签:直线,公式,A1,A2,B1,B2,交点,C2
From: https://www.cnblogs.com/junlin623/p/17640554.html

相关文章

  • 简单计算公式校验
    letformulaStr='你的公式'if(/^[\d()*\/+-]+$/.test(formulaStr)){}else{console.log('公式异常:包含不能解析的字符')}if(/[\+\-\*\/]{2,}/.test(formulaStr)){console.log('公式异常:运算符连续')}if(/\(\)/.test(formulaStr)){console.log(......
  • 教你使用常用的逻辑公式和恒等式等价改写SQL
    今天同事给我一条2秒的SQL看看能不能优化。原始SQL:SELECTpk_deptFROMaaaaWHERE1=1AND((pk_group='0001A110000000000JQ6'ANDpk_orgIN('0001A110000000001M09')))AND(PK_DEPTIN(SELECTt1.ORGIDFROMxxxxxt1......
  • 转载:错位排列递推公式证明
    转载自:【组合数学】错排问题(递推公式|通项公式|推导过程)★韩曙亮————————————————版权声明:本文为CSDN博主「韩曙亮」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/shulianghan/article/deta......
  • esXGray开发笔记:基于直线检测的文本倾斜自动校正算法实现(python+opencv)
    昨日采用最小面积矩形的方式实现文本倾斜自动校正,但后面的角度有点麻烦,于是改用基本直线检测的算法。算法简介:检测直线,自动调节参数,至少获取11条直线(直线条数调节)计算每条直线与x轴夹角从返回的角度中找到出现次数较多的直线角度平均值并返回作为图片倾斜角度检测到角度后,就......
  • 一个公式带你读懂天下英文 逻辑英语
    北大钟平一个公式带你读懂天下英文主讲老师:钟平 逻辑英语钟平,巧用数学公式突破单词难关推荐2021-02-2210:59:47分享到全球化背景下,学习英语成为很多人的日常。而对于语言学习来说,词汇量是基础,关于如何高效牢固地记住更多单词,流传着各种方法,其中钟平老师的逻辑英语受到了......
  • aidlux边缘检测、直线检测
    边缘检测直线检测app封装填写app配置信息:启动命令就是python加python文件所在位置......
  • 【CV】Nerf中体素渲染的离散公式推导
    在文章《NeRF:representingscenesasneuralradiancefieldsforviewsynthesis》中体素渲染的连续形式为在文章中给出了其离散形式为实际上这里的离散形式并不是将积分直接离散化,而是通过把路径上的density和color设定为分段常数,如下图所示于是先计算\(T\),\[\begin{a......
  • 直线电机模组在3C电子行业中的重要应用
    直线模组的种类有很多,是自动化行业中必不可少的传动元件,其中丝杆模组和同步带模组的应用率比较高,但随着自动化领域的迅速发展,高精密直线电机模组也得到了广泛的应用,尤其是在电子行业中的应用。3C电子产品在我们的日常生活中扮演着重要的角色,小到LED灯泡、手机,大到高速铁路,航天产业,......
  • 找直线
     1dev_close_window()2read_image(Image,'测量/0.bmp')3get_image_size(Image,Width,Height)4dev_open_window(0,0,Width,Height,'black',WindowHandle)56dev_display(Image)78*绘制直线9draw_line(Window......
  • 两条直线轮廓的距离
    1dev_close_window()2read_image(Image,'测量/0.bmp')3get_image_size(Image,Width,Height)4dev_open_window(0,0,Width,Height,'black',WindowHandle)56dev_display(Image)78*绘制直线9draw_line(WindowHan......