15-6判断回旋镖的存在

问题描述

小M正在玩一个几何游戏,给定一个二维平面上的三个点 points,其中每个点用坐标 points[i] = [xi, yi] 表示。如果三点构成一个回旋镖,则返回 true。回旋镖的定义是三点不在一条直线上,并且这三个点互不相同。

请你帮助小M判断这些点是否构成一个回旋镖。


测试样例

样例1:

输入:points = [[1, 1], [2, 3], [3, 2]]
输出:True

样例2:

输入:points = [[1, 1], [2, 2], [3, 3]]
输出:False

样例3:

输入:points = [[0, 0], [1, 1], [1, 0]]
输出:True

def solution(points: list) -> bool:
    # 检查三点是否互不相同
    if points[0] == points[1] or points[0] == points[2] or points[1] == points[2]:
        return False
    
    # 解构三个点的坐标
    (x1, y1), (x2, y2), (x3, y3) = points
    
    # 计算叉积,判断三点是否共线
    # 使用的公式是: (x2 - x1) * (y3 - y1) != (y2 - y1) * (x3 - x1)
    return (x2 - x1) * (y3 - y1) != (y2 - y1) * (x3 - x1)

if __name__ == '__main__':
    # 测试用例
    print(solution(points=[[1, 1], [2, 3], [3, 2]]) == True)  # 输出: True
    print(solution(points=[[1, 1], [2, 2], [3, 3]]) == False)  # 输出: False
    print(solution(points=[[0, 0], [1, 1], [1, 0]]) == True)  # 输出: True

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值