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

📄 edge.java

📁 java算法大全
💻 JAVA
字号:
/*Edge class*/import java.awt.*;import java.io.*;import java.util.*;import java.lang.*;public class Edge implements ClassInterface{	//Variable declarations	Arrow arrow_head, arrow_head_1;	Node start, end, representative;	int start_node, end_node;		double value;	int index;	int end_x;   int end_y;	static final double CR_RATIO = 0.9;  //0.605; 	static final int Self = -1;	Color value_colour, arc_colour, arrow_colour;	boolean show_cost = false;	static final int FULL_CIRCLE = 350;		//method declarations   public Edge( Node start, Node end, int value ) {			this.start = start;		this.end = end;		this.value = value;		index = 0;		end_x = 0;		end_y = 0;		value_colour = Color.red;		arc_colour = Color.black;			arrow_colour = arc_colour;    	}	public boolean New( ) {		if (start.Rep().Get_ID() == -1 && end.Rep().Get_ID() == -1) {			Set_Rep( start ); 				return true;			}		else			return false;		}		public boolean Is_From( ) {		System.out.println("Edge, is_from: from "+start.Get_ID()+", end "+end.Get_ID()+", "+start.Rep().Get_ID()+", "+end.Rep().Get_ID());		if (start.Rep().Get_ID() != -1 && end.Rep().Get_ID() == -1) {			Set_Rep( start.Rep() );			return true;			}		else			return false;		}		public boolean Is_To( ) {		System.out.println("Edge, is_to: from "+start.Get_ID()+", end "+end.Get_ID()+", "+start.Rep().Get_ID()+", "+end.Rep().Get_ID());		if (start.Rep().Get_ID() == -1 && end.Rep().Get_ID() != -1) {			Set_Rep( end.Rep() );			return true;			}		else			return false;		}	public boolean Join( ) {		System.out.println("Edge, join: from "+start.Get_ID()+", end "+end.Get_ID()+", "+start.Rep().Get_ID()+", "+end.Rep().Get_ID());		if (start.Rep().Get_ID() != -1 && end.Rep().Get_ID() != -1 && start.Rep() != end.Rep() ) {			//Set_Rep( start.Rep() );			return true;			}		else			return false;		}	public Node Rep() {		return representative;		}	public void Set_Rep(Node N) {		representative = N;			start.Set_Rep(representative);		end.Set_Rep(representative);		System.out.println("updating: from = "+start.Get_ID()+", to = "+end.Get_ID()+", rep = "+representative.Get_ID());		}	public Node From_Node() {		return start;		}	public Node To_Node() {		return end;		}	public int Get_Start() {		int num;			num = start.Get_ID();		return (num);		}	public int Get_End() {		int num;			num = end.Get_ID();		return (num);		}	public double Cost() {		return value;		}	public boolean Cycle() {		if ( (start.Rep() == start.Rep()) && (end.Rep() == end.Rep()) ) return false;		else 			return start.Rep() == end.Rep();		}	public void Update_Rep() {		this.To_Node().Rep().Set_Rep( this.From_Node().Rep() );		}	public void Print_Edge( String s ) {		System.out.println( s + " .. ");		}	public void Set_Highlight(Color highlight_colour) {		this.arc_colour = highlight_colour;		this.arrow_colour = highlight_colour;		if (highlight_colour != Color.black) {			value_colour = Color.black;			}		else {			value_colour = Color.red;			}		}public void Draw_Edge( Graphics g , int num_arcs, int arrow_status) {		int start_x, start_y, end_x, end_y;		int mid_value_x, mid_value_y;		int mid_pt_x, mid_pt_y;		int pt_x, pt_y;		int x_diff, y_diff;		double distance, temp, angle, temp1;		double opp, adj, hyp, opp1, adj1;		Color node_colour;			double img_mid_x, img_mid_y;		double chord, img_dia; //for arcs		double mid_line, img_cir;		double temp3, temp4, temp5, temp6;		double img_x, img_y;		double start_angle, arc_angle, half_arc_angle;		double half_arc_angle_rad, temp_ang;		int testcase;		double img_x_e, img_y_e;		double a, b, c, gamma, alpha;		double determinant;		double numerator, denominator;		double tita;		double phi;		double yonx, xony;		double pts_array[] = new double[4];	 	double pt_angle;		int i;				//getting the scales for the node positions		double start_scale_x, start_scale_y, end_scale_x, end_scale_y;			start_scale_x = 1.00;		start_scale_y = 1.00;		end_scale_x = 1.00;		end_scale_y = 1.00;		yonx = 0.00;		xony = 0.00;		phi = 0.00;		tita = 0.00;		numerator = 0.00;			denominator = 0.00;		start_angle = 0;		arc_angle = 0;		testcase = 0;		img_mid_x = 0;		img_mid_y = 0;			img_y_e = 0.00;		img_x_e = 0.00;		opp = 0.00;		adj = 0.00;		opp1 = 0.00;		adj1 = 0.00;		pt_x = pt_y = 0;			determinant = 0.00;		for (i = 0; i < 4; i++) {			pts_array[i] = 0.00;			}				start_scale_x = start.Get_Scale_X();		start_scale_y = start.Get_Scale_Y();		end_scale_x = end.Get_Scale_X();		end_scale_y = end.Get_Scale_Y();			start_x = (int)((start.Mid_X())*start_scale_x);		start_y = (int)((start.Mid_Y())*start_scale_y);		end_x = (int)((end.Mid_X())*end_scale_x);		end_y = (int)((end.Mid_Y())*end_scale_y);		x_diff = end_x - start_x;			y_diff = end_y - start_y;		temp = Math.pow(x_diff,2) + Math.pow(y_diff,2);		distance = Math.sqrt(temp);		mid_pt_x = (end_x - start_x)/2 + start_x;		mid_pt_y = (end_y - start_y)/2 + start_y;					//drawing of arcs		//let the ratio between chord and imaginary radius be 2.5/4				chord = distance;		img_cir = CR_RATIO*chord;				temp3 = Math.pow((chord/2), 2);      temp4 = Math.pow(img_cir, 2);      temp5 = temp4 - temp3;      mid_line = Math.sqrt(temp5);		img_dia = 2*img_cir;			half_arc_angle_rad = Math.asin((chord/2)/img_cir);		temp6 = (half_arc_angle_rad/Math.PI)*180;		half_arc_angle = temp6;		arc_angle = 2*half_arc_angle;		temp_ang = ((90 - arc_angle)/2)*(Math.PI)/180;		hyp = img_cir;			yonx = (double)y_diff/(double)x_diff;		xony = (double)x_diff/(double)y_diff;		//new inclusion		tita = Math.atan((double)y_diff/(double)x_diff);		phi = Math.PI/2  - tita;		pts_array = Circle_Attr(x_diff, chord, mid_pt_x, mid_pt_y, mid_line, 						phi, tita, start_x, start_y, end_x, end_y);		img_mid_x = pts_array[0];		img_mid_y = pts_array[1];		testcase = (int)pts_array[2];		start_angle = Arc_Circle_Angle(pts_array[3], arc_angle, testcase);		img_x = img_mid_x - img_cir;      img_y = img_mid_y - img_cir;			g.setColor(arc_colour);			if (num_arcs != 1)  {			g.drawArc((int)img_x, (int)img_y, (int)img_dia, (int)img_dia, (int)start_angle, (int)arc_angle); 			pt_angle = (start_angle + arc_angle/2)*Math.PI/180;			pt_x = (int)Math.round(img_mid_x + img_cir*Math.cos(pt_angle));			pt_y = (int)Math.round(img_mid_y - img_cir*Math.sin(pt_angle));			}		else if (testcase != 10){			g.drawLine(start_x, start_y, end_x, end_y);			}		else if (testcase == 10) {			System.out.println("numarcs = "+num_arcs);			arc_angle = FULL_CIRCLE;			img_dia = start.diameter;			//g.drawArc((int)img_x, (int)img_y, (int)img_dia, (int)img_dia, (int)start_angle, (int)arc_angle);					g.drawArc((int)(start_x - img_dia), (int)(start_y - img_dia/2), (int)img_dia, (int)img_dia, (int)start_angle, (int)arc_angle);					}		if (arrow_status == 1) {			arrow_head = new Arrow(value_colour, value, start_x, start_y, end_x, end_y, img_mid_x, img_mid_y, img_cir, start_angle, arc_angle, arc_colour, num_arcs, mid_pt_x, mid_pt_y, show_cost, testcase, img_dia);			arrow_head.Draw_Arrow( g );			}		else {			if (show_cost) {				if (num_arcs != 1) {					g.setColor(value_colour);					g.drawString(""+value, pt_x, pt_y);					}				else {					g.setColor(value_colour);					g.drawString(""+value, mid_pt_x, mid_pt_y);					}				}			}			}	private double Arc_Circle_Angle(double start_angle, double arc_angle, int testcase) {				switch (testcase) {					case 1: start_angle = (start_angle)*180/Math.PI;break;			case 2: start_angle = 90 - (arc_angle/2);break;			case 3: start_angle = (Math.PI/2 + start_angle)*180/Math.PI;break;			case 4: start_angle = 180 - arc_angle/2;break;			case 5: start_angle = (Math.PI + start_angle)*180/Math.PI;break;			case 6: start_angle = 270 - (arc_angle)/2;break;			case 7: start_angle = (3*Math.PI/2 + start_angle)*180/Math.PI;break;			case 8: start_angle = 360 - (arc_angle)/2;break;			case 10: start_angle = 0.00;			default: break;			}			return start_angle;		}				private double[] Circle_Attr(int x_diff, double chord, double mid_pt_x, double mid_pt_y, double mid_line, double phi, double tita, int start_x, int start_y, int end_x, int end_y) { 		double img_mid_x, img_mid_y;		double start_angle, node_diameter = 0.00;		int testcase, i, attr_size = 4;		double[] attr = new double[attr_size];					img_mid_x = 0.00;		img_mid_y = 0.00;		start_angle = 0.00;		testcase = 0;				for (i = 0; i < attr_size; i++) {			attr[i] = 0.00;			}					if (x_diff < 0.00) {			img_mid_x = mid_pt_x + mid_line*Math.cos(phi);			img_mid_y = mid_pt_y - mid_line*Math.sin(phi);			if (tita < 0.00) {				testcase = 7;				start_angle = Math.abs(tita) - Math.atan((chord/2)/mid_line);				}			else if (tita > 0.00) {				testcase = 5;				start_angle = Math.abs(phi) - Math.atan((chord/2)/mid_line);				}			}		else if (x_diff > 0.00) {			img_mid_x = mid_pt_x - mid_line*Math.cos(phi);			img_mid_y = mid_pt_y + mid_line*Math.sin(phi);			if (tita < 0.00) {				testcase = 3;				start_angle = Math.abs(tita) - Math.atan((chord/2)/mid_line);				}			else if (tita > 0.00) {				testcase = 1;				start_angle = Math.abs(phi) - Math.atan((chord/2)/mid_line);				}			}		if ((start_x == end_x) && (start_y > end_y)) {        	testcase = 4;			img_mid_x = start_x + mid_line;         img_mid_y = start_y - (chord/2);         }		if ((start_x == end_x) && (start_y < end_y)) {           testcase = 8;			img_mid_x = start_x - mid_line;      	img_mid_y = start_y + (chord/2);         }		if ((start_x > end_x) && (start_y == end_y)) {           testcase = 6;			img_mid_x = start_x - (chord/2);         img_mid_y = start_y - mid_line;         }		if ((start_x < end_x) && (start_y == end_y)) {           testcase = 2;			img_mid_x = start_x + (chord/2);         img_mid_y = start_y + mid_line;         }		if ((start_x == end_x) && (start_y == end_y)) {           testcase = 10;			node_diameter = start.diameter;			img_mid_x = start_x - node_diameter;			img_mid_y = start_y - (node_diameter)/2;         System.out.println("in testcase 10, sd = "+node_diameter);         System.out.println("x = "+img_mid_x+", y = "+img_mid_y);			}				attr[0] = img_mid_x;		attr[1] = img_mid_y;		attr[2] = (double)testcase;		attr[3] = start_angle;				return attr;		}	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -