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 + -
显示快捷键?