124 lines
2.3 KiB
Java
124 lines
2.3 KiB
Java
package com.hypixel.hytale.math.shape;
|
|
|
|
import com.hypixel.hytale.math.vector.Vector2d;
|
|
import java.util.Random;
|
|
import javax.annotation.Nonnull;
|
|
|
|
public class Triangle2d {
|
|
private Vector2d a;
|
|
private Vector2d b;
|
|
private Vector2d c;
|
|
|
|
public Triangle2d(Vector2d a, Vector2d b, Vector2d c) {
|
|
this.a = a;
|
|
this.b = b;
|
|
this.c = c;
|
|
}
|
|
|
|
public Triangle2d() {
|
|
this(new Vector2d(), new Vector2d(), new Vector2d());
|
|
}
|
|
|
|
public Triangle2d(@Nonnull Vector2d[] points) {
|
|
this(points, 0, 1, 2);
|
|
}
|
|
|
|
public Triangle2d(@Nonnull Vector2d[] points, int a, int b, int c) {
|
|
this(points[a], points[b], points[c]);
|
|
}
|
|
|
|
public Vector2d getA() {
|
|
return this.a;
|
|
}
|
|
|
|
public void setA(Vector2d a) {
|
|
this.a = a;
|
|
}
|
|
|
|
public Vector2d getB() {
|
|
return this.b;
|
|
}
|
|
|
|
public void setB(Vector2d b) {
|
|
this.b = b;
|
|
}
|
|
|
|
public Vector2d getC() {
|
|
return this.c;
|
|
}
|
|
|
|
public void setC(Vector2d c) {
|
|
this.c = c;
|
|
}
|
|
|
|
public double getMinX() {
|
|
double min = this.a.x;
|
|
if (min > this.b.x) {
|
|
min = this.b.x;
|
|
}
|
|
|
|
if (min > this.c.x) {
|
|
min = this.c.x;
|
|
}
|
|
|
|
return min;
|
|
}
|
|
|
|
public double getMinY() {
|
|
double min = this.a.y;
|
|
if (min > this.b.y) {
|
|
min = this.b.y;
|
|
}
|
|
|
|
if (min > this.c.y) {
|
|
min = this.c.y;
|
|
}
|
|
|
|
return min;
|
|
}
|
|
|
|
public double getMaxX() {
|
|
double max = this.a.x;
|
|
if (max < this.b.x) {
|
|
max = this.b.x;
|
|
}
|
|
|
|
if (max < this.c.x) {
|
|
max = this.c.x;
|
|
}
|
|
|
|
return max;
|
|
}
|
|
|
|
public double getMaxY() {
|
|
double max = this.a.y;
|
|
if (max < this.b.y) {
|
|
max = this.b.y;
|
|
}
|
|
|
|
if (max < this.c.y) {
|
|
max = this.c.y;
|
|
}
|
|
|
|
return max;
|
|
}
|
|
|
|
@Nonnull
|
|
public Vector2d getRandom(@Nonnull Random random) {
|
|
return this.getRandom(random, new Vector2d());
|
|
}
|
|
|
|
@Nonnull
|
|
public Vector2d getRandom(@Nonnull Random random, @Nonnull Vector2d vec) {
|
|
double p = random.nextDouble();
|
|
double q = random.nextDouble();
|
|
if (p + q > 1.0) {
|
|
p = 1.0 - p;
|
|
q = 1.0 - q;
|
|
}
|
|
|
|
vec.assign(-this.a.x * (1.0 - p - q) + this.b.x * p + this.c.x * q, -this.a.y * (1.0 - p - q) + this.b.y * p + this.c.y * q);
|
|
return vec;
|
|
}
|
|
}
|