用java实现:一个斜向矩形,已知4个点,判断任意一点是不是在区域内?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用java实现:一个斜向矩形,已知4个点,判断任意一点是不是在区域内?相关的知识,希望对你有一定的参考价值。

用java实现:一个斜向矩形,已知4个点,判断任意一点是否在区域内?
用最简单的语言编写 直接可用的

参考技术A 将这个矩形封装成java中的矩形类,然后java矩形类提供了一个判断任意点是否在该矩形区域中的contain(int x,int y)方法。追问

求具体的可运行的代码

追答

import java.awt.Rectangle; //导入java包

Rectangle myRectangle=new Rectangle(int x,int y,int width,int height);
//构造一个左上角为(x,y),宽度为width,高度为height的矩形Rectangle,具体数值你根据已知形
//的4点确定
myRecangle.contains(int x,int y);
//判断该矩形是否包含位于指定位置(x,y)的点。

追问

我需要一个可以运行的完整的程序

参考技术B 如果你有java基础的话,应该能看得懂我的意思:
public class Test extends JFrame
public static void main(String[] args)
Test test = new Test();

test.addMouseListener(new MyMonitor());
test.setVisible(true);


class MyMonitor extends MouseAdapter
@Override
public void mouseClicked(MouseEvent e)
System.out.println("x=" + e.getX());
System.out.println("y=" +e.getY());



再用if判断就可以了!
参考技术C 我想问一下,你说的那四个点是矩形的四个角的坐标吗?追问

是的

追答

public class Test
public static void main(String[] args)
Point p1=new Point(0, 0);
Point p2=new Point(3, 0);
Point p3=new Point(3, 1);
Point p4=new Point(0, 1);

Point p5=new Point(2, 1.1);

double len51=Math.pow(p5.x-p1.x, 2)+Math.pow(p5.y-p1.y,2);
double len52=Math.pow(p5.x-p2.x, 2)+Math.pow(p5.y-p2.y,2);
double len53=Math.pow(p5.x-p3.x, 2)+Math.pow(p5.y-p3.y,2);
double len54=Math.pow(p5.x-p4.x, 2)+Math.pow(p5.y-p4.y,2);

double r1=Math.acos((len51+len52-9)/(2*Math.pow(len51, 0.5)*Math.pow(len52, 0.5)));
double r2=Math.acos((len52+len53-1)/(2*Math.pow(len52, 0.5)*Math.pow(len53, 0.5)));
double r3=Math.acos((len53+len54-9)/(2*Math.pow(len53, 0.5)*Math.pow(len54, 0.5)));
double r4=Math.acos((len54+len51-1)/(2*Math.pow(len54, 0.5)*Math.pow(len51, 0.5)));

System.out.println(r1+r2+r3+r4);



class Point
double x;
double y;
public Point(double x, double y)
super();
this.x = x;
this.y = y;


追问

运行的输出怎么是个数字呢?我需要的判断是否落于该矩形当中

追答

你理解了我的意思就对了啊,只有落在矩形内的点,包括在边上的点。那四个角度的总和才会等于2pi啊。你画下图,把任意一点和四个顶点连线。看那四个夹角就明白了。所以如果你打印出来是6.28什么的额,就是在里面了啊。具体的的数值你自己替换,比如我定义的是3*1的矩形。所以求r1什么的时候,是减去3*3或者1*1的。估计你高中的数学也是混过来的吧

本回答被提问者采纳

平面坐标系中 如何判断某一点在一矩形区域内?

平面坐标系中,点坐标已知,矩形四点坐标已知,如何判断?
忘了说,用matlab 编程!!!
已经搞定了,因为要编程,所以可编程性是第一位的,我采用了矩形任意两个顶点坐标与要判断的点坐标所组成的三角形的面积,这样的三角形共有4个,求面积和;然后对矩形求面积,如果两者面积相等,则要判断的点坐标在矩形内,如果前者大于后者,点坐标在矩形外.
另外,求面积时使用坐标行列式来求,很简单.
还要谢谢两位网友回答这个问题.

x1=x1;x2=x2;y1=y1;y2=y2;%赋值矩形端点。矩形内坐标值范围为x∈(x1,x2),y∈(y1,y2)
X1=zeros(1,30);X2=zeros(1,30);Y1=zeros(1,30);Y2=zeros(1,30);%创建全零数组
b=0;c=0;
xx=x1:pi/100:x2;yy=y1:pi/100:y2
plot(xx,y1,xx,y2,x1,yy,x2,yy);%画出矩形
for a=1:30;%假设是30个点
x=X(1,a);y=Y(1,a);%1行30列矩阵X、Y为点坐标值矩阵,提取坐标值
if([x>x1,x<x2,y>y1,y<y2])
plot(x,y,'x','LineWidth',2,'Color','green');%在矩形内画绿X
b=b+1;
X1(b)=x;Y1(b)=y;%储存点坐标
else
plot(x,y,'x','LineWidth',2,'Color','red');%不在矩形内画红X
c=c+1;
X2(c)=x;Y2(c)=y;
end
end
刚接触matlab,正好在做,应该没问题。。
参考技术A 高中学过的有一种方法
具体叫什么记不得了
具体操作如下
矩形的四条边的直线方程写出来
然后列成等于0的形式
最后改为不等式组
上面和右边的一条为小于0
下面和左边的一条为大于0
设定好条件后就可以编程了
参考技术B 还要判断?

以上是关于用java实现:一个斜向矩形,已知4个点,判断任意一点是不是在区域内?的主要内容,如果未能解决你的问题,请参考以下文章

C语言怎么判断4个坐标坐标是不是构成矩形?

怎么判断当前坐标是不是在矩形内(外)部

平面坐标系中 如何判断某一点在一矩形区域内?

java知道四个点坐标,怎么判断一个点是否在这个矩形区域内(矩形可能是斜着放的,有一定的斜度)

java知道四个点坐标,怎么判断一个点是否在这个矩形区域内(矩形可能是斜着放的,有一定的斜度)

C++编程!已知矩形,判断输入的点是不是包含在该矩形内。