2nd update on 20230415 by nitload youmu
This commit is contained in:
@@ -1,25 +1,27 @@
|
||||
using StgSharp.Math;
|
||||
using StgSharp.Control;
|
||||
using StgSharp.Linear;
|
||||
using StgSharp.Math;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace StgSharp.Geometries
|
||||
{
|
||||
public class Rectangle : IGeometry
|
||||
public class Rectangle : IPlainGeometry
|
||||
{
|
||||
internal Point _basePoint;
|
||||
internal Point _center;
|
||||
internal Point _centerToCorner1;
|
||||
internal Point _centerToCorner2;
|
||||
internal Point _vertex1;
|
||||
internal Point _vertex2;
|
||||
internal RenderMode _renderMode;
|
||||
internal readonly uint bornTick;
|
||||
|
||||
public override sealed Point BasePoint => _basePoint;
|
||||
public override sealed Point RefPoint=>_center;
|
||||
|
||||
public override sealed Point RefVec01 => _centerToCorner1;
|
||||
public override sealed Point RefVec01 => _vertex1;
|
||||
|
||||
public override sealed Point RefVec02 => _centerToCorner2;
|
||||
public override sealed Point RefVec02 => _vertex2;
|
||||
|
||||
public override RenderMode renderMode => _renderMode;
|
||||
|
||||
@@ -75,7 +77,7 @@ namespace StgSharp.Geometries
|
||||
/// <param name="tick">当前游戏刻</param>
|
||||
internal override void CalcVec02(vec3d vec, uint tick)
|
||||
{
|
||||
_centerToCorner1._position = vec + UpdateCTC1(tick);
|
||||
_vertex1._position = vec + UpdateCTC1(tick);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -87,9 +89,9 @@ namespace StgSharp.Geometries
|
||||
/// <exception cref="ArgumentException">计算出的第二条对角线长与第一条不相等</exception>
|
||||
internal override void CalcVec03(vec3d vec, uint tick)
|
||||
{
|
||||
_centerToCorner2._position = vec + UpdateCTC2(tick);
|
||||
if (_centerToCorner1._position.GetLength()
|
||||
== _centerToCorner2._position.GetLength())
|
||||
_vertex2._position = vec + UpdateCTC2(tick);
|
||||
if (_vertex1._position.GetLength()
|
||||
== _vertex2._position.GetLength())
|
||||
{
|
||||
throw new ArgumentException("Cannot form a triangle, " +
|
||||
"two crossing lines are not equal!");
|
||||
@@ -114,7 +116,49 @@ namespace StgSharp.Geometries
|
||||
|
||||
public override Line[] GetAllSides()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
|
||||
Line[] sides = new Line[4]
|
||||
{
|
||||
new Line(GameTimeLine.tickCounter),
|
||||
new Line(GameTimeLine.tickCounter),
|
||||
new Line(GameTimeLine.tickCounter),
|
||||
new Line(GameTimeLine.tickCounter),
|
||||
};
|
||||
|
||||
|
||||
sides[0]._basePoint = this._vertex1;
|
||||
sides[0]._beginPoint = this._vertex1;
|
||||
sides[0]._endPoint = this._vertex2;
|
||||
|
||||
sides[1]._basePoint = this._vertex2;
|
||||
sides[1]._beginPoint = this._vertex2;
|
||||
sides[1]._endPoint = new Point() { _position = GetVertex3(GameTimeLine.tickCounter) };
|
||||
sides[1].movEnd += this.GetVertex3;
|
||||
|
||||
sides[2]._basePoint = sides[1]._endPoint;
|
||||
sides[2]._beginPoint = sides[2]._basePoint;
|
||||
sides[2]._endPoint = new Point() { _position = this.GetVertex4(GameTimeLine.tickCounter) };
|
||||
sides[2].movEnd += this.GetVertex4;
|
||||
|
||||
sides[3]._beginPoint = sides[2]._endPoint;
|
||||
sides[3]._endPoint = this._vertex1;
|
||||
|
||||
return sides;
|
||||
}
|
||||
|
||||
public override Plain GetPlain()
|
||||
{
|
||||
return new Plain(_vertex1._position, );
|
||||
}
|
||||
|
||||
protected vec3d GetVertex3(Counter<uint> tick)
|
||||
{
|
||||
return 2 * this._center._position - this._vertex1._position;
|
||||
}
|
||||
|
||||
protected vec3d GetVertex4(Counter<uint> tick)
|
||||
{
|
||||
return 2 * this._center._position - this._vertex2._position;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user