﻿package org.test.crazyjumpergles.common;

import loon.geom.Vector3f;


public class Line3 {
	public Vector3f b;
	public Vector3f m;

	public Line3() {
		this.b = new Vector3f();
		this.m = new Vector3f();
	}

	public Line3(Line3 l) {
		this.b = new Vector3f();
		this.m = new Vector3f();
		this.b.x = l.b.x;
		this.b.y = l.b.y;
		this.b.z = l.b.z;
		this.m.x = l.m.x;
		this.m.y = l.m.y;
		this.m.z = l.m.z;
	}

	public Line3(Vector3f v0, Vector3f v1) {
		this.b = new Vector3f();
		this.m = new Vector3f();
		this.b.x = v0.x;
		this.b.y = v0.y;
		this.b.z = v0.z;
		this.m = v1.sub(v0);
	}

	public final float distance(Vector3f p) {
		Vector3f vector = p.sub(this.b);
		float num = Vector3f.dot(this.m, this.m);
		if (num > 0f) {
			float num2 = Vector3f.dot(this.m, vector) / num;
			Vector3f.sub(vector, this.m.mul(num2));
			return vector.len2();
		}
		Vector3f vector2 = p.sub(this.b);
		return vector2.len2();
	}

	public final float distance_sqr(Vector3f p) {
		Vector3f vector = p.sub(this.b);
		float num = Vector3f.dot(this.m, this.m);
		if (num > 0f) {
			float num2 = Vector3f.dot(this.m, vector) / num;
			Vector3f.sub(vector, this.m.mul(num2));
			return vector.len();
		}
		Vector3f vector2 = p.sub(this.b);
		return vector2.len();
	}

	public final Vector3f end() {
		return (this.b.add(this.m));
	}

	public final Vector3f ipol(float t) {
		return this.b.add(this.m.mul(t));
	}

	public final float len() {
		return this.m.len();
	}

	public final void set(Vector3f v0, Vector3f v1) {
		this.b.set(v0);
		this.m.set(v1.x - v0.x, v1.y - v0.y, v1.z - v0.z);
	}

	public final Vector3f start() {
		return this.b;
	}
}