ui基本完毕,修了一大把的bug
This commit is contained in:
@@ -0,0 +1,328 @@
|
||||
using NUnit.Framework;
|
||||
using UnityEngine;
|
||||
|
||||
public class MathUtilsTests
|
||||
{
|
||||
#region IsPointOnRightSideOfLine Tests
|
||||
[Test]
|
||||
public void IsPointOnRightSideOfLine_PointOnRightSide()
|
||||
{
|
||||
var a = new Vector2(0, 0);
|
||||
var b = new Vector2(1, 1);
|
||||
var p = new Vector2(1, 0);
|
||||
Assert.True(MathUtils.IsPointOnRightSideOfLine(a, b, p));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsPointOnRightSideOfLine_PointOnLeftSide()
|
||||
{
|
||||
var a = new Vector2(0, 0);
|
||||
var b = new Vector2(1, 1);
|
||||
var p = new Vector2(0, 1);
|
||||
Assert.False(MathUtils.IsPointOnRightSideOfLine(a, b, p));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsPointOnRightSideOfLine_PointFirstEndpoint()
|
||||
{
|
||||
var a = new Vector2(0, 0);
|
||||
var b = new Vector2(1, 1);
|
||||
var p = a;
|
||||
Assert.True(MathUtils.IsPointOnRightSideOfLine(a, b, p));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsPointOnRightSideOfLine_PointSecondEndpoint()
|
||||
{
|
||||
var a = new Vector2(0, 0);
|
||||
var b = new Vector2(1, 1);
|
||||
var p = b;
|
||||
Assert.True(MathUtils.IsPointOnRightSideOfLine(a, b, p));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsPointOnRightSideOfLine_PointLineMidpoint()
|
||||
{
|
||||
var a = new Vector2(0, 0);
|
||||
var b = new Vector2(1, 1);
|
||||
var p = (a + b) / 2;
|
||||
Assert.True(MathUtils.IsPointOnRightSideOfLine(a, b, p));
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region LinePlaneIntersectionTests
|
||||
[Test]
|
||||
public void LinePlaneIntersection_DegenerateLine()
|
||||
{
|
||||
Vector3 a = Vector3.one;
|
||||
Vector3 b = Vector3.one;
|
||||
Vector3 n = Vector3.up;
|
||||
Vector3 p0 = Vector3.zero;
|
||||
Vector3 x;
|
||||
float s;
|
||||
Assert.False(MathUtils.LinePlaneIntersection(a, b, n, p0, out x, out s));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void LinePlaneIntersection_ZeroLengthNormal()
|
||||
{
|
||||
Vector3 a = Vector3.zero;
|
||||
Vector3 b = Vector3.one;
|
||||
Vector3 n = Vector3.zero;
|
||||
Vector3 p0 = Vector3.zero;
|
||||
Vector3 x;
|
||||
float s;
|
||||
Assert.False(MathUtils.LinePlaneIntersection(a, b, n, p0, out x, out s));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void LinePlaneIntersection_LineAbovePlane()
|
||||
{
|
||||
Vector3 a = new Vector3(0, 1, 0);
|
||||
Vector3 b = new Vector3(0, 2, 0);
|
||||
Vector3 n = new Vector3(0, 1, 0);
|
||||
Vector3 p0 = Vector3.zero;
|
||||
Vector3 x;
|
||||
float s;
|
||||
Assert.False(MathUtils.LinePlaneIntersection(a, b, n, p0, out x, out s));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void LinePlaneIntersection_LineBelowPlane()
|
||||
{
|
||||
Vector3 a = new Vector3(0, -1, 0);
|
||||
Vector3 b = new Vector3(0, -2, 0);
|
||||
Vector3 n = new Vector3(0, 1, 0);
|
||||
Vector3 p0 = Vector3.zero;
|
||||
Vector3 x;
|
||||
float s;
|
||||
Assert.False(MathUtils.LinePlaneIntersection(a, b, n, p0, out x, out s));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void LinePlaneIntersection_LineCrossingPlane()
|
||||
{
|
||||
Vector3 a = new Vector3(0, -1, 0);
|
||||
Vector3 b = new Vector3(0, 1, 0);
|
||||
Vector3 n = new Vector3(0, 1, 0);
|
||||
Vector3 p0 = Vector3.zero;
|
||||
Vector3 x;
|
||||
float s;
|
||||
Assert.True(MathUtils.LinePlaneIntersection(a, b, n, p0, out x, out s));
|
||||
|
||||
// Intersection point crosses the mid-point of the line
|
||||
Assert.AreEqual(Vector3.zero, x);
|
||||
Assert.AreEqual(0.5f, s);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void LinePlaneIntersection_StartPointOnPlane()
|
||||
{
|
||||
Vector3 a = new Vector3(0, 0, 0);
|
||||
Vector3 b = new Vector3(0, 1, 0);
|
||||
Vector3 n = new Vector3(0, 1, 0);
|
||||
Vector3 p0 = Vector3.zero;
|
||||
Vector3 x;
|
||||
float s;
|
||||
Assert.True(MathUtils.LinePlaneIntersection(a, b, n, p0, out x, out s));
|
||||
|
||||
// Intersection point crosses the mid-point of the line
|
||||
Assert.AreEqual(Vector3.zero, x);
|
||||
Assert.AreEqual(0, s);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void LinePlaneIntersection_EndPointOnPlane()
|
||||
{
|
||||
Vector3 a = new Vector3(0, 1, 0);
|
||||
Vector3 b = new Vector3(0, 0, 0);
|
||||
Vector3 n = new Vector3(0, 1, 0);
|
||||
Vector3 p0 = Vector3.zero;
|
||||
Vector3 x;
|
||||
float s;
|
||||
Assert.True(MathUtils.LinePlaneIntersection(a, b, n, p0, out x, out s));
|
||||
|
||||
// Intersection point crosses the mid-point of the line
|
||||
Assert.AreEqual(Vector3.zero, x);
|
||||
Assert.AreEqual(1, s);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region LinesIntersect General Tests
|
||||
[Test]
|
||||
public void LinesIntersect_True()
|
||||
{
|
||||
Vector2 a1 = new Vector2(0, 0);
|
||||
Vector2 a2 = new Vector2(1, 1);
|
||||
Vector2 b1 = new Vector2(0, 1);
|
||||
Vector2 b2 = new Vector2(1, 0);
|
||||
Assert.True(MathUtils.LinesIntersect(a1, a2, b1, b2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void LinesIntersect_LineAOnLeftSideOfLineB()
|
||||
{
|
||||
Vector2 a1 = new Vector2(0, 0.5f);
|
||||
Vector2 a2 = new Vector2(0.49f, 0.5f);
|
||||
Vector2 b1 = new Vector2(0.5f, 0f);
|
||||
Vector2 b2 = new Vector2(0.5f, 1);
|
||||
Assert.False(MathUtils.LinesIntersect(a1, a2, b1, b2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void LinesIntersect_LineAOnRightSideOfLineB()
|
||||
{
|
||||
Vector2 a1 = new Vector2(0.51f, 0.5f);
|
||||
Vector2 a2 = new Vector2(1f, 0.5f);
|
||||
Vector2 b1 = new Vector2(0.5f, 0f);
|
||||
Vector2 b2 = new Vector2(0.5f, 1);
|
||||
Assert.False(MathUtils.LinesIntersect(a1, a2, b1, b2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void LinesIntersect_LineBOnTopSideOfLineA()
|
||||
{
|
||||
Vector2 a1 = new Vector2(0, 0.5f);
|
||||
Vector2 a2 = new Vector2(1f, 0.5f);
|
||||
Vector2 b1 = new Vector2(0.5f, 0.51f);
|
||||
Vector2 b2 = new Vector2(0.5f, 1);
|
||||
Assert.False(MathUtils.LinesIntersect(a1, a2, b1, b2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void LinesIntersect_LineBOnBottomSideOfLineA()
|
||||
{
|
||||
Vector2 a1 = new Vector2(0, 0.5f);
|
||||
Vector2 a2 = new Vector2(1f, 0.5f);
|
||||
Vector2 b1 = new Vector2(0.5f, 0f);
|
||||
Vector2 b2 = new Vector2(0.5f, 0.49f);
|
||||
Assert.False(MathUtils.LinesIntersect(a1, a2, b1, b2));
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region LinesIntersect Shared Vertex Tests
|
||||
[Test]
|
||||
public void LinesIntersect_A1B1Shared()
|
||||
{
|
||||
Vector2 a1 = new Vector2(0, 0);
|
||||
Vector2 a2 = new Vector2(1, 1);
|
||||
Vector2 b1 = a1;
|
||||
Vector2 b2 = new Vector2(1, 0);
|
||||
Assert.False(MathUtils.LinesIntersect(a1, a2, b1, b2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void LinesIntersect_A1B2Shared()
|
||||
{
|
||||
Vector2 a1 = new Vector2(0, 0);
|
||||
Vector2 a2 = new Vector2(1, 1);
|
||||
Vector2 b1 = new Vector2(0, 1);
|
||||
Vector2 b2 = a1;
|
||||
Assert.False(MathUtils.LinesIntersect(a1, a2, b1, b2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void LinesIntersect_A2B1Shared()
|
||||
{
|
||||
Vector2 a1 = new Vector2(0, 0);
|
||||
Vector2 a2 = new Vector2(1, 1);
|
||||
Vector2 b1 = a2;
|
||||
Vector2 b2 = new Vector2(1, 0);
|
||||
Assert.False(MathUtils.LinesIntersect(a1, a2, b1, b2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void LinesIntersect_A2B2Shared()
|
||||
{
|
||||
Vector2 a1 = new Vector2(0, 0);
|
||||
Vector2 a2 = new Vector2(1, 1);
|
||||
Vector2 b1 = new Vector2(0, 1);
|
||||
Vector2 b2 = a2;
|
||||
Assert.False(MathUtils.LinesIntersect(a1, a2, b1, b2));
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region IsQuadConvex Shared Vertex Tests
|
||||
[Test]
|
||||
public void IsQuadConvex_A1B1Shared()
|
||||
{
|
||||
Vector2 a1 = new Vector2(0, 0);
|
||||
Vector2 a2 = new Vector2(1, 1);
|
||||
Vector2 b1 = a1;
|
||||
Vector2 b2 = new Vector2(1, 0);
|
||||
Assert.True(MathUtils.IsQuadConvex(a1, a2, b1, b2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsQuadConvex_A1B2Shared()
|
||||
{
|
||||
Vector2 a1 = new Vector2(0, 0);
|
||||
Vector2 a2 = new Vector2(1, 1);
|
||||
Vector2 b1 = new Vector2(0, 1);
|
||||
Vector2 b2 = a1;
|
||||
Assert.True(MathUtils.IsQuadConvex(a1, a2, b1, b2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsQuadConvex_A2B1Shared()
|
||||
{
|
||||
Vector2 a1 = new Vector2(0, 0);
|
||||
Vector2 a2 = new Vector2(1, 1);
|
||||
Vector2 b1 = a2;
|
||||
Vector2 b2 = new Vector2(1, 0);
|
||||
Assert.True(MathUtils.IsQuadConvex(a1, a2, b1, b2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsQuadConvex_A2B2Shared()
|
||||
{
|
||||
Vector2 a1 = new Vector2(0, 0);
|
||||
Vector2 a2 = new Vector2(1, 1);
|
||||
Vector2 b1 = new Vector2(0, 1);
|
||||
Vector2 b2 = a2;
|
||||
Assert.True(MathUtils.IsQuadConvex(a1, a2, b1, b2));
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region LinesIntersect Vertex on Line Tests
|
||||
[Test]
|
||||
public void LinesIntersect_A1OnBLine()
|
||||
{
|
||||
Vector2 a1 = new Vector2(0.5f, 0.5f);
|
||||
Vector2 a2 = new Vector2(1, 0.5f);
|
||||
Vector2 b1 = new Vector2(0.5f, 0);
|
||||
Vector2 b2 = new Vector2(0.5f, 1);
|
||||
Assert.True(MathUtils.LinesIntersect(a1, a2, b1, b2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void LinesIntersect_A2OnBLine()
|
||||
{
|
||||
Vector2 a1 = new Vector2(0, 0.5f);
|
||||
Vector2 a2 = new Vector2(0.5f, 0.5f);
|
||||
Vector2 b1 = new Vector2(0.5f, 0);
|
||||
Vector2 b2 = new Vector2(0.5f, 1);
|
||||
Assert.True(MathUtils.LinesIntersect(a1, a2, b1, b2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void LinesIntersect_B1OnALine()
|
||||
{
|
||||
Vector2 a1 = new Vector2(0, 0.5f);
|
||||
Vector2 a2 = new Vector2(1, 0.5f);
|
||||
Vector2 b1 = new Vector2(0.5f, 0.5f);
|
||||
Vector2 b2 = new Vector2(0.5f, 1);
|
||||
Assert.True(MathUtils.LinesIntersect(a1, a2, b1, b2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void LinesIntersect_B2OnALine()
|
||||
{
|
||||
Vector2 a1 = new Vector2(0, 0.5f);
|
||||
Vector2 a2 = new Vector2(1, 0.5f);
|
||||
Vector2 b1 = new Vector2(0.5f, 0);
|
||||
Vector2 b2 = new Vector2(0.5f, 0.5f);
|
||||
Assert.True(MathUtils.LinesIntersect(a1, a2, b1, b2));
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
Reference in New Issue
Block a user