两直线交点算法 C

求两直线交点算法
在这里插入图片描述
有中间交点 CD在AB异侧 且AB在CD异侧
在这里插入图片描述
AB在CD异侧 但 CD在AB同侧 无中间交点

A B × A C A B × A D \nobreak AB \times AC \newline AB \times AD AB×ACAB×AD
异号

叉乘后相乘小于零

等于零的几种情况
A = B
C与AB共线
D与AB共线

求交点,可由面积比例用叉乘计算

C E C D = S A B C S A B C D . \frac{CE}{CD} =\frac{S_{ABC}}{S_{ABCD}} . CDCE=SABCDSABC.

综上 代码部分

float cross(float* A, float* B, float* C, float* D)
{return (B[0] - A[0]) * (D[1] - C[1]) - (B[1] - A[1]) * (D[0] - C[0]);
}void copyPoint(float* dst, float *src)
{dst[0] = src[0];dst[1] = src[1]; 
}
// EPS 误差自定  等零用线段长度点到直线距离替换 
int intersect(float* a, float *b, float *c, float *d, float* res)
{if (a[0] == b[0] && a[1] == b[1])  // ab同一点return 0;float a1 = cross(a,b,a,c);float a2 = cross(a,b,a,d);float a3 = cross(c,d,c,a);float a4 = cross(c,d,c,b);if (a1*a2 > 0 || a3*a4 > 0)  return -1;   //无交点if (a1 == 0)  { // 交点为ccopyPoint(res,c);return 1;}  else if (a2 == 0) {  // 交点为dcopyPoint(res,d);return 1;}    	     //中间交点 float t = a1 / (a1 - a2);   // 面积1与面积2异号  保持a1方向 res[0] = c[0] + t*(d[0] - c[0]);   res[1] = c[1] + t*(d[1] - c[1]);return 1;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/777275.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS - LLVM的中间代码(IR)

文章目录 iOS - LLVM的中间代码(IR)1. 转为汇编代码2. 中间代码(IR)2.1 Objective-C在变为机器代码之前,会被LLVM编译器转换为中间代码(Intermediate Representation)2.2 可以使用以下命令行指令…

Spring Cloud的原理涉及多个组件和概念

核心部分的详细解释 服务注册与发现:这是Spring Cloud的核心功能之一。通过使用Eureka、Consul或Zookeeper等服务注册中心,服务提供者将自己的信息注册到注册中心,服务消费者通过注册中心查询可用的服务列表。服务消费者在需要调用其他服务时…

排序算法 - 堆排序

文章目录 目录 文章目录 前言 1 . 堆排序原理 2 . 堆排序实现 总结 前言 大家好,今天给大家介绍一下常见排序算法中的堆排序(填坑) 1 . 堆排序原理 堆排序是一种基于二叉堆数据结构的排序算法,它利用堆的性质进行排序。堆是一种完全二叉树,分为最…

如何为nginx配置环境变量-linux(-bash: nginx: 未找到命令)

我在安装nginx后,输入nginx 始终提示:"-bash: nginx: 未找到命令" 只能使用:“ /usr/local/nginx/sbin/nginx ” 此文是对执行 nginx -s reload 命令 提示未找到的解决方案! 避免浪费时间!!&#x…

武忠祥《660题》高效刷题包+资料分享

660题的难度书虽然比较难,对于基础的考察比较深入,所以,有没有一种可能,做题太慢,是因为基础不好导致的! 所以再继续做下去,就没有什么意义了,因为这就像是用一把钝刀去砍树&#x…

网络安全渗透测试工具

网络安全渗透测试常用的开发工具包括但不限于以下几种: Nmap:一款网络扫描工具,用于探测目标主机的开放端口和正在运行的服务,是网络发现和攻击界面测绘的首选工具。Wireshark:一个流量分析工具,用于监测网…

C++之struct和class区别

在C中 struct和class唯一的区别就在于 默认的访问权限不同 区别: struct 默认权限为公共 class 默认权限为私有 class C1 {int m_A; //默认是私有权限 };struct C2 {int m_A; //默认是公共权限 };int main() {C1 c1;c1.m_A 10; //错误,访问权限是私…

VS2022 使用ClaudiaIDE设置自定义图片背景

ClaudiaIDE的下载 第一步,如下图所示,点击:扩展——管理扩展。 第二步,如下图所示,点击:联机——右上角输入ClaudiaIDE搜索——点击下载。 下载后关闭所有VS窗口,然后等待弹出一个安装窗口&…

Java基础【多线程】

什么是线程 线程(Thread)是计算机科学中的一个重要概念,指的是在单个程序内部同时执行的一条独立的指令序列。简而言之,线程就是在一个进程内部并发执行的一段代码。每个线程都有自己的执行路径,可以独立地执行代码&a…

小米汽车正式发布:开启智能电动新篇章

随着科技的不断进步,汽车产业正经历着前所未有的变革。智能电动汽车作为这一变革的重要方向,正吸引着越来越多的目光。在这个充满机遇和挑战的时代,小米汽车凭借其卓越的技术实力和深厚的市场底蕴,终于迈出了坚实的一步。今天&…

Exception in thread “main“ com.fasterxml.jackson.databind.JsonMappingException:

问题:jaskson反序列化超出最大长度 Caused by: com.fasterxml.jackson.core.exc.StreamConstraintsException: String length (5043456) exceeds the maximum length (5000000) 场景:前端传递过大base64 原因: jaskon默认已经限制了最大长…

免费|Python|【需求响应】一种新的需求响应机制DR-VCG研究

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序对应文章《Contract Design for Energy Demand Response》,电力系统需求响应(DR)用来调节用户对电能的需求,即在预测的需求高于电能供应时,希…

chrome 控制台不能粘贴

描述:chrome 控制台不能粘贴 解决方案:setting-Experiments-Filter中输入past,取消勾选

国际伦敦金行情分析中的趋势分析方法

国际伦敦金行情走势复杂多变。近期,金价曾经一度刷新历史的新高点至2222,但就在当天,金价又快速下跌跌超过30美元。不过这么多变的伦敦金行情也为我们的交易创造了空间,有空间就等于有机会,只要我们能够掌握国际伦敦金…

C# 多态 派生类 abstract virtual new

静态多态函数重载运算符重载 动态多态abstract 和 virtual的区别定义与用途:成员实现:继承与重写:与接口的区别: 使用抽象类的好处主要体现在以下几个方面:代码重用:设计灵活性:接口定义&#x…

HCIP作业3

第一步 给PC1配置: 先给PC2配置: 第二部 给R1的接口配置ip [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 192.168.1.252 24 [R1-GigabitEthernet0/0/0]int g0/0/1 [R1-GigabitEthernet0/0/1]ip ad 100.1.1.1 24 给R2的接口配置IP [R2]int g0/0/…

Java:接口应用(Comparable接口与比较器)

目录 1.引例2.Comparable接口使用3.Comparable接口的局限性4.使用comparaTo实现排序5.比较器(Comparator接口) 1.引例 class Student{private String name;private int age;public Student(String name, int age) {this.name name;this.age age;} } p…

#孩子学习编程的目的是什么?#

谢谢今日头条编辑的盛情邀请,对此,我发表自己的一点拙见。 首先,最重要的一点,学习编程可以练习打字,加强拼音输入法的掌握。对于孩子的语文成绩有一定的提高帮助,也为将来走上工作熟练使用电脑输入法打下扎…

Linux的学习之路:3、基础指令(2)

一、echo指令 这个指令在上篇文章我也用了但是忘了说了,这个指令的大概用法就是把后面跟的文本等输出在显示器上,如下代码所示打印的“Hello Linux” [rootVM-24-9-centos ~]# echo "Hello Linux" Hello Linux二、输出重定向与输入重定向 着…

vue页面实现左右div宽度,上下div高度分割线手动拖动高度或者宽度自动变化,两个div宽度或者高度拉伸调节,实现左右可拖动改变宽度的div内容显示区

实现左右或者上下div两部分拖动,宽度或者高度自动变化,实现流畅平滑的变化,还可以是实现拖动到一定宽度就不让拖动了,如果你不需要最小宽度,就直接去掉样式就行 这是页面。分左中右三部分,中间我是用来作为拖动的按钮…