mirror of
https://github.com/jhasse/poly2tri.git
synced 2024-11-30 01:03:30 +01:00
added barycentric coordinate function
This commit is contained in:
parent
c3539bb10c
commit
1f418be366
@ -375,8 +375,26 @@ class Triangle(val points: Array[Point]) {
|
|||||||
val angle3 = Math.Pi - angle1 - angle2
|
val angle3 = Math.Pi - angle1 - angle2
|
||||||
// 30 degrees
|
// 30 degrees
|
||||||
val minAngle = Math.Pi/6
|
val minAngle = Math.Pi/6
|
||||||
//println(angle1 + "," + angle2 + "," + angle3)
|
|
||||||
(angle1 <= minAngle || angle2 <= minAngle || angle3 <= minAngle)
|
(angle1 <= minAngle || angle2 <= minAngle || angle3 <= minAngle)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Compute barycentric coordinates (u, v, w) for
|
||||||
|
// point p with respect to triangle
|
||||||
|
// From "Real-Time Collision Detection" by Christer Ericson
|
||||||
|
def barycentric(p: Point): List[Float] = {
|
||||||
|
val v0 = points(1) - points(0)
|
||||||
|
val v1 = points(2) - points(0)
|
||||||
|
val v2 = p - points(0)
|
||||||
|
val d00 = v0 dot v0
|
||||||
|
val d01 = v0 dot v1
|
||||||
|
val d11 = v1 dot v1
|
||||||
|
val d20 = v2 dot v0
|
||||||
|
val d21 = v2 dot v1
|
||||||
|
val denom = d00 * d11 - d01 * d01
|
||||||
|
val v = (d11 * d20 - d01 * d21) / denom
|
||||||
|
val w = (d00 * d21 - d01 * d20) / denom
|
||||||
|
val u = 1.0f - v - w
|
||||||
|
List(u, v, w)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user