简单题:判断回旋镖的存在| 豆包MarsCode AI刷题

63 阅读3分钟

题目要求

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

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

思路分析

根据回旋镖的定义,我想到的还是利用数学知识来解决,即根据斜率 k是否相等来判断,至于三个点互不相同就很简单了,使用Arrays.equals( )方法就可以判断了。

代码实现

import java.util.Arrays;

public class Main {
    public static boolean solution(int[][] points) {
        if(Arrays.equals(points[0], points[1])||Arrays.equals(points[0], points[2])||Arrays.equals(points[1], points[2])){
            return false;
        }
        // write code here
        int x1=points[0][0],y1=points[0][1];
        int x2=points[1][0],y2=points[1][1];
        int x3=points[2][0],y3=points[2][1];
        if((y3-y2)*(x2-x1)==(y2-y1)*(x3-x2)){
            return false;
        }else{

        return true;
    }

   
}

public static void main(String[] args) {
    System.out.println(solution(new int[][]{{1, 1}, {2, 3}, {3, 2}}) == true);
    System.out.println(solution(new int[][]{{1, 1}, {2, 2}, {3, 3}}) == false);
    System.out.println(solution(new int[][]{{0, 0}, {1, 1}, {1, 0}}) == true);
}
}

知识点总结

  • 数组比较:使用Arrays.equals检查是否有两个点相同。

  • 坐标几何:通过计算斜率判断点的共线性。

  • 交叉乘法比较斜率:使用交叉乘法避免除法操作。

个人思考

在处理斜率时,通过交叉乘法来避免除法,这样的数学处理思路让我体会到,数学知识在编程中的应用可以直接提升代码的效率和可靠性。通过这段代码可以看到,数学并不是简单的公式代入,而是找到一种可靠且简便的方法。它提醒我,在解决类似几何问题时,可以试着运用这种替代性思路来减少误差。

学习建议

  1. 夯实几何基础知识

    • 理解几何中的数学概念:几何问题的核心在于对数学概念的理解,比如斜率、坐标变化、点与线的关系等。可以回顾基础几何知识,特别是斜率的计算、平面几何中的向量等。
    • 通过手动推导加深理解:尝试在纸上手动推导几何关系。比如手动计算三点共线的公式,通过具体数字验证代码逻辑。手动推导不仅让数学关系更直观,还能培养准确的数学直觉。
  2. 多练习不同几何问题

    • 拓展几何问题的练习:尝试解决其他与几何相关的编程题,比如三角形面积、判断点在多边形内、凸包算法等。这些问题都有很强的几何基础,可以加深对坐标和线段处理的理解。
    • 逐步提高题目难度:从简单的共线性判断,过渡到需要更多逻辑处理的几何题。分阶段地提升问题难度会帮助你积累更多的几何和算法技巧。

小菜鸟在不断进步~~~一起加油!   (2024.11.08)