/
TriangleToTriangle.js
84 lines (68 loc) · 2.38 KB
/
TriangleToTriangle.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/**
* @author Richard Davey <rich@photonstorm.com>
* @copyright 2013-2023 Photon Storm Ltd.
* @license {@link https://opensource.org/licenses/MIT|MIT License}
*/
var ContainsArray = require('../triangle/ContainsArray');
var Decompose = require('../triangle/Decompose');
var LineToLine = require('./LineToLine');
/**
* Checks if two Triangles intersect.
*
* A Triangle intersects another Triangle if any pair of their lines intersects or if any point of one Triangle is within the other Triangle. Thus, the Triangles are considered "solid".
*
* @function Phaser.Geom.Intersects.TriangleToTriangle
* @since 3.0.0
*
* @param {Phaser.Geom.Triangle} triangleA - The first Triangle to check for intersection.
* @param {Phaser.Geom.Triangle} triangleB - The second Triangle to check for intersection.
*
* @return {boolean} `true` if the Triangles intersect, otherwise `false`.
*/
var TriangleToTriangle = function (triangleA, triangleB)
{
// First the cheapest ones:
if (
triangleA.left > triangleB.right ||
triangleA.right < triangleB.left ||
triangleA.top > triangleB.bottom ||
triangleA.bottom < triangleB.top)
{
return false;
}
var lineAA = triangleA.getLineA();
var lineAB = triangleA.getLineB();
var lineAC = triangleA.getLineC();
var lineBA = triangleB.getLineA();
var lineBB = triangleB.getLineB();
var lineBC = triangleB.getLineC();
// Now check the lines against each line of TriangleB
if (LineToLine(lineAA, lineBA) || LineToLine(lineAA, lineBB) || LineToLine(lineAA, lineBC))
{
return true;
}
if (LineToLine(lineAB, lineBA) || LineToLine(lineAB, lineBB) || LineToLine(lineAB, lineBC))
{
return true;
}
if (LineToLine(lineAC, lineBA) || LineToLine(lineAC, lineBB) || LineToLine(lineAC, lineBC))
{
return true;
}
// Nope, so check to see if any of the points of triangleA are within triangleB
var points = Decompose(triangleA);
var within = ContainsArray(triangleB, points, true);
if (within.length > 0)
{
return true;
}
// Finally check to see if any of the points of triangleB are within triangleA
points = Decompose(triangleB);
within = ContainsArray(triangleA, points, true);
if (within.length > 0)
{
return true;
}
return false;
};
module.exports = TriangleToTriangle;