基于狄洛尼三角网生成算法的源代码(2)

2019-03-22 14:39

{

MyPoint goodPoint=null;

for(int i=1;i<=pointSet.size();i++) { MyPoint activePoint=pointSet.get(i);

if(this.isOnLeft(activePoint, pointSet))//判断当前活动点是不是在直线的左边 { //在直线左边 double minCos=this.getCos(activePoint, pointSet); int good=i; for(int j=i+1;j<=pointSet.size();j++)

{//对当前活动边的左边点进行空圆准则检验

if(this.isOnLeft(pointSet.get(j), pointSet))//判断当前活动点是不是 { double cos=this.getCos(pointSet.get(j), pointSet); if(cos

goodPoint=pointSet.get(good); /*

* 下面是生成边后的后期处理 */

newEdge1=new

在直线的左边

//生成的第一边 MyEdge

MyEdge(this.getBeginPoint(pointSet),goodPoint); newEdge1.addUseCount(); if(edgeSet.containsValue(newEdge1)) { MyEdge.count--; for(int k=1;k<=edgeSet.size();k++) { if(edgeSet.get(k).equals(newEdge1)) { edgeSet.get(k).addUseCount(); break; } } }else

edgeSet.put(newEdge1.id, newEdge1);

newEdge2=new

//生成的第二边 MyEdge

MyEdge(goodPoint,this.getEndPoint(pointSet)); newEdge2.addUseCount(); if(edgeSet.containsValue(newEdge2)) { MyEdge.count--; for(int k=1;k<=edgeSet.size();k++) { if(edgeSet.get(k).equals(newEdge2)) { edgeSet.get(k).addUseCount(); break; } } }else edgeSet.put(newEdge2.id, newEdge2);

//对第三边进行处理 this.addUseCount(); this.turnBeginAndEnd(); //生成三角形,并加入到三角形集合中 MyTriangle newTriangle=new MyTriangle(this.getBeginPoint(pointSet),goodPoint,this.getEndPoint(pointSet),edgeSet); triangleSet.put(newTriangle.id, newTriangle); break; } } return goodPoint; } /*

* 此方法是将某一点与当前边的顶点角的余弦值返回 */

private double getCos(MyPoint p,Map pointSet) { Point OA=new Point(pointSet.get(this.begin).x-p.x,pointSet.get(this.begin).y-p.y); Point OB=new Point(pointSet.get(this.end).x-p.x,pointSet.get(this.end).y-p.y); double OALength=Math.sqrt(OA.x*OA.x+OA.y*OA.y); double OBLength=Math.sqrt(OB.x*OB.x+OB.y*OB.y); return (OA.x*OB.x+OA.y*OB.y)/(OALength*OBLength);

} }

import java.util.*; import java.io.*;

public class MyPoint { public static int count=0; public int id; public int x; public int y;

private String info;

public MyPoint(int x,int y) { this.id=++count; this.x=x; this.y=y; }

public void setInfo(String info) { this.info=info; }

public String getInfo() { return this.info; }

public double distance(int x,int y) { int tempx=(this.x-x)*(this.x-x); int tempy=(this.y-y)*(this.y-y); return Math.sqrt((tempx+tempy)); }

public double distance(MyPoint p) { int tempx=(this.x-p.x)*(this.x-p.x); int tempy=(this.y-p.y)*(this.y-p.y); return Math.sqrt((tempx+tempy)); } /*

* 下面这个方法是找寻主叫点在点集中与之最近的点 * 返回的是与之最近点的引用 */

public MyPoint getMinDistancePoint(Map pointSet) { int minID=this.id; double minDistance=Double.MAX_VALUE; for(int i=1;i<=pointSet.size();i++) { if(i==this.id) continue; double temp=this.distance(pointSet.get(i)); if(minDistance>temp) { minDistance=temp; minID=i; } } return pointSet.get(minID); } /*

*下面的方法是将点集中的点全部输出到文件中 */

public static boolean savePoints(Map pointSet) { boolean flag=false; File file=new File(\ try { PrintStream ps=new PrintStream(file); PrintStream temp=System.out; System.setOut(ps); for(int i=1;i<=pointSet.size();i++) System.out.println(pointSet.get(i).id+\ flag=true; System.setOut(temp); //temp.close(); ps.close(); }catch(IOException e) { flag=false; } return flag; } /*

* 下面的方法是将文件中的点加载到内存中 */

public static boolean readPoints(Map pointSet,String filename)

{ boolean flag=false; File file=new File(filename); try { FileInputStream in=new FileInputStream(file); Scanner fromfile=new Scanner(in); while(fromfile.hasNextInt()) { fromfile.nextInt(); MyPoint point=new MyPoint(fromfile.nextInt(),fromfile.nextInt()); pointSet.put(point.id, point); } flag=true; in.close(); }catch(IOException e) { return flag; } return flag; } }

import javax.swing.*; import java.awt.*;

import java.awt.event.*; import java.util.*;

public class MyTin extends JFrame { public static void main(String[] agrs) { MyTin tin=new MyTin(\三角网的生成\ } private MyPanel show; private JButton begin; public MyTin(String title)


基于狄洛尼三角网生成算法的源代码(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:江西省吉安县二中2013届高三4月第四次周考试卷 理科数学 Word版

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: