2001年5月24日 WvLineへの四捨五入追加
関谷トップページへ
CG2001 トップページへ
Glibwv.java From glib.h 河西朝雄、C言語によるはじめてのアルゴリズム入門、pp.346-356
// Glibwv.java From glib.h for turboC (turtlewv.h)
// 河西朝雄、C言語によるはじめてのアルゴリズム入門、pp.346-356
// 1998.3.22 北九州職業能力開発短期大学校 情報処理科 関谷順太
import java.awt.*; // Graphics; // グラフィックスクラス
import java.lang.Math;
public class Glibwv {
static double ANGLE=0.0, /* 現在角 */
LPX=0.0, LPY=0.0; /* 現在位置 */
static double WX1,WY1,WX2,WY2, /* ワールド座標 */
VX1,VY1,VX2,VY2, /* ビュー座標 */
FACTX,FACTY; /* スケール */
static int px1,py1, px2, py2;
public static int Cpx(){
return px2;
}
public static int Cpy(){
return py2;
}
public static void Window(double x1,double y1,double x2,double y2)
{
WX1=x1; WY1=y1; WX2=x2; WY2=y2;
FACTX=(VX2-VX1)/(WX2-WX1);
FACTY=(VY2-VY1)/(WY2-WY1);
}
public static void View(int x1, int y1, int x2, int y2) {
VX1=(double)x1; VY1=(double)y1; VX2=(double)x2; VY2=(double)y2;
FACTX=(VX2-VX1)/(WX2-WX1);
FACTY=(VY2-VY1)/(WY2-WY1);
}
public static void WvLine(Graphics g, double x1, double y1,
double x2, double y2) {
px1 = (int)((x1-WX1)*FACTX+VX1+0.5); // 2001.5.24 for round
py1 = (int)((y1-WY1)*FACTY+VY1+0.5);
px2 = (int)((x2-WX1)*FACTX+VX1+0.5);
py2 = (int)((y2-WY1)*FACTY+VY1+0.5);
g.drawLine(px1, py1, px2, py2);
}
public static void Move(Graphics g, double l) {
double x,y,rd=3.14159265359/180.0;
x=l*Math.cos(rd*ANGLE); y=-l*Math.sin(rd*ANGLE);
WvLine(g, LPX, LPY, LPX+x, LPY+y);
LPX += x; LPY +=y;
}
public static void MoveTo(Graphics g, double x, double y) {
WvLine(g, LPX, LPY, x, y);
LPX = x; LPY =y;
}
public static void SetAngle(double a) {
ANGLE = a;
}
public static void Turn(double a) {
ANGLE += a; //fmod(ANGLE+a, 360.0);
}
public static void SetPoint(double x, double y) {
LPX=x; LPY=y;
}
public static void moverel(Graphics g, double x, double y) {
MoveTo(g, LPX+x, LPY+y);
}
public static void wvline(Graphics g, double x1, double y1,
double x2, double y2) {
WvLine(g, x1, y1 , x2, y2);
}
}
/*
public static void Move(Graphics g, double l)
{
double x,y,rd=3.141592653589/180.0;
x=l*Math.cos(rd*ANGLE); y=-l*Math.sin(rd*ANGLE);
g.drawLine((int)LPX, (int)LPY, (int)(LPX+x), (int)(LPY+y));
// line( (int)LPX, (int)LPY, (int)(LPX+x), (int)(LPY+y), C); // from SLS, glib.h
LPX += x; LPY +=y;
}
public static void MoveTo(Graphics g, double x, double y)
{
g.drawLine( (int)LPX, (int)LPY, (int)x, (int)y);
LPX = x; LPY =y;
}
*/