⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 polyprocess.java

📁 主要为一个空间信息管理系统
💻 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 + -