IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> [计算几何] 使用叉积计算直线交点 -> 正文阅读

[数据结构与算法][计算几何] 使用叉积计算直线交点

使用叉积计算直线交点

已知直线 A B AB AB C D CD CD ,其交点为 P P P , 求 P P P 的坐标

计算几何中一般存储向量 p ? , v ? \vec{p},\vec{v} p ?,v 表示起点的向量表示和方向向量

例如直线 A B AB AB 一般存储为 O A ? , A B ? \overset{\longrightarrow}{OA},\overset{\longrightarrow}{AB} OA?,AB?

const double eps=1e-10;
struct vct{double x,y;}p[N];
#define pf(x) ((x)*(x))
vct operator+(vct a,vct b){return {a.x+b.x,a.y+b.y};}
vct operator-(vct a,vct b){return {a.x-b.x,a.y-b.y};}
vct operator*(vct a,double b){return {a.x*b,a.y*b};}
vct operator/(vct a,double b){return {a.x/b,a.y/b};}
double cross(vct a,vct b){return a.x*b.y-a.y*b.x;}
double dot(vct a,vct b){return a.x*b.x+a.y*b.y;}
double len(vct a){return sqrt(pf(a.x)+pf(a.y));}
struct line
{
    vct p,way;
    double k;
    void mkline(vct a,vct b)
    {
        p=a;way=b;
        k=atan2(b.y,b.x); // 部分题会用到的极角排序,并不是必不可缺的
    }
    void mk(double x1,double y1,double x2,double y2)
    {
        mkline({x1,y1},{x2-x1,y2-y1});
    }
}a[N];

因此,可以得到下图

在这里插入图片描述
在这里插入图片描述

其中 v 1 , v 2 v_1,v_2 v1?,v2? 为方向向量

P = p 1 + t v 1 P=p_1 + tv_1 P=p1?+tv1?

∵ ( p 1 + t v 1 ? p 2 ) × v 2 = 0 \because (p_1+tv_1-p_2) \times v_2 = 0 (p1?+tv1??p2?)×v2?=0

∴ t = ( p 2 ? p 1 ) × v 2 v 1 × v 2 \therefore t = \dfrac{(p_2-p_1)\times v_2}{v_1\times v_2} t=v1?×v2?(p2??p1?)×v2??

则代入 P = p 1 + t v 1 P=p_1 + tv_1 P=p1?+tv1? 即可

代码如下

vct intersect(line a,line b)
{
    double x=cross(b.way,a.p-b.p)/cross(a.way,b.way);
    return a.p+a.way*x;
}

完整代码摘自这里 其实是懒得再打一遍 qwq

转载请说明出处

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-01 15:57:52  更:2022-05-01 16:00:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:49:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码