[Java] Calculer la valeur de l'angle formé par deux points donnés et l'axe des abscisse (3 oclock)

/**
 * Retourne la valeur de l'angle en degrés formé entre a et b par rapport
 * à l'axe des abscisse
 */
public static double getAngleDegTrigo(Point2d origin, Point2d extremite) {
	if (origin.equals(extremite)) return 0;
	if (origin.x == extremite.x) {
		return (origin.y > extremite.y) ? 90 : 270;
	}
	else if (origin.y == extremite.y) {
		return (origin.x > extremite.x) ? 180 : 0;
	}
	else {
		Point p = new Point((int)origin.x+20, (int)origin.y);
		
		double alpha = getAngleRad(extremite, origin, p);
		
		if (extremite.x > origin.x && extremite.y > origin.y) {
			return Math.toDegrees(2 * Math.PI - alpha);
		}
		else if (extremite.x > origin.x && extremite.y < origin.y) {
			return Math.toDegrees(alpha);
		}
		else if (extremite.x < origin.x && extremite.y < origin.y) {
			return Math.toDegrees(alpha);
		}
		else if (extremite.x < origin.x && extremite.y > origin.y) {
			return Math.toDegrees(2 * Math.PI - alpha);
		}
		
		return -1;
		
	}
}

Require: getAngleRad

[Java] Positionner un point sur une droite

/**
 * Permet de recuperer un point sur une droite (origin;extremite)
 * à distance length du point origin.
 */
public static Point2d getPointOnLine(Point2d origin, Point2d extremite, double length) {
	Vector2d vec = vector(origin, extremite);
	vec.normalize();
	vec.scale(length);
	vec.add(origin);
	return new Point((int)vec.x, (int)vec.y);
}

public static Vector2d vector(Point2d a, Point2d b) {
	return new Vector2d(
			b.x-a.x,
			b.y-a.y
	);
}

[Java] Calculer les coordonnées d'un point sur un cercle en fonction du centre du cercle, du rayon et de la valeur de l'angle

/**
* Retourne les coordonnées d'un point sur un cercle.
* L'angle est exprimé en sens horaire.
*
* @param center Le centre du cercle
* @param angleDeg L'angle (en degres)
* @param radius Le rayon (en pixel)
* @return Le point après le calcule de projection.
*/
public static Point2d getCircleIntersection(Point2d center, double angleDeg, double radius) {
radius = Math.abs(radius);
double angleRad = Math.toRadians(angleDeg);

double x = (center.getX() + radius * Math.cos(angleRad));
double y = (center.getY() + radius * Math.sin(angleRad));

return new Point2d(x, y);
}

[Java] Calculer l'équation d'une droite à partir de deux points

public static double[] lineEquation(Point2d p1, Point2d p2) {
if (p1.x == p2.x) return null;
double a = (p2.y-p1.y) / (p2.x-p1.x);
double b = p1.y - a * p1.x;
return new double[] { a, b };
}

[Java] Calculer l'angle formé par trois points

	/**
* Retourne la valeur de l'angle formé par les points [a,origine,c]
* Cette methode retourne une valeur entre [0;PI], donc il s'agit toujours
* du plus petit angle formé par ces trois points.
*/
public static double getAngleRad(Point2d a, Point2d origine, Point2d c) {

Vector2d v1 = vector(a, origine);
Vector2d v2 = vector(c, origine);

double cosA = v1.dot(v2) / v1.length() / v2.length();

double aRad = Math.acos(cosA);

return aRad;
}

public static Vector2d vector(Point2d a, Point2d b) {
return new Vector2d(
b.x-a.x,
b.y-a.y
);
}

page 2 de 3