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;
}
*/