나는 번개가 빠른 자바 메서드를 사용하여 점이 삼각형 안에 있는지 확인하려고합니다. 포인트가 삼각형 (3D) 안에 있는지 확인하기위한 성능
나는 카스퍼 Fauerby에서 용지에서 다음과 같은 C++ 코드를 발견typedef unsigned int uint32;
#define in(a) ((uint32&) a)
bool checkPointInTriangle(const VECTOR& point, const VECTOR& pa,const VECTOR& pb, const VECTOR& pc) {
VECTOR e10=pb-pa;
VECTOR e20=pc-pa;
float a = e10.dot(e10);
float b = e10.dot(e20);
float c = e20.dot(e20);
float ac_bb=(a*c)-(b*b);
VECTOR vp(point.x-pa.x, point.y-pa.y, point.z-pa.z);
float d = vp.dot(e10);
float e = vp.dot(e20);
float x = (d*c)-(e*b);
float y = (e*a)-(d*b);
float z = x+y-ac_bb;
return ((in(z)& ~(in(x)|in(y))) & 0x80000000);
}
이 코드는 자바로 변환 될 수 있는지 궁금 해서요, 그리고 만약 그렇다면, 내 자바 코드를 능가한다면 :
public class Util {
public static boolean checkPointInTriangle(Vector p1, Vector p2, Vector p3, Vector point) {
float angles = 0;
Vector v1 = Vector.min(point, p1); v1.normalize();
Vector v2 = Vector.min(point, p2); v2.normalize();
Vector v3 = Vector.min(point, p3); v3.normalize();
angles += Math.acos(Vector.dot(v1, v2));
angles += Math.acos(Vector.dot(v2, v3));
angles += Math.acos(Vector.dot(v3, v1));
return (Math.abs(angles - 2*Math.PI) <= 0.005);
}
public static void main(String [] args) {
Vector p1 = new Vector(4.5f, 0, 0);
Vector p2 = new Vector(0, -9f, 0);
Vector p3 = new Vector(0, 0, 4.5f);
Vector point = new Vector(2, -4, 0.5f);
System.out.println(checkPointInTriangle(p1, p2, p3, point));
}
}
및 Vector 클래스 :
public class Vector {
public float x, y, z;
public Vector(float x, float y, float z) {
this.x = x; this.y = y; this.z = z;
}
public float length() {
return (float) Math.sqrt(x*x + y*y + z*z);
}
public void normalize() {
float l = length(); x /= l; y /= l; z /= l;
}
public static float dot(Vector one, Vector two) {
return one.x*two.x + one.y*two.y + one.z*two.z;
}
public static Vector min(Vector one, Vector two) {
return new Vector(one.x-two.x, one.y-two.y, one.z-two.z);
}
}
또는 더 빠른 방법이있다 자바?
미리 감사드립니다.
물어보기 전에 실제로 시도해 보셨습니까? 당신이 한 당신의 결과는 무엇입니까? – Kevin
@Kevin C++ 코드 스 니펫을 Java로 변환하는 방법에 대한 단서가 없습니다 (return 문과 함께 나옵니 까?). 올바른 방향으로 이동이 필요합니다. – Wilco
체크 됨 : http://stackoverflow.com/questions/2464902/determine-if-a-point-is-inside-a-triangle-formed-by-3- pointss-with-given-latitude – Araw