如何在 Java 中检查 3 个有序点的方向?

javaobject oriented programmingprogramming

在本文中,我们将找到 3 个有序点的方向。这里的方向意味着给定的点在空间中形成顺时针、逆时针或共线形状。

在上图中,a、b、c 是检查空间形状方向的三个点。我们通过计算斜率找到三个给定点的方向。

计算斜率并计算 3 个有序点的方向。

线段的斜率

线段的斜率 $(a,b):\theta=\left ( y_{b}-y_{a} \right )/\left ( x_{b} -x_{a}\right )$

线段的斜率 $(b,c):\phi=\left ( y_{c} -y_{b}\right )/(x_{c}-x_{b})$

因此,方向取决于以下内容表达式:

$$(y_{b}-y_{a})(x_{c}-x_{b})-(y_{c}-y_{b})(x_{b}-x_{a})\:或\:(y2-y1)*(x3-x2)-(y3-y2)*(x2-x1)$$

即,它是正数、负数还是

  • 如果表达式为零,则 θ = φ。因此方向是共线的。

  • 如果表达式为负数,则 θ < φ。因此方向是逆时针的。

  • 如果表达式为正数,则 θ > φ。因此方向是顺时针的。

让我们开始吧!

向您展示一些实例

实例-1

假设 3 个有序点为 (0,3)、(4,2)、(3,1)

检查 3 个有序点的方向后,结果将是:

给定的 3 个点形式:顺时针

实例-2

假设 3 个有序点形式:逆时针

检查 3 个有序点的方向后,结果将是:

给定的 3 个点形式:逆时针

实例-3

假设 3 个有序点为 (2,2)、(3,3), (4,4)

检查 3 个有序点的方向后,结果将是:

给定的 3 个点形式:线性

算法

步骤 1 - 声明 3 个有序点。

步骤 2 - 将三个给定的点传递给表达式,即 (b.y - a.y) * (c.x - b.x) - (b.x - a.x) * (c.y - b.y)。

步骤 3 - 检查线性、顺时针和逆时针的条件。

步骤 4 - 打印结果。

多种方法

我们提供了不同方法的解决方案。

  • 通过采用静态输入

  • 使用用户定义方法

让我们逐一查看程序及其输出。

方法 1:使用静态输入

在该方法中,首先将 3 个点传递给表达式以检查线性、顺时针和逆时针的情况。结果将被打印到输出中。

示例

public class Main{
   //main 方法
   public static void main(String[] args){
        //声明变量
        int x1=0, y1=1;
        int x2=4, y2=3;
        int x3=3, y3=2;
        
        //检查3个有序点的表达式
        int val = (y2 - y1) * (x3 - x2) - (x2 - x1) * (y3 - y2);
        
        //检查共线
        if (val == 0){
            //打印共线方向
            System.out.print("给定的3个点形式:线性");
        }
        
        //检查顺时针
        else if(val > 0){
            
            //打印顺时针方向
            System.out.print("给定的3个点形式:顺时针");
        } else {
        
            //打印逆时针方向
            System.out.print("给定的3个点形式:逆时针");
        }
   }
}

输出

给定的 3 个点形式:顺时针

方法 2:使用用户定义的方法

在该方法中,首先使用用户定义的方法将 3 个点传递给表达式,以检查线性、顺时针和逆时针的情况。并将结果打印到输出中。

示例

public class Main {
    public static void main(String[] args){
        Point a = new Point(2, 2);
        Point b = new Point(3, 3);
        Point c = new Point(4, 4);
        
        //调用用户定义的方法
        int o = orientation(a, b, c);
        
        //检查线性方向
        if (o==0)
        
        //打印线性方向
        System.out.print("给定的 3 个点形式:线性");
        
        //检查顺时针方向
        else if (o == 1)
        
        //打印顺时针方向
        System.out.print("给定的 3 个点形式:顺时针");
        else
        
        //打印逆时针方向
        System.out.print("给定的 3 个点形式:逆时针");
    }

    // 用户定义方法
    public static int orientation(Point a, Point b, Point c){
    
        //用于检查 3 个有序点的表达式
        int val = (b.y - a.y) * (c.x - b.x) - (b.x - a.x) * (c.y - b.y);
        
        // 检查共线
        if (val == 0) return 0;
        
        // 检查顺时针还是逆时针
        return (val > 0)? 1: 2;
    }
}
class Point{
   int x, y;
   Point(int x,int y){
      this.x=x;
      this.y=y;
   }
}

输出

给定的 3 个点形式:顺时针

在本文中,我们探讨了如何使用 Java 编程语言检查 3 个有序点的方向。


相关文章