Java - 确定纬度和经度是否在形成矩形的一组坐标中

问题描述 投票:0回答:1

我有五个坐标要形成,因为它是一个矩形(x1,y1),(x2,y2),(x3,y3),(x4,y4),(x1,y1)。我将前四个点作为图表上矩形的边缘,但我不知道如何处理第五组坐标,这些坐标基本上与第一组坐标完全相同。
然后,我得到了纬度和经度坐标(x,y)来检查它们是否在上面的矩形内。我想过使用类似于下面代码的东西,但我对如何处理第五个坐标感到困惑。这不会形成一个矩形,但它与第一组完全相同!

public class Main {
   //main method
   public static void main (String[] args) {

       //declared the variables and initialized the point values
      int x1 = 1;
      int y1 = 2;
      int x2 = 4;
      int y2 = 2;
      int x3 = 1;
      int y3 = 5;
      int x4 = 4;
      int y4 = 5;
      
      int x5 = 1; //not used in creating rectangle boundary
      int y5 = 2; //not used in creating rectangle boundary

      //given point to be checked
      int x = 2;
      int y = 2;

      //calling the user defined method to check if point lies inside rectangle
      if (checkPoint(x1,y1, x2,y2, x3,y3, x4,y4, x,y))
         System.out.print("Yes, given point lies inside rectangle");
      else
         System.out.print("No, given point does not lie inside rectangle");
   }

   //user defined method to find area of triangle
   static float triangleArea(int x1, int y1, int x2, int y2, int x3, int y3) {
      return (float)Math.abs((x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) / 2.0);
   }

   //user defined method to check whether point lies inside rectangle or not
   static boolean checkPoint(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, int x, int y) {

      //area of rectangle ABCD
      float ABCD = (x1*(y2-y3) + x2*(y3-y1) + x3*(y1-y2))/2 + (x1*(y4-y3) + x4*(y3-y1) + x3*(y1-y4))/2;

      //find area of triangle PAB
      float PAB = triangleArea(x, y, x1, y1, x2, y2);

      //find area of triangle PBC
      float PBC = triangleArea(x, y, x2, y2, x3, y3);

      //find area of triangle PCD
      float PCD = triangleArea(x, y, x3, y3, x4, y4);

      // find area of triangle PAD
      float PAD = triangleArea(x, y, x1, y1, x4, y4);

      //check if area of rectangle is
      //equal to areas formed by four triangles
      if(ABCD == PAB + PBC + PCD + PAD)
      //then return true
         return true;
      else
         //else return false
         return false;
   }
}

上面的代码没有找到指定矩形内的纬度和经度(x,y),所以不确定是否是因为我没有使用第五个坐标或其他东西。 任何帮助将不胜感激。干杯!

java latitude-longitude
1个回答
0
投票
C+----+D
 |    |
 |    |
 |    |
 |    |
A+-P--+B

A = (x1, y1) = (1, 2);
B = (x2, y2) = (2, 4);
C = (x3, y3) = (1, 5);
D = (x4, y4) = (4, 5);

问题1:你的矩形面积公式是错误的。

例如数据,您应该得到 9.0,但是却得到 8.0

float ABCD = 2.0 * triangleArea(x1, y1, x2, y2, x3, y3);

问题 2:你对三角形求和错误。

您将 PAB + PBC + PCD + PAD 相加

您应该对 PAB + PAC + PCD + PBD 求和

请注意,例如您的数据结果恰好相同

问题3:舍入误差

参见 在 Java 中使用 == 比较浮点数有什么问题?

参见 浮点数学是否被破坏?

问题 4:存在更好的算法

你的矩形的边恰好与轴平行。

© www.soinside.com 2019 - 2024. All rights reserved.