vector2d.java

来自「java learn PPT java learn PPT java learn」· Java 代码 · 共 201 行

JAVA
201
字号
package magic.graphics;

public abstract class Vector2D
    extends Object
{
  public static final Vector2D.Double ZERO_VECTOR = new Vector2D.Double(0, 0);

  public static class Double
      extends Vector2D
  {
    // Vector2D.Double对象的x,y属性
    public double x;
    public double y;

    // 用(0,0)创建一个默认的Vector2D
    public Double()
    {
      this(0.0, 0.0);
    }

    // 用传入的值创建一个Vector2D.Double对象
    public Double(double m, double n)
    {
      setX(m);
      setY(n);
    }

    private Double(int m, int n)
    {
      setX( (double) m);
      setY( (double) n);
    }

    // x,y属性的get/set访问方法

    public final void setX(double n)
    {
      x = n;
    }

    public final void setY(double n)
    {
      y = n;
    }

    public final double getX()
    {
      return x;
    }

    public final double getY()
    {
      return y;
    }

    // 将这个矢量和传入的矢量相加
    public Vector2D plus(Vector2D v)
    {
      return new Double(getX() + v.getX(), getY() + v.getY());
    }

    // 将这个矢量和传入的矢量相减
    public Vector2D minus(Vector2D v)
    {
      return new Double(getX() - v.getX(), getY() - v.getY());
    }

  } // Double

  public static class Integer
      extends Vector2D
  {
    // Vector2D.Integer对象的x,y属性
    public int x;
    public int y;

    // 用(0,0)创建一个默认的Vector2D
    public Integer()
    {
      this(0, 0);
    }

    // 用传入的值创建一个Vector2D.Integer对象
    public Integer(int m, int n)
    {
      setX(m);
      setY(n);
    }

    private Integer(double m, double n)
    {
      setX( (int) m);
      setY( (int) n);
    }

    // x,y属性的get/set访问方法

    public final void setX(double n)
    {
      x = (int) n;
    }

    public final void setY(double n)
    {
      y = (int) n;
    }

    public final double getX()
    {
      return (double) x;
    }

    public final double getY()
    {
      return (double) y;
    }

    // 将这个矢量和传入的矢量相加
    public Vector2D plus(Vector2D v)
    {
      return new Integer(getX() + v.getX(), getY() + v.getY());
    }

    // 将这个矢量和传入的矢量相减
    public Vector2D minus(Vector2D v)
    {
      return new Integer(getX() - v.getX(), getY() - v.getY());
    }

  } // Integer

  protected Vector2D()
  {}

  public abstract void setX(double n);

  public abstract void setY(double n);

  public abstract double getX();

  public abstract double getY();

  // 将这个矢量和传入的矢量相加
  public abstract Vector2D plus(Vector2D v);

  // 将这个矢量和传入的矢量相减
  public abstract Vector2D minus(Vector2D v);

  // 判断两个vector是否相等
  public boolean equals(Vector2D other)
  {
    return (getX() == other.getX() && getY() == other.getY());
  }

  // 将vctor正规化为单位长
  public void normalize()
  {
    double len = length();
    setX(getX() / len);
    setY(getY() / len);
  }

  public void scale(double k)
  {
    setX(k * getX());
    setY(k * getY());
  }

  // 用传入的值平移Vector2D
  public void translate(double dx, double dy)
  {
    setX(getX() + dx);
    setY(getY() + dy);
  }

  // 用传入的矢量平移Vector2D
  public void translate(Vector2D v)
  {
    setX(getX() + v.getX());
    setY(getY() + v.getY());
  }

  // 计算这个矢量和传入矢量的点乘(内乘)
  public double dot(Vector2D v)
  {
    return getX() * v.getX() + getY() * v.getY();
  }

  // 返回矢量矢量的长度
  public double length()
  {
    return Math.sqrt(this.dot(this));
  }

  // 返回这个 Vector2D 的字符串描述
  public String toString()
  {
    return getClass().getName() + " [x=" + getX() + ",y=" + getY() + "]";
  }

} // Vector2D

⌨️ 快捷键说明

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