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