📄 polyprocess.java
字号:
package edu.whu.poly;
import java.awt.*;
import java.util.HashMap;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
public class polyProcess
{
public polyProcess()
{
}
public Polygon formPoly(int[] x, int[] y, int n)
{
Polygon pg = new Polygon(x, y, n);
return pg;
}
public void test_RgnInRgn()
{
int[] x2 =
{
12,22, 17,17,12};
int[] y2 =
{
0, 0, 20,20, 0};
Polygon pg=new Polygon(x2,y2,5);
if(pg.contains(10,5))
{
System.out.println("contain");
}
}
public boolean test_RgnAndRgn(polyStruct polySrc,polyStruct polyTarget)
{
if (RgnAndRgn(polySrc.PointNumber, polySrc.getPointArray(), polyTarget.PointNumber, polyTarget.getPointArray()))
{
return true;
}
else
{
return false;
}
}
boolean RgnAndRgn(int PointNumber1, Point[] Point1, int PointNumber2,
Point[] Point2)
{
int counter;
if (PointNumber2 < 3 || PointNumber2 < 3)
System.out.println("is not polygon");
int x1, y1, x2, y2;
int NumbAll, Numb;
boolean pb1, pb2;
Point[] pointxy;
pointxy = new Point[PointNumber1 * PointNumber2 + 2];
NumbAll = 0;
for (int i = 0; i < PointNumber1 - 1; i++)
{
x1 = Point1[i].x;
y1 = Point1[i].y;
x2 = Point1[i + 1].x;
y2 = Point1[i + 1].y;
if (LineRgn(x1, y1, x2, y2, PointNumber2, Point2))
{
//System.out.println("poly intersects");
return true;
}
}
int[] Pgx = new int[PointNumber1];
int[] Pgy = new int[PointNumber1];
for (int k = 0; k < PointNumber1; k++)
{
Pgx[k] = Point1[k].x;
Pgy[k] = Point1[k].y;
}
for (int j = 0; j < PointNumber2; j++)
{
Polygon pg = new Polygon(Pgx, Pgy, PointNumber1);
if (pg.contains(Point2[j]))
{
//System.out.println("poly intersects");
return true;
}
}
int[] Pgx2 = new int[PointNumber2];
int[] Pgy2 = new int[PointNumber2];
for (int t = 0; t < PointNumber2; t++)
{
Pgx2[t] = Point2[t].x;
Pgy2[t] = Point2[t].y;
}
for (int f = 0; f < PointNumber1; f++)
{
Polygon pg2 = new Polygon(Pgx2, Pgy2, PointNumber2);
if (pg2.contains(Point1[f]))
{
//System.out.println("poly intersects");
//System.out.println(f+""+Point1[f].x+Point1[f].y);
return true;
}
}
return false;
}
public boolean LineRgn(int xx1, int yy1, int xx2, int yy2, polyStruct polyTarget)
{
int pb, sm, pb1;
int x1, y1, x2, y2;
Point[] point1,pPoint;
pPoint=polyTarget.getPointArray();
for (int i = 0; i < polyTarget.PointNumber - 1; i++)
{
x1 = pPoint[i].x;
y1 = pPoint[i].y;
x2 = pPoint[i + 1].x;
y2 = pPoint[i + 1].y;
if (LineLine(xx1, yy1, xx2, yy2, x1, y1, x2, y2))
{
return true;
}
}
return false;
}
public boolean LineRgn(int xx1, int yy1, int xx2, int yy2, int pNumb,
Point[] pPoint)
{
int pb, sm, pb1;
int x1, y1, x2, y2;
Point[] point1;
for (int i = 0; i < pNumb - 1; i++)
{
x1 = pPoint[i].x;
y1 = pPoint[i].y;
x2 = pPoint[i + 1].x;
y2 = pPoint[i + 1].y;
if (LineLine(xx1, yy1, xx2, yy2, x1, y1, x2, y2))
{
return true;
}
}
return false;
}
public boolean LineLine(int m_X1, int m_Y1, int m_X2, int m_Y2, int xxx1,
int yyy1, int xxx2, int yyy2)
{
int xx1, xx2, yy1, yy2;
int x1, x2, y1, y2, n1, n2, n3, n4;
int k1, k2;
if (m_X1 > m_X2)
{
xx1 = m_X2;
xx2 = m_X1;
yy1 = m_Y2;
yy2 = m_Y1;
}
else
{
xx1 = m_X1;
xx2 = m_X2;
yy1 = m_Y1;
yy2 = m_Y2;
}
if ( (xx1 - xx2) == 0 && (yy1 - yy2) == 0)
{
return false;
}
if (xxx1 > xxx2)
{
x1 = xxx2;
x2 = xxx1;
y1 = yyy2;
y2 = yyy1;
}
else
{
x1 = xxx1;
x2 = xxx2;
y1 = yyy1;
y2 = yyy2;
}
if ( (x1 - x2) == 0 && (y1 - y2) == 0)
{
return false;
}
if ( (x1 - x2) == 0 && (xx1 - xx2) == 0)
{
if (x1 != xx1)
{
return false;
}
xxx1 = x1;
n1 = Math.min(yy1, yy2);
n2 = Math.max(yy1, yy2);
n3 = Math.min(y1, y2);
n4 = Math.max(y1, y2);
if (n1 > n4 || n2 < n3)
{
return false;
}
else
if (n1 == n4 || n2 == n3)
{
if (n1 == n4)
{
yyy1 = n1;
return true;
}
if (n2 == n3)
{
yyy1 = n2;
return true;
}
else
{
yyy1 = Math.max(n1, n3);
yyy2 = Math.min(n2, n4);
return true;
}
}
}
else if ( (x1 - x2) == 0 && xx1 != xx2)
{
xxx1 = x1;
if (! (x1 >= xx1 && x1 <= xx2))
{
return false;
}
yyy1 = yy1 + (x1 - xx1) / (xx2 - xx1) * (yy2 - yy1);
if (yyy1 >= y1 && yyy1 < y2 || yyy1 >= y2 && yyy1 < y1)
{
return true;
}
else
{
return false;
}
}
else if (x1 != x2 && (xx1 - xx2) == 0)
{
xxx1 = xx1;
if (! (xx1 >= x1 && xx1 <= x2))
{
return false;
}
yyy1 = y1 + (xx1 - x1) / (x2 - x1) * (y2 - y1);
if (yyy1 >= yy1 && yyy1 <= yy2 || yyy1 >= yy2 && yyy1 <= yy1)
{
return true;
}
else
{
return false;
}
}
else
{
k1 = (y2 - y1) / (x2 - x1);
k2 = (yy2 - yy1) / (xx2 - xx1);
if (k1 == k2)
{
if (x1 > xx2 || x2 < xx1)
{
return false;
}
else
{
n1 = y1 + (0 - x1) * k1;
n2 = yy1 + (0 - x1) * k2;
if (n1 != n2)
{
return false;
}
else
{
n3 = Math.max(xx1, x1);
n4 = Math.min(xx2, x2);
xxx1 = n3;
yyy1 = y1 + (n3 - x1) * k1;
if (n3 == n4)
{
return true;
}
xxx2 = n4;
yyy2 = y1 + (n4 - x1) * k1;
return true;
}
}
}
else
{
xxx1 = (yy1 - y1 + x1 * k1 - xx1 * k2) / (k1 - k2);
yyy1 = y1 + (xxx1 - x1) * k1;
if ( (xxx1 >= x1 && xxx1 <= x2) && (xxx1 >= xx1 && xxx1 <= xx2))
{
return true;
}
else
{
return false;
}
}
}
return false;
}
public static void main(String[] args)
{
polyProcess polyProcess1 = new polyProcess();
//polyProcess1.test_RgnAndRgn();
//polyProcess1.test_RgnInRgn();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -