合肥工业大学操作系统绘制前驱图

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课 程 设 计

绘制描述事件先后顺序的前驱图

计算机科学与技术09-2

2010 年 6 月20日

设计题目 学 号

专业班级 学生姓名

指导教师

合肥工业大学课程设计任务书

第一章课程设计概述

1.1 设计任务:设计一个可以绘制前驱图的界面程序

1.2 设计要求:建立前驱图的数据结构描述;

建立绘制前驱图的例程,包括结点和有向边;

可以删除、添加结点或有向边;

可用鼠标在窗口的任意位置指点,确定结点或有向边位置;

可以拖动现有结点的位置,与该结点相连的有向边也随之移动;

可以将前驱图存入文件,从文件中取出;

第二章开发环境

Java jdk1.6,eclipse

第三章程序算法与实现

●绘制结点算法简述

先绘制一个圆,将数字转化为字符,再在圆中绘制字符

●绘制带剪头直线算法简述

先绘制一条直线,在直线的一端绘制一个三角形

第四章程序实现---数据结构

Vector利用vector向量容器存放point数据结构

第五章程序实现---程序清单

Node.java

package com.draw;

import java.awt.Graphics2D;

public class Node {

/*绘制结点函数*/

public void drawNode(int x,int y, int n,Graphics2D g){

String str=Integer.toString(n);

g.drawOval(x, y, 20, 20);

g.drawString(str, x+7, y+15);

}

}

Line.java

package com.draw;

import java.awt.Graphics2D;

import java.awt.geom.GeneralPath;

public class Line {

/*绘制直线函数*/

public void drawLine(int sx, int sy, int ex, int ey,Graphics2D g){

double H = 10; // 箭头高度

double L = 4; // 底边的一半

int x3 = 0;

int y3 = 0;

int x4 = 0;

int y4 = 0;

double awrad = Math.atan(L / H); // 箭头角度

double arraow_len = Math.sqrt(L * L + H * H); // 箭头的长度

double[] arrXY_1 = rotateVec(ex - sx, ey - sy, awrad, true, arraow_len); double[] arrXY_2 = rotateVec(ex - sx, ey - sy, -awrad, true, arraow_len); double x_3 = ex - arrXY_1[0]; // (x3,y3)是第一端点

double y_3 = ey - arrXY_1[1];

double x_4 = ex - arrXY_2[0]; // (x4,y4)是第二端点

double y_4 = ey - arrXY_2[1];

Double X3 = new Double(x_3);

x3 = X3.intValue();

Double Y3 = new Double(y_3);

y3 = Y3.intValue();

Double X4 = new Double(x_4);

x4 = X4.intValue();

Double Y4 = new Double(y_4);

y4 = Y4.intValue();

// 画线

g.drawLine(sx, sy, ex, ey);

GeneralPath triangle = new GeneralPath();

triangle.moveTo(ex, ey);

triangle.lineTo(x3, y3);

triangle.lineTo(x4, y4);

triangle.closePath();

//实心箭头

g.fill(triangle);

//非实心箭头

//g.draw(triangle);

}

public static double[] rotateVec(int px, int py, double ang,

boolean isChLen, double newLen) {

double mathstr[] = new double[2];

// 矢量旋转函数,参数含义分别是x分量、y分量、旋转角、是否改变长度、新长度 double vx = px * Math.cos(ang) - py * Math.sin(ang);

double vy = px * Math.sin(ang) + py * Math.cos(ang);

if (isChLen) {

double d = Math.sqrt(vx * vx + vy * vy);

vx = vx / d * newLen;

vy = vy / d * newLen;

mathstr[0] = vx;

mathstr[1] = vy;

}

return mathstr;

}

}

Recorder.java

package com.recorder;

import java.awt.Point;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileReader;

import java.io.FileWriter;

import java.util.Vector;

import com.view.DrawPanel;

public class Recorder {

FileWriter fw=null;

BufferedWriter bw=null;

FileReader fr=null;

BufferedReader br=null;

//保存结点记录

public void keepNodeRecord(){

try {

//创建

fw=new FileWriter("D://myNodeRecording.txt");

bw=new BufferedWriter(fw);

for(int i=0;i

Point p=DrawPanel.nodes.get(i);

String recode=p.x+" "+p.y;

bw.write(recode+"\r\n");

}

} catch (Exception e) {

e.printStackTrace();

}finally{

相关文档
最新文档