mirror of
https://github.com/oxen-io/session-android.git
synced 2025-01-14 03:23:40 +00:00
1b44bdcd3c
// FREEBIE
54 lines
1.8 KiB
Java
54 lines
1.8 KiB
Java
package org.thoughtcrime.securesms.util;
|
|
|
|
import android.graphics.PointF;
|
|
import android.support.annotation.NonNull;
|
|
|
|
public class MathUtils {
|
|
|
|
/**
|
|
* For more info:
|
|
* <a href="http://math.stackexchange.com/questions/190111/how-to-check-if-a-point-is-inside-a-rectangle">StackOverflow: How to check point is in rectangle</a>
|
|
*
|
|
* @param pt point to check
|
|
* @param v1 vertex 1 of the triangle
|
|
* @param v2 vertex 2 of the triangle
|
|
* @param v3 vertex 3 of the triangle
|
|
* @return true if point (x, y) is inside the triangle
|
|
*/
|
|
public static boolean pointInTriangle(@NonNull PointF pt, @NonNull PointF v1,
|
|
@NonNull PointF v2, @NonNull PointF v3) {
|
|
|
|
boolean b1 = crossProduct(pt, v1, v2) < 0.0f;
|
|
boolean b2 = crossProduct(pt, v2, v3) < 0.0f;
|
|
boolean b3 = crossProduct(pt, v3, v1) < 0.0f;
|
|
|
|
return (b1 == b2) && (b2 == b3);
|
|
}
|
|
|
|
/**
|
|
* calculates cross product of vectors AB and AC
|
|
*
|
|
* @param a beginning of 2 vectors
|
|
* @param b end of vector 1
|
|
* @param c enf of vector 2
|
|
* @return cross product AB * AC
|
|
*/
|
|
private static float crossProduct(@NonNull PointF a, @NonNull PointF b, @NonNull PointF c) {
|
|
return crossProduct(a.x, a.y, b.x, b.y, c.x, c.y);
|
|
}
|
|
|
|
/**
|
|
* calculates cross product of vectors AB and AC
|
|
*
|
|
* @param ax X coordinate of point A
|
|
* @param ay Y coordinate of point A
|
|
* @param bx X coordinate of point B
|
|
* @param by Y coordinate of point B
|
|
* @param cx X coordinate of point C
|
|
* @param cy Y coordinate of point C
|
|
* @return cross product AB * AC
|
|
*/
|
|
private static float crossProduct(float ax, float ay, float bx, float by, float cx, float cy) {
|
|
return (ax - cx) * (by - cy) - (bx - cx) * (ay - cy);
|
|
}
|
|
} |