package codechicken.lib.render.uv; import codechicken.lib.math.MathHelper; import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; public class UVRotation extends UVTransformation { public double angle; /** * @param angle The angle to rotate counterclockwise in radians */ public UVRotation(double angle) { this.angle = angle; } @Override public void apply(UV uv) { double c = MathHelper.cos(angle); double s = MathHelper.sin(angle); double u2 = c*uv.u + s*uv.v; uv.v = - s*uv.u + c*uv.v; uv.u = u2; } @Override public UVTransformation inverse() { return new UVRotation(-angle); } @Override public UVTransformation merge(UVTransformation next) { if(next instanceof UVRotation) return new UVRotation(angle+((UVRotation)next).angle); return null; } @Override public boolean isRedundant() { return MathHelper.between(-1E-5, angle, 1E-5); } @Override public String toString() { MathContext cont = new MathContext(4, RoundingMode.HALF_UP); return "UVRotation(" + new BigDecimal(angle, cont) + ")"; } }