ข้าพเจ้าเชื่อว่าพระคุณของพระเจ้านั้นเพียงพอต่อชีวิตและครอบครัวของข้าพเจ้า

เกลือจืด
Location :


[ดู Profile ทั้งหมด]

ให้ทิปเจ้าของ Blog [?]
ฝากข้อความหลังไมค์
Rss Feed
Smember
ผู้ติดตามบล็อก : 6 คน [?]




Group Blog
 
 
เมษายน 2554
 
 12
3456789
10111213141516
17181920212223
24252627282930
 
2 เมษายน 2554
 
All Blogs
 
Friends' blogs
[Add เกลือจืด's blog to your web]
Links
 

 
JAVA APPLET GEAR GRAPH MITER

นี่ source code ที่ผมได้ทดลองเขียนโปรแกรม gear graph miter

มันก็เป็นแค่โปรแกรมต้นแบบ ที่ทดลอง
ใน source code ก็มีข้อบกพร่องมากอยู่
แต่มันพอจะใช้งานได้ หรือนำไปปรับแ้ก้ให้ดีกว่านี้ได้


ขอมอบเป็น public ให้ โปรแกรมเมอร์ทุกคนสามารถนำไปใช้งานได้
บังเอิญผมพยายาม search ใน net แล้ว ยังหาตัวอย่างไม่ได้
เลยทดลองเขียนเอง และอยากมอบให้เป็น สาธารณะชน

//--------------------- Java Source -----------------------------
import java.applet.*;
import java.awt.*;
import java.awt.geom.*;

public class GearGraph extends Applet {
private int x_center,y_center,round1,round2,grap;
private double x = 15, y = 50, w = 70, h = 70;
private int x1 = 15, y1 = 50, w1 = 70, h1 = 70;
private int x2 = 15, y2 = 50, w2 = 70, h2 = 70;
private int std = 0;
private int good = 0;
private static final double CONVERT_DEGREES_TO_RADIANS = Math.PI / 180 ;

private double cos(int x) {
Integer a = new Integer(x);
double y = a.doubleValue();
double z = Math.cos(y * CONVERT_DEGREES_TO_RADIANS );
return z;
}

private double sin(int x) {
Integer a = new Integer(x);
double y = a.doubleValue();
double z = Math.sin(y * CONVERT_DEGREES_TO_RADIANS );
return z;
}

public void init(){
x_center = Integer.parseInt(getParameter("X_CENTER"));
y_center = Integer.parseInt(getParameter("Y_CENTER"));
round1 = Integer.parseInt(getParameter("ROUND1"));
round2 = Integer.parseInt(getParameter("ROUND2"));
grap = Integer.parseInt(getParameter("GRAP"));

String X1= getParameter("X1");
String Y1= getParameter("Y1");
String W1= getParameter("W1");
String H1= getParameter("H1");
x1 = Integer.parseInt(X1);
y1 = Integer.parseInt(Y1);
w1 = Integer.parseInt(W1);
h1 = Integer.parseInt(H1);

String X2= getParameter("X2");
String Y2= getParameter("Y2");
String W2= getParameter("W2");
String H2= getParameter("H2");
x2 = Integer.parseInt(X2);
y2 = Integer.parseInt(Y2);
w2 = Integer.parseInt(W2);
h2 = Integer.parseInt(H2);

String D3= getParameter("STD");
std = Integer.parseInt(D3);
std = ( 180 - ((std * 180 ) / 100 ));

String D4 = getParameter("GOOD");
good = Integer.parseInt(D4);
good = ( 180 - ((good * 180 ) / 100 ));
}

public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
Ellipse2D e = new Ellipse2D.Double(x, y, w, h);
GradientPaint gp = new GradientPaint(75, 75, Color.WHITE, 95, 95,Color.GRAY , true);
g2.setPaint(gp);
g.fillArc(x1, y1, w1, h1, 0, 180);

gp = new GradientPaint(75, 75, Color.RED, 95, 95,Color.RED , true);
g2.setPaint(gp);
g.fillArc(x2, y2, w2, h2, 0, 180);

gp = new GradientPaint(75, 75, Color.YELLOW, 95, 95,Color.YELLOW , true);
g2.setPaint(gp);
g.fillArc(x2, y2, w2, h2, 0, std);

gp = new GradientPaint(75, 75, Color.GREEN, 95, 95,Color.GREEN , true);
g2.setPaint(gp);
g.fillArc(x2, y2, w2, h2, 0, good );

gp = new GradientPaint(75, 75, Color.BLACK, 95, 95,Color.BLACK , true);
g2.setPaint(gp);
for ( int i = 0 ; i < 11 ; i ++) {
int dd = i * 10 ;
dd = ( 180 - ((dd * 180 ) / 100 ));
Double p1 = cal_x(new Double(round1),dd,x_center);
Double p2 = cal_y(new Double(round1),dd,y_center);
Double p3 = cal_x(new Double(round2),dd,x_center);
Double p4 = cal_y(new Double(round2),dd,y_center);
Line2D l = new Line2D.Double( p1 , p2, p3, p4 );
BasicStroke s = new BasicStroke( 3.0f );
g2.setStroke(s);
g2.draw(l);
Font font = new Font("MS Sans Serif;",Font.PLAIN,10);
g.setFont(font);
g.setColor((Color)convertColor("navy"));
int a = p3.intValue();
int b = p4.intValue();
String txt = Integer.toString( i * 10 );
if ( i == 5 ) {
g.drawString(txt,a ,b - grap );
} else if ( i == 0 ) {
g.drawString(txt,a - grap ,b );
} else if ( i == 10 ) {
g.drawString(txt, a + grap ,b );
} else if ( i < 5 ) {
g.drawString(txt,a - grap , b - grap);
} else {
g.drawString(txt,a + grap , b - grap );
}

}

String NUM_TEXT = getParameter("NUM_TEXT");
int num_text = Integer.parseInt(NUM_TEXT);
for ( int i = 1 ; i < num_text + 1 ; i++) {
String txt = "";
String w = "TXT" + Integer.toString(i);
String TEXT = getParameter(w);
String lines[] = TEXT.split("|");
String fontType = lines[0];
int fontSize = Integer.parseInt(lines[1]);
Color color = convertColor(lines[2]);
int a = Integer.parseInt(lines[3]);
int b = Integer.parseInt(lines[4]);
txt = lines[5];

Font font = new Font(fontType,Font.PLAIN,fontSize);
g.setFont(font);
g.setColor(color);
g.drawString(txt,a,b);
}

// arrow
gp = new GradientPaint(75, 75, Color.BLUE, 95, 95,Color.BLUE , true);
g2.setPaint(gp);
GeneralPath gp1 = new GeneralPath();
String ARROW = getParameter("ARROW");
String arrow[] = ARROW.split(",");
int r = Integer.parseInt(arrow[0]);
int aabb = Integer.parseInt(arrow[1]);
//gp1.lineTo (a2,b2);
//200,193

int degree = ( 180 - ((aabb * 180 ) / 100 ));
Double mm = cal_x(new Double(100),degree,x_center);
Double nn = cal_y(new Double(100),degree,y_center);
gp1.moveTo( x_center,y_center);
gp1.lineTo (mm,nn);
g2.draw(gp1);

g.fillArc( x_center - 8, y_center - 8, 15, 15, 0, 360);
g.fillArc( mm.intValue() - 5 , nn.intValue() -5 , 10, 10, 0, 360);
}

private Double cal_x(Double r,int x,int center) {
Double mm;
int x_grap;
x_grap = 0;
if ( x >= 270 && x < 360 ) {
x = x - 270;
mm = new Double( r.doubleValue() * sin(x) ) ;
mm = new Double(center + mm.intValue());
mm = new Double(mm.intValue() + (x_grap/4));
} else if ( x >= 180 && x < 270 ) {
x = x - 180;
mm = new Double( r.doubleValue() * cos(x) ) ;
mm = new Double(center - mm.intValue());
mm = new Double(mm.intValue() - x_grap);
} else if ( x >= 90 && x < 180 ) {
x = x - 90 ;
mm = new Double( r.doubleValue() * sin(x) ) ;
mm = new Double(center - mm.intValue());
mm = new Double(mm.intValue() - x_grap);
} else {
mm = new Double( r.doubleValue() * cos(x) ) ;
mm = new Double(center + mm.intValue());
mm = new Double(mm.intValue() + (x_grap/4));
}
return mm;
}

private Double cal_y(Double r,int x,int center) {
Double nn;
int x_grap;
x_grap = 0;
if ( x >= 270 && x < 360 ) {
x = 270 - x;
nn = new Double( r.doubleValue() * cos(x) ) ;
nn = new Double(center + nn.intValue());
nn = new Double( nn.intValue() + x_grap);
} else if ( x >= 180 && x < 270 ) {
x = x - 180;
nn = new Double( r.doubleValue() * sin(x) ) ;
nn = new Double(center + nn.intValue());
nn = new Double(nn.intValue() + x_grap);
} else if ( x >= 90 && x < 180 ) {
x = x - 90 ;
nn = new Double( r.doubleValue() * cos(x) ) ;
nn = new Double(center - nn.intValue());
nn = new Double(nn.intValue() - x_grap);
} else {
nn = new Double( r.doubleValue() * sin(x) ) ;
nn = new Double(center - nn.intValue());
nn = new Double(nn.intValue() - x_grap);
}
return nn;
}
private Color convertColor(String strIn) {
Color ret;
ret = new Color(0,0,255);
// chk reserve word
strIn = strIn.toLowerCase();
if ( strIn.toLowerCase().equals("blue") ) {
ret = new Color(0,0,255);
} else if ( strIn.toLowerCase().equals("red") ) {
ret = new Color(255,0,0);
} else if ( strIn.toLowerCase().equals("green") ) {
ret = new Color(0,255,0);
} else if ( strIn.toLowerCase().equals("tomato") ) {
int num1 = hex2oct("FF"); int num2 = hex2oct("63"); int num3 = hex2oct("47");
ret = new Color(num1,num2,num3);
} else if ( strIn.toLowerCase().equals("yellow") ) {
int num1 = hex2oct("FF"); int num2 = hex2oct("FF"); int num3 = hex2oct("00");
ret = new Color(num1,num2,num3);
} else if ( strIn.toLowerCase().equals("navy") ) {
int num1 = hex2oct("00"); int num2 = hex2oct("00"); int num3 = hex2oct("80");
ret = new Color(num1,num2,num3);
} else if ( strIn.toLowerCase().equals("black") ) {
int num1 = hex2oct("00"); int num2 = hex2oct("00"); int num3 = hex2oct("00");
ret = new Color(num1,num2,num3);
} else if ( strIn.equals("white") ) {
int num1 = hex2oct("ff"); int num2 = hex2oct("ff"); int num3 = hex2oct("ff");
ret = new Color(num1,num2,num3);
} else {
// chk format #aabbcc
String tmp = strIn.substring(0,1);
if ( tmp.equals("#" ) && strIn.length() == 7 ) {
tmp = strIn.substring(1,3);
int num1 = hex2oct(tmp);
tmp = strIn.substring(3,5);
int num2 = hex2oct(tmp);
tmp = strIn.substring(5,7);
int num3 = hex2oct(tmp);
ret = new Color(num1,num2,num3);
} else {
// ถ้า error return blue color
ret = new Color(0,0,255);
}
}
return ret;
}

private int hex2oct(String strIn) {
int ret = 0;
int d,j;
int sum = 0;
for ( int i = 0 ; i < strIn.length() ; i++ ) {
String tmp = strIn.substring(i,i+1) ;
tmp = tmp.toUpperCase();
if ( tmp.equals("A") ) {
d = 10;
} else if ( tmp.equals("B") ) {
d = 11;
} else if ( tmp.equals("C") ) {
d = 12;
} else if ( tmp.equals("D") ) {
d = 13;
} else if ( tmp.equals("E") ) {
d = 14;
} else if ( tmp.equals("F") ) {
d = 15;
} else {
if ( tmp.compareTo("0") >= 0 && tmp.compareTo("9") <= 0 ) {
d = Integer.parseInt(tmp);
} else {
d = 0;
}
}
j = ( strIn.length() - i - 1) ;
Double x = new Double(Math.pow(16,j));
sum = sum + ( d * x.intValue()) ;
ret = sum;
}
return ret;
}

}
//-------------- end program --------------

-------- HTML SOURCE --------------------
<HTML>
<HEAD><TITLE>Yeremiah Web Service</TITLE>
<="Content-type" content="text/html;charset=windows-874">
<="Expires" content="Sun ,18 Oct 1987 12:00:00 GMT">
</HEAD>
<body>
<APPLET code="GearGraph.class" archive='GearGraph.class' name="WebClient"
WIDTH="400" HEIGHT="250" MAYSCRIPT style="border:4px inset gold;">
<PARAM name="grap" value="10" />
<PARAM name="X_CENTER" value="200" />
<PARAM name="Y_CENTER" value="193" />
<PARAM name="ROUND1" value="135" />
<PARAM name="ROUND2" value="145" />

<!-- กรอบ GRAY -->
<PARAM name="X1" value="50" />
<PARAM name="Y1" value="50" />
<PARAM name="W1" value="300" />
<PARAM name="H1" value="300" />

<!-- ครึ่งวงกลมสีแดง -->
<PARAM name="X2" value="65" />
<PARAM name="Y2" value="60" />
<PARAM name="W2" value="270" />
<PARAM name="H2" value="270" />

<!-- สีเหลือง 18,36,54,72,90,108,126,144,162 -->
<PARAM name="STD" value="60" />

<!-- สีเขียว -->
<PARAM name="GOOD" value="90" />

<!-- ARROW -->
<PARAM name="ARROW" value="100,80" /><!-- ค่ารัศมี และ อัตรา 0 - 100 -->

<PARAM name="NUM_TEXT" value="2" />
<PARAM name="TXT1" value="MS Sans Serif|12|NAVY|60|245|Copyright @ 2005 by Solution Provider Network." />
<PARAM name="TXT2" value="MS Sans Serif|16|BLUE|40|220|ความสามารถในการแข่งขันของสินค้าไทย" />

</APPLET>
</body>
</html>


Create Date : 02 เมษายน 2554
Last Update : 2 เมษายน 2554 8:45:45 น. 2 comments
Counter : 501 Pageviews.

 
BUG ตรงตัวลูกศร ลืมแก้เป็นค่า R
ที่ถูกต้องเป็น

Double mm = cal_x(new Double(r),degree,x_center);
Double nn = cal_y(new Double(r),degree,y_center);


โดย: เกลือจืด วันที่: 10 เมษายน 2554 เวลา:12:53:35 น.  

 
ขอบคุณที่แบ่งปันความรู้ host


โดย: hosting (tewtor ) วันที่: 12 เมษายน 2554 เวลา:10:37:56 น.  

ชื่อ : * blog นี้ comment ได้เฉพาะสมาชิก
Comment :
  *ส่วน comment ไม่สามารถใช้ javascript และ style sheet
 
 Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.