vector2d.java

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

JAVA
183
字号

     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);

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

          // 把矢量正规化为单位长
          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值平移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 + -
显示快捷键?