/** * * org.arakhne.afc.math.geometry.d2.FunctionalTuple3D.java * * Copyright (c) 2008-10, Multiagent Team - Systems and Transportation Laboratory (SeT) * All rights reserved. * * This software is the confidential and proprietary information * of the Systems and Transportation Laboratory ("Confidential Information"). * You shall not disclose such Confidential Information and shall use * it only in accordance with the terms of the license agreement * you entered into with the SeT. * * http://www.multiagent.fr/ * * Primary author : Olivier LAMOTTE (olivier.lamotte@utbm.fr) - 2015 * */ package org.arakhne.afc.math.geometry.d3; import org.eclipse.xtext.xbase.lib.Pure; /** * @author Olivier LAMOTTE (olivier.lamotte@utbm.fr) * */ public interface FunctionalTuple3D<TT extends Tuple3D<? super TT>> extends Tuple3D<TT> { /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#absolute() */ @Override default void absolute() { this.setX(Math.abs(this.getX())); this.setY(Math.abs(this.getY())); this.setZ(Math.abs(this.getZ())); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#absolute(org.arakhne.afc.math.geometry.d3.Tuple3D) */ @Override default void absolute(TT t) { t.set(Math.abs(this.getX()), Math.abs(this.getY()), Math.abs(this.getZ())); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#add(int, int, int) */ @Override default void add(int x, int y, int z) { this.setX(this.getX() + x); this.setY(this.getY() + y); this.setZ(this.getZ() + z); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#add(double, double, double) */ @Override default void add(double x, double y, double z) { this.setX(this.getX() + x); this.setY(this.getY() + y); this.setZ(this.getZ() + z); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#addX(int) */ @Override default void addX(int x) { this.setX(this.getX() + x); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#addX(double) */ @Override default void addX(double x) { this.setX(this.getX() + x); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#addY(int) */ @Override default void addY(int y) { this.setY(this.getY() + y); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#addY(double) */ @Override default void addY(double y) { this.setY(this.getY() + y); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#addZ(int) */ @Override default void addZ(int z) { this.setZ(this.getZ() + z); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#addZ(double) */ @Override default void addZ(double z) { this.setZ(this.getZ() + z); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#clamp(int, int) */ @Override default void clamp(int min, int max) { if (this.getX() < min) this.setX(min); else if (this.getX() > max) this.setX(max); if (this.getY() < min) this.setY(min); else if (this.getY() > max) this.setY(max); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#clamp(double, double) */ @Override default void clamp(double min, double max) { if (this.getX() < min) this.setX(min); else if (this.getX() > max) this.setX(max); if (this.getY() < min) this.setY(min); else if (this.getY() > max) this.setY(max); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#clampMin(int) */ @Override default void clampMin(int min) { if (this.getX() < min) this.setX(min); if (this.getY() < min) this.setY(min); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#clampMin(double) */ @Override default void clampMin(double min) { if (this.getX() < min) this.setX(min); if (this.getY() < min) this.setY(min); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#clampMax(int) */ @Override default void clampMax(int max) { if (this.getX() > max) this.setX(max); if (this.getY() > max) this.setY(max); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#clampMax(double) */ @Override default void clampMax(double max) { if (this.getX() > max) this.setX(max); if (this.getY() > max) this.setY(max); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#clamp(int, int, org.arakhne.afc.math.geometry.d3.Tuple3D) */ @Override default void clamp(int min, int max, TT t) { if (this.getX() < min) t.setX(min); else if (this.getX() > max) t.setX(max); if (this.getY() < min) t.setY(min); else if (this.getY() > max) t.setY(max); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#clamp(double, double, org.arakhne.afc.math.geometry.d3.Tuple3D) */ @Override default void clamp(double min, double max, TT t) { if (this.getX() < min) t.setX(min); else if (this.getX() > max) t.setX(max); if (this.getY() < min) t.setY(min); else if (this.getY() > max) t.setY(max); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#clampMin(int, org.arakhne.afc.math.geometry.d3.Tuple3D) */ @Override default void clampMin(int min, TT t) { if (this.getX() < min) t.setX(min); if (this.getY() < min) t.setY(min); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#clampMin(double, org.arakhne.afc.math.geometry.d3.Tuple3D) */ @Override default void clampMin(double min, TT t) { if (this.getX() < min) t.setX(min); if (this.getY() < min) t.setY(min); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#clampMax(int, org.arakhne.afc.math.geometry.d3.Tuple3D) */ @Override default void clampMax(int max, TT t) { if (this.getX() > max) t.setX(max); if (this.getY() > max) t.setY(max); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#clampMax(double, org.arakhne.afc.math.geometry.d3.Tuple3D) */ @Override default void clampMax(double max, TT t) { if (this.getX() > max) t.setX(max); if (this.getY() > max) t.setY(max); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#get(org.arakhne.afc.math.geometry.d3.Tuple3D) */ @Override default void get(TT t) { t.set(this.getX(), this.getY(), this.getZ()); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#get(int[]) */ @Override default void get(int[] t) { t[0] = (int)this.getX(); t[1] = (int)this.getY(); t[2] = (int)this.getZ(); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#get(double[]) */ @Override default void get(double[] t) { t[0] = this.getX(); t[1] = this.getY(); t[2] = this.getZ(); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#negate(org.arakhne.afc.math.geometry.d3.Tuple3D) */ @Override default void negate(TT t1) { this.setX(-t1.getX()); this.setY(-t1.getY()); this.setZ(-t1.getZ()); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#negate() */ @Override default void negate() { this.setX(-this.getX()); this.setY(-this.getY()); this.setZ(-this.getZ()); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#scale(int, org.arakhne.afc.math.geometry.d3.Tuple3D) */ @Override default void scale(int s, TT t1) { this.setX(s * t1.getX()); this.setY(s * t1.getY()); this.setZ(s * t1.getZ()); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#scale(double, org.arakhne.afc.math.geometry.d3.Tuple3D) */ @Override default void scale(double s, TT t1) { this.setX(s * t1.getX()); this.setY(s * t1.getY()); this.setZ(s * t1.getZ()); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#scale(int) */ @Override default void scale(int s) { this.setX(s * this.getX()); this.setY(s * this.getY()); this.setZ(s * this.getZ()); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#scale(double) */ @Override default void scale(double s) { this.setX(s * this.getX()); this.setY(s * this.getY()); this.setZ(s * this.getZ()); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#set(org.arakhne.afc.math.geometry.d3.Tuple3D) */ @Override default void set(Tuple3D<?> t1) { this.setX(t1.getX()); this.setY(t1.getY()); this.setZ(t1.getZ()); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#set(int, int, int) */ @Override default void set(int x, int y, int z) { this.setX(x); this.setY(y); this.setZ(z); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#set(int[]) */ @Override default void set(int[] t) { this.setX(t[0]); this.setY(t[1]); this.setZ(t[2]); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#set(double[]) */ @Override default void set(double[] t) { this.setX(t[0]); this.setY(t[1]); this.setZ(t[2]); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#x() */ @Pure @Override default int ix() { return (int)this.getX(); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#setX(int) */ @Override default void setX(int x) { this.setX((double)x); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#y() */ @Pure @Override default int iy() { return (int)this.getY(); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#setY(int) */ @Override default void setY(int y) { this.setY((double)y); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#z() */ @Pure @Override default int iz() { return (int)this.getZ(); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#setZ(int) */ @Override default void setZ(int z) { this.setZ((double)z); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#sub(int, int, int) */ @Override default void sub(int x, int y, int z) { this.setX(this.getX() - x); this.setY(this.getY() - y); this.setZ(this.getZ() - z); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#sub(double, double, double) */ @Override default void sub(double x, double y, double z) { this.setX(this.getX() - x); this.setY(this.getY() - y); this.setZ(this.getZ() - z); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#subX(int) */ @Override default void subX(int x) { this.setX(this.getX() - x); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#subX(double) */ @Override default void subX(double x) { this.setX(this.getX() - x); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#subY(int) */ @Override default void subY(int y) { this.setY(this.getY() - y); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#subY(double) */ @Override default void subY(double y) { this.setY(this.getY() - y); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#subZ(int) */ @Override default void subZ(int z) { this.setZ(this.getZ() - z); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#subZ(double) */ @Override default void subZ(double z) { this.setZ(this.getZ() - z); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#interpolate(org.arakhne.afc.math.geometry.d3.Tuple3D, org.arakhne.afc.math.geometry.d3.Tuple3D, double) */ @Override default void interpolate(TT t1, TT t2, double alpha) { this.setX(((1f-alpha)*t1.getX() + alpha*t2.getX())); this.setY(((1f-alpha)*t1.getY() + alpha*t2.getY())); this.setZ(((1f-alpha)*t1.getZ() + alpha*t2.getZ())); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#interpolate(org.arakhne.afc.math.geometry.d3.Tuple3D, double) */ @Override default void interpolate(TT t1, double alpha) { this.setX(((1f-alpha)*this.getX() + alpha*t1.getX())); this.setY(((1f-alpha)*this.getY() + alpha*t1.getY())); this.setZ(((1f-alpha)*this.getZ() + alpha*t1.getZ())); } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#equals(org.arakhne.afc.math.geometry.d3.Tuple3D) */ @Pure @Override default boolean equals(Tuple3D<?> t1) { try { return(this.getX() == t1.getX() && this.getY() == t1.getY() && this.getZ() == t1.getZ()); } catch (NullPointerException e2) { return false; } } /* (non-Javadoc) * @see org.arakhne.afc.math.geometry.d3.Tuple3D#epsilonEquals(org.arakhne.afc.math.geometry.d3.Tuple3D, double) */ @Pure @Override default boolean epsilonEquals(TT t1, double epsilon) { double diff; diff = this.getX() - t1.getX(); if(Double.isNaN(diff)) return false; if((diff<0?-diff:diff) > epsilon) return false; diff = this.getY() - t1.getY(); if(Double.isNaN(diff)) return false; if((diff<0?-diff:diff) > epsilon) return false; diff = this.getZ() - t1.getZ(); if(Double.isNaN(diff)) return false; if((diff<0?-diff:diff) > epsilon) return false; return true; } }