Signal-Android/app/src/main/java/org/thoughtcrime/securesms/util/MathUtils.java

54 lines
1.8 KiB
Java

package org.thoughtcrime.securesms.util;
import android.graphics.PointF;
import androidx.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 end 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);
}
}