程序员面试金典 - 面试题 16.03. 交点(数学)

1. 题目

给定两条线段(表示为起点start = {X1, Y1}和终点end = {X2, Y2}),如果它们有交点,请计算其交点,没有交点则返回空值。

要求浮点型误差不超过10^-6。若有多个交点(线段重叠)则返回 X 值最小的点,X 坐标相同则返回 Y 值最小的点。

示例 1:
输入:
line1 = {0, 0}, {1, 0}
line2 = {1, 1}, {0, -1}
输出: {0.5, 0}示例 2:
输入:
line1 = {0, 0}, {3, 3}
line2 = {1, 1}, {2, 2}
输出: {1, 1}示例 3:
输入:
line1 = {0, 0}, {1, 1}
line2 = {1, 0}, {2, 1}
输出: {},两条线段没有交点提示:
坐标绝对值不会超过 2^7
输入的坐标均是有效的二维坐标

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/intersection-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 高中数学,求两条直线的交点,解方程,把公式算出来即可
class Solution {int lx2,rx2,by2,uy2;//线段2坐标极限值int lx1,rx1,by1,uy1;//线段1坐标极限值int dx1, dy1, dx2, dy2;//delta
public:vector<double> intersection(vector<int>& start1, vector<int>& end1, vector<int>& start2, vector<int>& end2) {lx2 = min(start2[0],end2[0]);rx2 = max(start2[0],end2[0]);by2 = min(start2[1],end2[1]);uy2 = max(start2[1],end2[1]);lx1 = min(start1[0],end1[0]);rx1 = max(start1[0],end1[0]);by1 = min(start1[1],end1[1]);uy1 = max(start1[1],end1[1]);dx1 = start1[0]-end1[0];dy1 = start1[1]-end1[1];dx2 = start2[0]-end2[0];dy2 = start2[1]-end2[1];if(dx1*dy2==dx2*dy1)//平行{vector<vector<int>> ans;if(inline2(start1[0],start1[1],start2[0],start2[1])){ans.push_back({start1[0],start1[1]});}if(inline2(end1[0],end1[1],start2[0],start2[1])){ans.push_back({end1[0],end1[1]});}if(inline1(start2[0],start2[1],start1[0],start1[1])){ans.push_back({start2[0],start2[1]});}if(inline1(end2[0],end2[1],start1[0],start1[1])){ans.push_back({end2[0],end2[1]});}if(ans.size()>1)sort(ans.begin(), ans.end());if(ans.size())return {double(ans[0][0]),double(ans[0][1])};return {};}else{double x = double(dx1*dx2*(start2[1]-start1[1])+dx2*dy1*start1[0]-dx1*dy2*start2[0])/(dx2*dy1-dx1*dy2);double y = double(dy1*dy2*(start2[0]-start1[0])+dx1*dy2*start1[1]-dx2*dy1*start2[1])/(dx1*dy2-dx2*dy1);if(inline1(x,y,start1[0],start1[1])&&inline2(x,y,start2[0],start2[1]))return {x,y};return {};}}bool inline1(double x, double y, int x0, int y0){return (lx1<=x && x<=rx1 && by1<=y && y<=uy1 && (abs(dx1*(y-y0)-dy1*(x-x0))<0.000001));}bool inline2(double x, double y, int x0, int y0){return (lx2<=x && x<=rx2 && by2<=y && y<=uy2 && (abs(dx2*(y-y0)-dy2*(x-x0))<0.000001));}
};

0 ms 11.6 MB

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

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

相关文章

终结1.x时代,PyTorch 2.0来了!100%向后兼容,一行代码将训练提速76%

源&#xff5c;机器之心PyTorch 官方&#xff1a;我们这次的新特性太好用了&#xff0c;所以就直接叫 2.0 了。前段时间&#xff0c;PyTorch 团队在官方博客宣布 Pytorch 1.13 发布&#xff0c;包含 BetterTransformer 稳定版等多项更新。在体验新特性的同时&#xff0c;不少人…

python randint什么分布_python随机数分布random测试

因为概率问题&#xff0c;所以需要测试一下python的随机数分布。到底是平均&#xff08;均匀&#xff09;分布&#xff0c;还是正态&#xff08;高斯&#xff09;分布。 测试代码如下&#xff1a; #! /usr/bin/env python #codingutf-8 # # Describe : 测试random随机数分布 #…

LeetCode 1408. 数组中的字符串匹配(暴力查找)

1. 题目 给你一个字符串数组 words &#xff0c;数组中的每个字符串都可以看作是一个单词。请你按 任意 顺序返回 words 中是其他单词的子字符串的所有单词。 如果你可以删除 words[j] 最左侧和/或最右侧的若干字符得到 word[i] &#xff0c;那么字符串 words[i] 就是 words[…

逻辑性不好可以学python吗_如果本文若未能让你学会“Python”,可能真的不适合学习Python...

很多小伙伴们会问学习Python难学吗&#xff1f; python就是以他简单易学出名的。几乎是现在最简单&#xff0c;却可塑性最高的语言了。一般有其它编程语言基础的&#xff0c;自学&#xff0c;三小时左右就能学会。现在Python都有给小朋友的教程&#xff0c;简单程度可见一般。 …

意外地调用了方法或属性访问

我使用JAVASCRIPT动态创建HTML中的元素居然提示&#xff0c;“意外地调用了方法或属性访问”我的方法:function appendTag(element){var f document.createElement("font");f.setAttribute("style","color:red");var text document.createText…

谷歌要完,百度也危了

文 | 天于刀刀当我们在抱怨搜索引擎的时候我们具体在说些什么&#xff1f;也许是饱受诟病的广告&#xff1f;或者是不合理的网页排序&#xff1f;又或是一种最直观的感觉——不好使。但是从来没有人抱怨过搜索引擎这一个模式。尽管这些年&#xff0c;也诞生一些诸如Magi这样让人…

LeetCode 1409. 查询带键的排列(map模拟)

1. 题目 给你一个待查数组 queries &#xff0c;数组中的元素为 1 到 m 之间的正整数。 请你根据以下规则处理所有待查项 queries[i]&#xff08;从 i0 到 iqueries.length-1&#xff09;&#xff1a; 一开始&#xff0c;排列 P[1,2,3,…,m]。对于当前的 i &#xff0c;请你找…

根据年月日计算是星期几的函数,基姆拉尔森计算公式

算法如下&#xff1a; 基姆拉尔森计算公式W (d2*m3*(m1)/5yy/4-y/100y/400) mod 7 在公式中d表示日期中的日数&#xff0c;m表示月份数&#xff0c;y表示年数。 注意&#xff1a;在公式中有个与其他公式不同的地方&#xff1a; 把一月和二月看成是上一年的十三月和十四月&#…

centos7 如何安装部署k8s_如何在centos7上安装FreeIPA的客户端

1.文档编写目的在前面的文章《如何在Redhat7上安装FreeIPA》介绍了FreeIPA的安装及使用&#xff0c;本篇文章主要介绍如何在RedHat7上安装FreeIPA的客户端并配置。 2.内容概述1.环境准备2.安装FreeIPA客户端及使用3.总结及异常处理 3.测试环境1.centos 7.62.FreeIPA4.6.44.环境…

何恺明新作来了!更快更有效的训练FLIP

文 | Random源 | AIWalkerpaper&#xff1a;https://arxiv.org/abs/2212.00794本文提出一种用于训练CLIP的简单而有效的方案FLIP(Fast Language-Image Pre-training, FLIP),它在训练过程中对图像块进行大比例的随机Mask移除。Mask机制使得我们可以在有限周期内学习到更多的imag…

LeetCode 1410. HTML 实体解析器(哈希map)

1. 题目 「HTML 实体解析器」 是一种特殊的解析器&#xff0c;它将 HTML 代码作为输入&#xff0c;并用字符本身替换掉所有这些特殊的字符实体。 HTML 里这些特殊字符和它们对应的字符实体包括&#xff1a; 双引号&#xff1a;字符实体为 &quot; &#xff0c;对应的字符…

json和python中字典的区别和联系_Python 中json与字典的关系

Python开发中字典和 json的概念区别&#xff1a; json.dumps( dict )    字典变为字符 json.loads( jsoninput )    字符变为字典 一、字典 字典是一种数据结构&#xff0c;而json是一种数据格式,格式就会有一些形式上的限制&#xff0c;比如json的格式要求必须且只能使…

windows核心编程学习笔记(八)结构化异常处理(Structured Exception Handling)

首先要要知道&#xff0c;结构化异常处理(SEH)和C提供的异常处理不相同。一.Termination HandlersTermination Handlers使用很简单。在想使用SEH处理的地方使用__try{/* [__leave;] */}__finally{/* [AbnormalTermination] */}即可。SEH保证&#xff0c;无论__try中的代码怎样退…

本地唯一985,要去省会了!

源 | 软科&#xff08;ID&#xff1a;zuihaodaxue&#xff09;综合整理自福州市人民政府、各高校官网福州将迎来第三所985高校&#xff01;11月22日&#xff0c;福州市长吴贤德会见厦门大学党委书记张荣一行并座谈&#xff0c;双方就进一步加强校地合作进行深入交流。会上&…

LeetCode 1411. 给 N x 3 网格图涂色的方案数(数学)

1. 题目 你有一个 n x 3 的网格图 grid &#xff0c;你需要用 红&#xff0c;黄&#xff0c;绿 三种颜色之一给每一个格子上色&#xff0c;且确保相邻格子颜色不同&#xff08;也就是有相同水平边或者垂直边的格子颜色不同&#xff09;。 给你网格图的行数 n 。 请你返回给 …

元宇宙这么能赚?平均月薪近4万!

自2021年元宇宙元年之后&#xff0c;大批元宇宙相关岗位涌现在市场。近日&#xff0c;某网站发布《2022元宇宙行业人才发展报告》。2022年1-7月元宇宙相关招聘岗位同比增长16.6%&#xff0c;元宇宙相关岗位的平均招聘月薪18515元&#xff0c;深度学习岗平均月薪39971元&#xf…

sql两个时间之间的小时差_2年级学生每天上学路上有两个小时车程,该如何利用好这个时间?-知乎亲子热点快报/2020/09/04...

为了享受到更好的教育资源&#xff0c;许多家长会选择让孩子入读离家较远的学校&#xff0c;与此同时路上耗费的大量时间也让家长烦恼不已。既不想让孩子劳累过度&#xff0c;也不愿时间被白白浪费。你家孩子在上学路上常常会做些什么&#xff1f;你有什么好的建议呢&#xff1…

LeetCode 1379. 找出克隆二叉树中的相同节点(二叉树遍历)

1. 题目 给你两棵二叉树&#xff0c;原始树 original 和克隆树 cloned&#xff0c;以及一个位于原始树 original 中的目标节点 target。 其中&#xff0c;克隆树 cloned 是原始树 original 的一个 副本 。 请找出在树 cloned 中&#xff0c;与 target 相同 的节点&#xff0…

Oracle定时器(Job)各时间段写法汇总

原作者:博客园一条辉 原文:链接 对于DBA来说&#xff0c;数据库Job再熟悉不过了&#xff0c;因为经常要数据库定时的自动执行一些脚本&#xff0c;或做数据库备份&#xff0c;或做数据的提炼&#xff0c;或做数据库的性能优化&#xff0c;包括重建索引等等的工作。但是&#x…

websocket 带头部信息请求 header_关于websocket跨域的一个奇怪问题

最近在建设 websocket 长连接网关&#xff0c;过程中遇到一件比较奇怪的事情&#xff0c;做下简单的记录。需求十分的简单&#xff0c;websocket 网关在做权限校验的时候期望复用现有登录逻辑的 jwt-token。如下图所示&#xff0c;sso 与 websocket 网关属于不同的二级域名&…