两条线段 马蹄集

两条线段
难度:白银
0时间限制:1秒
巴占用内存:64M
输入2个线段的端点的坐标值和y(X,y不重合),判断两条线段是否交叉,输出
YES或者NO.
格式
输入格式:输入整型,空格分隔。按照先起点(Xy),空格,再终点
(Xy)的次序。每行一个线段的信息。
输出格式:输出YES或者NO 

//
// Created by abner on 2022/11/5.
//

#include<bits/stdc++.h>>
using namespace std;
bool inside(int x1,int y1,int x2,int y2,int xk,int yk)
{
    return (x1 == x2 || (min(x1,x2) <= xk && xk <= max(x1,x2)))&& (y1 == y2 || (min(y1,y2) <= yk && yk <= max(y1,y2)));
//(y1 ==y2(min(y1,y2)<=yk &yk <max(y1,y2)));
//}
}
//bool inside(int x1,int y1,int x2,int y2,int xk,int yk)
//return (x1 =x2 (min(x1,x2)<=xk &xk <max(x1,x2)))&
//(y1 ==y2(min(y1,y2)<=yk &yk <max(y1,y2)));
//}
int main()
{
    char c;
    int x1,y1,x2,y2,x3,y3,x4,y4;
    bool check=false;
    cin>>c>>x1>>c>>y1>>c>>c>>x2>>c>>y2>>c;
    cin>>c>>x3>>c>>y3>>c>>c>>x4>>c>>y4>>c;
    if((y4-y3)*(x2-x1) == (y2-y1)*(x4-x3))//判断线段12与线段34是否平行
    {//若平行,则判断线段12与线段13是否共线
    if((y2-y1)*(x3-x1) == (y3-y1)*(x2-x1))
    {
    if (inside(x1,y1,x2,y2,x3,y3))check=true;
    //判断(x4,y4)是否在「线段」(x1,y1)~(x2,y2)上
    if (inside(x1,y1,x2,y2,x4,y4))check=true;
    //判断(x1,y1)是否在「线段(x3,y3)~(x4,y4)上
    if (inside(x3,y3,x4,y4,x1,y1))check=true;
    //判断(x2,y2)是否在「线段」(x3,y3)~(x4,y4)上
    if (inside(x3,y3,x4,y4,x2,y2))check=true;
    //在平行时,
}}
else//不平行
    {
//联立方程得到t1和t2的值
double t1 = (double)(x3 * (y4 - y3)+y1 * (x4-x3)-y3 * (x4 -x3)-x1 * (y4 -y3)) / ((x2 - x1) * (y4 - y3) - (x4-x3) * (y2 - y1));
double t2 = (double)(x1 * (y2- y1) + y3 * (x2 - x1) - y1 * (x2 - x1)-x3 * (y2 - y1)) / ((x4 - x3) * (y2 -y1) -(x2- x1) * (y4 - y3));
//判断t1和t2是否均在[0,1]之间
if(t1>=0.0 && t1<=1.0 && t2>=0.0 && t2<=1.0) check=true;
}
if(check) cout<<"YES";
else cout<<"NO";
return 0;}

一、常用的方法有两种,如下:

1、度量比较法。

量得两条线段的长度,比较大小。

2、叠合比较法。

将两条线段重叠在一起,两条线段的一个端点重合,另一个端点落在另一条线段内的线段较短。 

二、长度的测量

长度的测量是最基本的测量,最常用的工具是刻度尺。

长度的国际单位是米(m),常用的单位有千米(km),分米(dm),厘米(cm),毫米(mm)微米(μm)纳米(nm)等。

长度的单位换算时,小单位变大单位用乘法,大单位换小单位用除法。

方法一:使用度量工具量出这两条线段的长度,度量单位相同,所得量数大的线段较长。
方法二:叠合法比较,两条线段的一个端点重合,另一个端点落在此端点的同一侧,看另一端点的位置.
方法三:使用圆规。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值