B 判断两个线段是否相交

2024-06-07 03:48

本文主要是介绍B 判断两个线段是否相交,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

很简单的一道几何题。

本来应该1A。Wa了一次后,头脑就开始乱了,第一次Wa,完全就是没有特判垂直X轴的那种。

然后,比赛完就1A了。我擦。

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;struct Point{double x,y;
};struct Line{Point a,b;
};Line L1,L2;double f1(double x){//if(L1.a.x==L1.b.x)return (x*(L1.b.y-L1.a.y)+L1.a.y*(L1.b.x-L1.a.x)-L1.a.x*(L1.b.y-L1.a.y))/(L1.b.x-L1.a.x);
}double f2(double x){//if(L1.a.x==L1.b.x)return (x*(L2.b.y-L2.a.y)+L2.a.y*(L2.b.x-L2.a.x)-L2.a.x*(L2.b.y-L2.a.y))/(L2.b.x-L2.a.x);
}bool Judge(){double tmp1=L2.a.y-f1(L2.a.x),tmp2=L2.b.y-f1(L2.b.x);double tmp3=L1.a.y-f2(L1.a.x),tmp4=L1.b.y-f2(L1.b.x);
//    printf("%lf %lf %lf %lf\n",tmp1,tmp2,tmp3,tmp4);if(tmp1==0||tmp2==0||tmp3==0||tmp4==0) return true;if(tmp1*tmp2<=0&&tmp3*tmp4<=0) return true;return false;
}int main(){int T;scanf("%d",&T);while(T--&&scanf("%lf%lf%lf%lf %lf%lf%lf%lf",&L1.a.x,&L1.a.y,&L1.b.x,&L1.b.y,&L2.a.x,&L2.a.y,&L2.b.x,&L2.b.y)){if(L1.a.x==L1.b.x&&L2.a.x!=L2.b.x){double tmp=f2(L1.a.x);if(tmp>=min(L2.a.y,L2.b.y)&&tmp<=max(L2.a.y,L2.b.y)){printf("Interseetion\n");}else {printf("Not Interseetion\n");}}else if(L2.a.x==L2.b.x&&L1.a.x!=L1.b.x){
//            printf("%lf %lf\n",L2.a.x,L2.b.x);double tmp=f1(L2.a.x);if(tmp>=min(L1.a.y,L1.b.y)&&tmp<=max(L1.a.y,L1.b.y)){printf("Interseetion\n");}else {printf("Not Interseetion\n");}}else if(L1.a.x==L1.b.x&&L2.a.x==L2.b.x){if(L1.a.x==L2.a.x){printf("Interseetion\n");}else {printf("Not Interseetion\n");}}else {
//            printf("Bingo!\n");if(Judge()) printf("Interseetion\n");else printf("Not Interseetion\n");}}return 0;
}

简单几何。

这篇关于B 判断两个线段是否相交的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1038084

相关文章

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM

JavaScript全屏,监听页面是否全屏

在JavaScript中,直接监听浏览器是否进入全屏模式并不直接支持,因为全屏API主要是关于请求和退出全屏模式的,而没有直接的监听器可以告知页面何时进入或退出全屏模式。但是,你可以通过在你的代码中跟踪全屏状态的改变来模拟这个功能。 以下是一个基本的示例,展示了如何使用全屏API来请求全屏模式,并在请求成功或失败时更新一个状态变量: javascriptlet isInFullscreen =

剑指offer(C++)--和为S的两个数字

题目 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 class Solution {public:vector<int> FindNumbersWithSum(vector<int> array,int sum) {vector<int> result;int len = array.size();if(

剑指offer(C++)--两个链表的第一个公共结点

题目 输入两个链表,找出它们的第一个公共结点。 解法一 两个链表一定有交点的话,方法是指向短链表指针先走完,然后指向长链表,指向长链表指针后走完,指向短链表。所以,第二次走过,一定会在交点相遇。 class Solution {public:ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) {ListN

两个基因相关性CPTAC蛋白组数据

目录 蛋白数据下载 ①蛋白数据下载 1,TCGA-选择泛癌数据  2,TCGA-TCPA 3,CPTAC(非TCGA) ②蛋白相关性分析 1,数据整理 2,蛋白相关性分析 PCAS在线分析 蛋白数据下载 CPTAC蛋白组学数据库介绍及数据下载分析 – 王进的个人网站 (jingege.wang) ①蛋白数据下载 可以下载泛癌蛋白数据:UCSC Xena (xena

【Python如何输入升高和体重判断你是偏胖还是偏瘦】

1、求体质指数得Python代码如下: # BMI(Body Mass Index)指数:简称体质指数,# 是国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。# 常用指标:BMI<18.5 偏瘦 18.5<=MBI<=24 正常 MBI>24 偏胖# 计算公式:BMI=体重kg/身高的平方ma = eval(input("请输入你的体重(kg):")) # 输入体重b = e

剑指offer—编程题7(用两个栈实现一个队列)

题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail 和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。 代码如下: [java]  view plain copy print ? public class Test07 {       /**       * 用两个栈模拟的队列       *

算法11—判断一个树是不是二叉查询树

问题: 给定一个二叉树,判断它是否是二叉查询树。 思路: 要判断是否是二叉查询树,标准就是看每一个节点是否满足:1、左节点及以下节点的值比它小;2、右节点及以下节点的值比它大。当然,前提是子节点都存在的情况。所以,我们需要从根节点不断向下递归,只要所有节点都满足,那么就是BST,否则,就不是。 代码: [java]  view plain copy pri

算法9—两个巨大正整数相加

两个巨大整数相加,可能会造成溢出,或者它的大小已经超出基本数据类型的范围,所以,我们对巨大整数进行相加时,可以把它们转换成字符串,然后通过字符串的处理进行整数相加。 这里有两种做法:第一种,把整数存在一个字符数组里进行处理。代码如下: [java]  view plain copy public static String addThroughArray(String

算法8—不通过比较,找出两个数的最大值

问题: 比如:给定两个值 5和10,不通过比较,直接找出最大值。 分析: 一旦涉及到不用比较找最大值,想都不用想,一般只能通过位运算来实现。  max = a - ((a-b)&((a-b)>>31)) 或者 max = ((a+b)+|a-b|)/2 如果找最小值,我们只需把两个值相加,减去max即可。