zoukankan      html  css  js  c++  java
  • 已知两条线段端点,判断是否相交及交点

    Function TriAreaSize(ByVal ax As Double, ByVal ay As Double, ByVal bx As Double, ByVal by As Double, ByVal cx As Double, ByVal cy As Double) As Double

    TriAreaSize = ((ax - cx) * (by - cy) - (ay - cy) * (bx - cx)) * 0.5

    End Function

    Function GetIfTwoLineIntr(ByVal ax As Double, ByVal ay As Double, ByVal bx As Double, ByVal by As Double, _
    ByVal cx As Double, ByVal cy As Double, ByVal dx As Double, ByVal dy As Double, _
    ByRef IntrX As Double, ByRef IntrY As Double) As Boolean

    Dim area_abc, area_abd As Double
    Dim area_cda, area_cdb As Double
    Dim t, ddx, ddy As Double

    GetIfTwoLineIntr = True

    area_abc = Nis_Fun.TriAreaSize(ax, ay, bx, by, cx, cy)
    area_abd = Nis_Fun.TriAreaSize(ax, ay, bx, by, dx, dy)

    If area_abc * area_abd < 0 Then Exit Function

    area_cda = Nis_Fun.TriAreaSize(cx, cy, dx, dy, ax, ay)
    area_cdb = Nis_Fun.TriAreaSize(cx, cy, dx, dy, bx, by)

    If area_cda * area_cdb < 0 Then Exit Function

    GetIfTwoLineIntr = False

    t = area_cda / (area_abd - area_abc)
    ddx = t * (bx - ax)
    ddy = t * (by - ay)

    IntrX = ax + ddx
    IntrY = ay + ddy

    End Function

  • 相关阅读:
    [Codeforces 1290C]Prefix Enlightenment
    [JLOI 2015]战争调度
    [APIO 2010]特别行动队
    [CEOI 2004]锯木厂选址
    [USACO 08MAR]土地购买
    [HNOI 2017]大佬
    [NOI 2011]NOI 嘉年华
    [SHOI 2013]超级跳马
    [NOI 2005]瑰丽华尔兹
    [SCOI 2010]股票交易
  • 原文地址:https://www.cnblogs.com/xpvincent/p/7839992.html
Copyright © 2011-2022 走看看