欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

判斷線(xiàn)段是否相交

# -*- coding: utf-8 -*-
# @Time         : 2019-09-18 16:55
# @Author       : Jayce Wong
# @ProjectName  : job
# @FileName     : segment_cross.py
# @Blog         : https://blog.51cto.com/jayce1111
# @Github       : https://github.com/SysuJayce

"""
Q:給定兩個(gè)線(xiàn)段的坐標(biāo)(也就是四個(gè)點(diǎn)的直角坐標(biāo)系坐標(biāo)),判斷這兩個(gè)線(xiàn)段是否相交

### 判斷線(xiàn)段是否相交可以利用向量的叉乘 ###
假定輸入為P1、P2、Q1、Q2四個(gè)點(diǎn)的坐標(biāo),P1P2為一條線(xiàn)段,Q1Q2為另一條線(xiàn)段

兩條線(xiàn)段相交只有兩種情況
1. 其中一條線(xiàn)段的某一端點(diǎn)在另一條線(xiàn)段上;
2. 兩條線(xiàn)段形成X形。

首先判斷這四個(gè)點(diǎn)是否在另一條線(xiàn)段上,也就是說(shuō),判斷P1是否在線(xiàn)段Q1Q2上,P2是否在線(xiàn)段Q1Q2上...
如果上述判斷為真,那么這兩條線(xiàn)段相交?!窘鉀Q了第一種情況】

如果沒(méi)有點(diǎn)在另一條線(xiàn)段上,那么進(jìn)行叉乘判斷。
先固定線(xiàn)段Q1Q2,然后以Q1為軸,計(jì)算Q1P1和Q1Q2、Q1P2和Q1Q2的叉乘是否異號(hào);
然后固定線(xiàn)段P1P2,然后以P1為軸,計(jì)算P1Q1和P1P2、P1Q2和P1P2的叉乘是否異號(hào)。
當(dāng)上述的叉乘都異號(hào)的時(shí)候,兩條線(xiàn)段相交。
【解決了第二種情況】
"""

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __sub__(self, other):
        return Point(self.x - other.x, self.y - other.y)

class Segment:
    def __init__(self, point1, point2):
        self.point1 = point1
        self.point2 = point2
        self.x = point1.x - point2.x
        self.y = point1.y - point2.y

def crossProduct(v1, v2):
    return v1.x * v2.y - v2.x * v1.y

def onSegment(p, seg):
    """
    判斷點(diǎn)在不在一條線(xiàn)段上,關(guān)鍵在于:
    1. 三點(diǎn)是否共線(xiàn)
    2. 點(diǎn)p是否在線(xiàn)段的延長(zhǎng)線(xiàn)上。

    只要滿(mǎn)足了三點(diǎn)共線(xiàn),且點(diǎn)p不在延長(zhǎng)線(xiàn)上,那么點(diǎn)p就在線(xiàn)段上。

    判斷三點(diǎn)共線(xiàn)可以用向量的叉乘,三點(diǎn)共線(xiàn)即兩個(gè)向量平行,也就是叉乘結(jié)果為零向量(對(duì)應(yīng)到二維就是零)
    當(dāng)點(diǎn)p的橫縱坐標(biāo)都在線(xiàn)段端點(diǎn)之間的時(shí)候,點(diǎn)p不在延長(zhǎng)線(xiàn)上。
    :param p:
    :param seg:
    :return:
    """
    # 先確保點(diǎn)p不在延長(zhǎng)線(xiàn)上
    if min(seg.point1.x, seg.point2.x) <= p.x <= max(seg.point1.x, seg.point2.x)\
            and min(seg.point1.y, seg.point2.y) <= p.y <= max(seg.point1.y, seg.point2.y):
        # 然后確保這三個(gè)點(diǎn)形成的向量?jī)蓛善叫校@里只要這三個(gè)向量中任意兩個(gè)平行,第三個(gè)一定也平行
        if crossProduct(p - seg.point1, p - seg.point2) == 0:
            return True
        else:
            return False
    else:
        return False

def isCross(p1, p2, q1, q2):
    p1p2 = Segment(p1, p2)
    q1q2 = Segment(q1, q2)

    p1q1 = Segment(p1, q1)
    p1q2 = Segment(p1, q2)

    q1p1 = Segment(q1, p1)
    q1p2 = Segment(q1, p2)

    # 判斷是否存在端點(diǎn)位于另一條線(xiàn)段上,是的話(huà)則兩條線(xiàn)段相交
    if any([onSegment(p1, q1q2), onSegment(p2, q1q2),
            onSegment(q1, p1p2), onSegment(q2, p1p2)]):
        return True

    # 否則固定線(xiàn)段P1P2,判斷Q1和Q2是否在P1P2的兩側(cè)(計(jì)算叉乘)
    # 然后固定線(xiàn)段Q1Q2,判斷P1和P2是否在Q1Q2的兩側(cè)
    # 如果上面的判斷均為真,那么這兩條線(xiàn)段形成一個(gè)X
    return (crossProduct(p1p2, p1q1) * crossProduct(p1p2, p1q2) < 0)\
           and (crossProduct(q1q2, q1p1) * crossProduct(q1q2, q1p2) < 0)

def main():
    p1 = Point(0, 0)
    p2 = Point(2, 2)
    q1 = Point(1, 1)
    q2 = Point(0, 2)
    if isCross(p1, p2, q1, q2):
        print('Yes')
    else:
        print('No')

if __name__ == '__main__':
    main()

分享名稱(chēng):判斷線(xiàn)段是否相交
轉(zhuǎn)載來(lái)源:http://aaarwkj.com/article30/iipiso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、網(wǎng)站收錄移動(dòng)網(wǎng)站建設(shè)、域名注冊(cè)、電子商務(wù)App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管
亚洲日本高清一二三区| 麻豆国产免费av在线| 人人爽人人妻人人澡| 日本女人体内射精视频| av资源在线观看少妇丰满| 麻豆精品情欲人妻一区| 国产丝袜肉丝在线播放| 99精品欧美一区二区三区视频| 日本人妻精品一区二区| 欧美大尺度影片在线观看| 欧美女人又粗又长亚洲| 日本熟女视频中文字幕| 国产毛片久久久久久国产| 中文字幕人妻丝乱一区三区| 黄色片在线观看中文字幕| 国产精品毛片av在线| 国产高清大片一级黄色| 漂亮人妻少妇中文字幕| 日韩欧美亚洲精品中文字幕αv| 日本高清视频免费一区| 精品视频一区二区三区在线观看| 久久一区二区三区播放| 亚洲综合欧美自偷自拍| 夜夜操狠狠操天天摸| 又黄又爽又刺激的性视频 | 成人短篇在线视频夫妻刺激自拍| 正在播放老肥熟妇露脸| 97免费观看在线观看| 精品一区二区久久久久久| 蜜桃视频中文字幕二区三区| 麻豆国产国语精品三级在线观看| 日韩不卡在线免费观看视频| 日本东京热加勒比视频| 久久五月婷婷爱综合亚洲| 国产av一区二区三区| 深夜av免费在线观看| av成人黄色片在线播放| 小仙女精品经典三级永久| 日韩美女毛片啪啪响| 中文字幕国产精品专区| 欧美成人日本在线播放|