gpt4 book ai didi

java - java中的多边形 "contains"函数不起作用

转载 作者:行者123 更新时间:2023-12-01 17:59:01 27 4
gpt4 key购买 nike

当我尝试使用多边形的“包含”函数检查特定点是否在多边形内部时,它给出了错误的输出。

为什么即使点(16,14)位于多边形上,“contains”函数也会返回错误值......

  import java.awt.Polygon;
import java.util.Scanner;

public class ACircleandaSquare
{
Scanner sc=new Scanner(System.in);
int xc,yc,r,w,h,x1,y1,x3,y3,x2,y2,x4,y4,m1,m2,vb1,vb2,vd1,vd2,cm1,cm2;

void getData()
{
w=sc.nextInt();
h=sc.nextInt();
xc=sc.nextInt();
yc=sc.nextInt();
r=sc.nextInt();
x1=sc.nextInt();
y1=sc.nextInt();
x3=sc.nextInt();
y3=sc.nextInt();

m1=((x3+x1)/2);
m2=((y3+y1)/2);
cm1=x3-m1;
cm2=y3-m2;
vb1=cm2;
vb2=-cm1;
vd1=-cm2;
vd2=cm1;
x2=(m1+vb1);
y2=(m2+vb2);
x4=(m1+vd1);
y4=(m2+vd2);
}

void perform()
{
int x[]={x1,x2,x3,x4};
int y[]={y1,y2,y3,y4};
Polygon P=new Polygon(x,y,4);

if(P.contains(16, 14))
{
System.out.println("yes");
}
else
{
System.out.println("no");

}
for(int i=0;i<h;i++)
{
for(int j=0;j<w;j++)
{
if(isInside(j,i) || P.contains(j, i))
{
System.out.print("#");
}
else
{
System.out.print(".");
}
}
System.out.println();
}
}



boolean isInside(int i,int j)
{
int z=((i-xc)*(i-xc))+(j-yc)*(j-yc);
if(z<=(r*r))
{
return true;
}
else
{
return false;
}
}
public static void main(String[] z)
{
ACircleandaSquare A1=new ACircleandaSquare();
A1.getData();
A1.perform();
}
}

为什么答案打印为“否”而不是"is"...?

最佳答案

来自 java.awt.Polygon#contains(int, int) 的文档

Determines whether the specified coordinates are inside this Polygon.

由于您位于边界上,因此它不在多边形内部。

编辑:

这是形状内部解释:

definition of insideness :

A point is considered to lie inside a Shape if and only if:

  • it lies completely inside theShape boundary or
  • it lies exactly on the Shape boundary and the space immediately adjacent to the point in the increasing X direction is entirely inside the boundary or
  • it lies exactly on a horizontal boundary segment and the space immediately adjacent to the point in the increasing Y direction is inside the boundary.

解释是这样的

  • 它恰好位于形状边界上:true
  • 在递增的 X 方向上紧邻该点的空间完全在边界内 : false

你的值(value)观:

int[] x = {16,12,8,12}

下一个 x 值为 12,因此递减。对于 8,值开始增加,因此这将匹配

关于java - java中的多边形 "contains"函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42390163/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com