daily update on 20230416 by nitload youmu
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
using Steamworks;
|
||||
using StgSharp.Linear;
|
||||
using StgSharp.Math;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Text;
|
||||
|
||||
namespace StgSharp.Geometries
|
||||
@@ -11,8 +13,8 @@ namespace StgSharp.Geometries
|
||||
{
|
||||
internal Point _basePoint;
|
||||
internal Point _center;
|
||||
internal Point _radius;
|
||||
internal Point _angle;
|
||||
internal Point _beginPoint;
|
||||
internal Point _endPoint;
|
||||
internal RenderMode _renderMode;
|
||||
internal readonly uint bornTick;
|
||||
|
||||
@@ -26,13 +28,13 @@ namespace StgSharp.Geometries
|
||||
bornTick = tickCounter._value;
|
||||
}
|
||||
|
||||
public override Point BasePoint => _basePoint;
|
||||
public override Point RefOrigin => _basePoint;
|
||||
|
||||
public override Point RefPoint => _center;
|
||||
|
||||
public override Point RefVec01 => _radius;
|
||||
public override Point RefVec01 => _beginPoint;
|
||||
|
||||
public override Point RefVec02 => _angle;
|
||||
public override Point RefVec02 => _endPoint;
|
||||
|
||||
public override RenderMode renderMode => _renderMode;
|
||||
|
||||
@@ -45,12 +47,12 @@ namespace StgSharp.Geometries
|
||||
|
||||
internal sealed override void CalcVec02(vec3d vec, uint tick)
|
||||
{
|
||||
_radius._position = vec + UpdateRadius(tick);
|
||||
_beginPoint._position = vec + UpdateRadius(tick);
|
||||
|
||||
}
|
||||
internal sealed override void CalcVec03(vec3d vec, uint tick)
|
||||
{
|
||||
_angle._position = vec + UpdateAngle(tick);
|
||||
_endPoint._position = vec + UpdateAngle(tick);
|
||||
}
|
||||
|
||||
public virtual vec3d MoveCenter(uint tick) => default;
|
||||
@@ -88,7 +90,11 @@ namespace StgSharp.Geometries
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override Line[] GetAllSides() => throw new NotImplementedException();
|
||||
|
||||
|
||||
public override Plain GetPlain()
|
||||
{
|
||||
return new Plain(this._center,this._beginPoint,this._endPoint);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ namespace StgSharp.Geometries
|
||||
internal RenderMode _renderMode;
|
||||
internal readonly uint bornTick;
|
||||
|
||||
public override Point BasePoint => _baseCenter;
|
||||
public override Point RefOrigin => _baseCenter;
|
||||
|
||||
public override Point RefPoint => _center;
|
||||
|
||||
|
||||
+22
@@ -23,4 +23,26 @@ namespace StgSharp.Geometries
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 当几何体调用了过多的CalcVec方法时,产生UnusedVertexException异常
|
||||
/// </summary>
|
||||
public class UnusedVertexException : Exception
|
||||
{
|
||||
public UnusedVertexException()
|
||||
{
|
||||
}
|
||||
|
||||
public UnusedVertexException(string message) : base(message)
|
||||
{
|
||||
}
|
||||
|
||||
public UnusedVertexException(string message, Exception innerException) : base(message, innerException)
|
||||
{
|
||||
}
|
||||
|
||||
protected UnusedVertexException(SerializationInfo info, StreamingContext context) : base(info, context)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,11 +6,15 @@ using System.Text;
|
||||
|
||||
namespace StgSharp.Geometries
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 平面几何体。包含三角形,对称四边形,自由多边形等。最多可由16个点参数定义。
|
||||
/// </summary>
|
||||
public abstract class IPlainGeometry:INode<IPlainGeometry>
|
||||
{
|
||||
private readonly uint bornTick;
|
||||
|
||||
public abstract Point BasePoint { get; }
|
||||
public abstract Point RefOrigin { get; }
|
||||
public abstract Point RefPoint{ get; }
|
||||
public abstract Point RefVec01{ get; }
|
||||
public abstract Point RefVec02{ get; }
|
||||
@@ -31,6 +35,21 @@ namespace StgSharp.Geometries
|
||||
internal abstract void CalcVec01(uint tick);
|
||||
internal abstract void CalcVec02(vec3d vec, uint tick);
|
||||
internal abstract void CalcVec03(vec3d vec, uint tick);
|
||||
internal abstract void CalcVec04(vec3d vec, uint tick);
|
||||
internal abstract void CalcVec05(vec3d vec, uint tick);
|
||||
internal abstract void CalcVec06(vec3d vec, uint tick);
|
||||
internal abstract void CalcVec07(vec3d vec, uint tick);
|
||||
internal abstract void CalcVec08(vec3d vec, uint tick);
|
||||
internal abstract void CalcVec09(vec3d vec, uint tick);
|
||||
internal abstract void CalcVec10(vec3d vec, uint tick);
|
||||
internal abstract void CalcVec11(vec3d vec, uint tick);
|
||||
internal abstract void CalcVec12(vec3d vec, uint tick);
|
||||
internal abstract void CalcVec13(vec3d vec, uint tick);
|
||||
internal abstract void CalcVec14(vec3d vec, uint tick);
|
||||
internal abstract void CalcVec15(vec3d vec, uint tick);
|
||||
internal abstract void CalcVec16(vec3d vec, uint tick);
|
||||
|
||||
|
||||
internal abstract void OnRender(uint tick);
|
||||
|
||||
public abstract RenderMode renderMode { get; }
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace StgSharp.Geometries
|
||||
{
|
||||
public abstract class IPlainGeometryCombination:LinkedList<IPlainGeometry>
|
||||
{
|
||||
internal readonly uint _bornTick;
|
||||
|
||||
internal abstract void toSimpleGeometry();
|
||||
|
||||
public IPlainGeometryCombination(uint bornTime)
|
||||
{
|
||||
_bornTick = bornTime;
|
||||
}
|
||||
|
||||
public IPlainGeometryCombination(Counter<uint> timer)
|
||||
{
|
||||
_bornTick = timer._value;
|
||||
}
|
||||
|
||||
public IPlainGeometryCombination()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
using Steamworks;
|
||||
using StgSharp;
|
||||
using StgSharp.Control;
|
||||
using StgSharp.Linear;
|
||||
using StgSharp.Math;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -18,7 +19,7 @@ namespace StgSharp.Geometries
|
||||
internal RenderMode _renderMode;
|
||||
internal readonly uint bornTick;
|
||||
|
||||
public override Point BasePoint => _basePoint;
|
||||
public override Point RefOrigin => _basePoint;
|
||||
|
||||
public override Point RefPoint => _beginPoint;
|
||||
|
||||
@@ -98,5 +99,10 @@ namespace StgSharp.Geometries
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override Plain GetPlain()
|
||||
{
|
||||
throw new ToUpperDimensionException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StgSharp.Control;
|
||||
using StgSharp.Linear;
|
||||
using StgSharp.Math;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -15,7 +16,7 @@ namespace StgSharp.Geometries
|
||||
internal RenderMode _renderMode;
|
||||
internal readonly uint bornTick;
|
||||
|
||||
public override sealed Point BasePoint => _basePoint;
|
||||
public override sealed Point RefOrigin => _basePoint;
|
||||
public override sealed Point RefPoint => _center;
|
||||
|
||||
public override sealed Point RefVec01 => _vertex1;
|
||||
@@ -123,6 +124,10 @@ namespace StgSharp.Geometries
|
||||
return sides;
|
||||
}
|
||||
|
||||
public override Plain GetPlain()
|
||||
{
|
||||
return new Plain(this._center, this._vertex1,this._vertex2);
|
||||
}
|
||||
|
||||
protected vec3d GetVertex3(Counter<uint> tick)
|
||||
{
|
||||
|
||||
@@ -28,17 +28,17 @@ namespace StgSharp.Geometries
|
||||
|
||||
public bool IsInGeometry(IPlainGeometry geo)
|
||||
{
|
||||
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public bool IsInGeometry(IPlainGeometryCombination geo)
|
||||
{
|
||||
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public bool IsInPlain(IPlainGeometry geo)
|
||||
public bool IsOnPlain(IPlainGeometry geo)
|
||||
{
|
||||
|
||||
return this._position * geo.GetPlain().plainParameter == 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,48 +1,132 @@
|
||||
using System;
|
||||
using StgSharp.Linear;
|
||||
using StgSharp.Math;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Numerics;
|
||||
using System.Text;
|
||||
|
||||
namespace StgSharp.Geometries
|
||||
{
|
||||
public class Polygon : IPlainGeometryCombination
|
||||
public class Polygon : IPlainGeometry
|
||||
{
|
||||
internal Point[] pointsArray;
|
||||
internal Point _refOrigin;
|
||||
internal Point[] vertexArray ;
|
||||
internal RenderMode _renderMode;
|
||||
internal readonly int _vertexCount;
|
||||
|
||||
public Polygon(uint bornTime) : base(bornTime)
|
||||
public override Point RefOrigin => _refOrigin;
|
||||
|
||||
public override Point RefPoint => vertexArray[0];
|
||||
|
||||
public override Point RefVec01 => throw new NotImplementedException();
|
||||
|
||||
public override Point RefVec02 => throw new NotImplementedException();
|
||||
|
||||
public override RenderMode renderMode => throw new NotImplementedException();
|
||||
|
||||
internal override void CalcVec01(uint tick)
|
||||
{
|
||||
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Polygon(int pointNum)
|
||||
internal override void CalcVec02(vec3d vec, uint tick)
|
||||
{
|
||||
pointsArray = new Point[pointNum];
|
||||
this.toSimpleGeometry();
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Polygon(Point[] pointsArray)
|
||||
internal override void CalcVec03(vec3d vec, uint tick)
|
||||
{
|
||||
PointsArray = pointsArray;
|
||||
this.toSimpleGeometry();
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
internal override void toSimpleGeometry()
|
||||
internal override void CalcVec04(vec3d vec, uint tick)
|
||||
{
|
||||
Point begin = pointsArray[0];
|
||||
for (int i = 1; i <= pointsArray.Length; i++)
|
||||
{
|
||||
Triangle a = new Triangle(this._bornTick);
|
||||
this.Add(a);
|
||||
}
|
||||
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Point[] PointsArray
|
||||
internal override void CalcVec05(vec3d vec, uint tick)
|
||||
{
|
||||
get { return pointsArray; }
|
||||
set { pointsArray = value; }
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
internal override void CalcVec06(vec3d vec, uint tick)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
internal override void CalcVec07(vec3d vec, uint tick)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
internal override void CalcVec08(vec3d vec, uint tick)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
internal override void CalcVec09(vec3d vec, uint tick)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
internal override void CalcVec10(vec3d vec, uint tick)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
internal override void CalcVec11(vec3d vec, uint tick)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
internal override void CalcVec12(vec3d vec, uint tick)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
internal override void CalcVec13(vec3d vec, uint tick)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
internal override void CalcVec14(vec3d vec, uint tick)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
internal override void CalcVec15(vec3d vec, uint tick)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
internal override void CalcVec16(vec3d vec, uint tick)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
internal override void OnRender(uint tick)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override float SetArrayX()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override float SetArrayY()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override Line[] GetAllSides()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override Plain GetPlain()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ namespace StgSharp.Geometries
|
||||
internal RenderMode _renderMode;
|
||||
internal readonly uint bornTick;
|
||||
|
||||
public override sealed Point BasePoint => _basePoint;
|
||||
public override sealed Point RefOrigin => _basePoint;
|
||||
public override sealed Point RefPoint=>_center;
|
||||
|
||||
public override sealed Point RefVec01 => _vertex1;
|
||||
@@ -148,7 +148,7 @@ namespace StgSharp.Geometries
|
||||
|
||||
public override Plain GetPlain()
|
||||
{
|
||||
return new Plain(_vertex1._position, );
|
||||
return new Plain(this._center, this._vertex1,this._vertex2);
|
||||
}
|
||||
|
||||
protected vec3d GetVertex3(Counter<uint> tick)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StgSharp;
|
||||
using StgSharp.Linear;
|
||||
using StgSharp.Math;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -16,7 +17,7 @@ namespace StgSharp.Geometries
|
||||
internal RenderMode _renderMode;
|
||||
internal readonly uint bornTick;
|
||||
|
||||
public override sealed Point BasePoint => _basePoint;
|
||||
public override sealed Point RefOrigin => _basePoint;
|
||||
|
||||
public override sealed Point RefPoint=>_vertex1;
|
||||
|
||||
@@ -63,8 +64,8 @@ namespace StgSharp.Geometries
|
||||
switch (_renderMode)
|
||||
{
|
||||
case RenderMode.BasePoint:
|
||||
CalcVec02(BasePoint._position,tick);
|
||||
CalcVec03(BasePoint._position,tick);
|
||||
CalcVec02(RefOrigin._position,tick);
|
||||
CalcVec03(RefOrigin._position,tick);
|
||||
break;
|
||||
case RenderMode.RefPoint:
|
||||
CalcVec02(_vertex1._position,tick);
|
||||
@@ -103,5 +104,11 @@ namespace StgSharp.Geometries
|
||||
|
||||
return sides;
|
||||
}
|
||||
|
||||
public override Plain GetPlain()
|
||||
{
|
||||
return new Plain(this._vertex1,this._vertex2,this._vertex3);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,28 +8,28 @@ namespace StgSharp.Linear
|
||||
{
|
||||
public unsafe class Plain
|
||||
{
|
||||
internal vec3d origin;
|
||||
internal vec3d vec1;
|
||||
internal vec3d vec2;
|
||||
|
||||
internal float a;
|
||||
internal float b;
|
||||
internal float c;
|
||||
internal vec3d plainParameter;
|
||||
internal readonly float d = -1 ;
|
||||
|
||||
public Plain(vec3d origin, vec3d v1, vec3d v2)
|
||||
public Plain(vec3d o, vec3d v1, vec3d v2)
|
||||
{
|
||||
vec1 = v1 - v2 * (v1.Y/v2.Y); //计算平面在xz平面上的方向投影
|
||||
vec2 = v2 - vec1 * (v2.X/v1.X); //计算平面在yz平面上的方向投影
|
||||
this.origin = o;
|
||||
this.vec1 = v1 - v2 * (v1.Y/v2.Y); //计算平面在xz平面上的方向投影
|
||||
this.vec2 = v2 - vec1 * (v2.X/v1.X); //计算平面在yz平面上的方向投影
|
||||
|
||||
//|origin|-k1*|vec1|-k2*|vec2|计算c;
|
||||
c = origin.Z - vec1.Z * (origin.X / vec1.X) - vec2.Z * (origin.Y / vec2.Y);
|
||||
//根据c和对应的方向矢量计算a和b
|
||||
a = vec1.X * (vec1.Z / c);
|
||||
b = vec2.Y * (vec2.Z / c);
|
||||
//|origin|-k1*|vec1|-k2*|vec2|计算plainParameter.Z;
|
||||
plainParameter.Z = origin.Z - vec1.Z * (origin.X / vec1.X) - vec2.Z * (origin.Y / vec2.Y);
|
||||
//根据plainParameter.Z和对应的方向矢量计算plainParameter.X和plainParameter.Y
|
||||
plainParameter.X = vec1.X * (vec1.Z / plainParameter.Z);
|
||||
plainParameter.Y = vec2.Y * (vec2.Z / plainParameter.Z);
|
||||
|
||||
a = 1 / a;
|
||||
b = 1 / b;
|
||||
c = 1 / c;
|
||||
plainParameter.X = 1 / plainParameter.X;
|
||||
plainParameter.Y = 1 / plainParameter.Y;
|
||||
plainParameter.Z = 1 / plainParameter.Z;
|
||||
}
|
||||
|
||||
public Plain(Point p1, Point p2, Point p3)
|
||||
@@ -42,15 +42,15 @@ namespace StgSharp.Linear
|
||||
vec1 = v1 - v2 * (v1.Y / v2.Y); //计算平面在xz平面上的方向投影
|
||||
vec2 = v2 - vec1 * (v2.X / v1.X); //计算平面在yz平面上的方向投影
|
||||
|
||||
//|origin|-k1*|vec1|-k2*|vec2|计算c;
|
||||
c = origin.Z - vec1.Z * (origin.X / vec1.X) - vec2.Z * (origin.Y / vec2.Y);
|
||||
//根据c和对应的方向矢量计算a和b
|
||||
a = vec1.X * (vec1.Z / c);
|
||||
b = vec2.Y * (vec2.Z / c);
|
||||
//|origin|-k1*|vec1|-k2*|vec2|计算plainParameter.Z;
|
||||
plainParameter.Z = origin.Z - vec1.Z * (origin.X / vec1.X) - vec2.Z * (origin.Y / vec2.Y);
|
||||
//根据plainParameter.Z和对应的方向矢量计算plainParameter.X和plainParameter.Y
|
||||
plainParameter.X = vec1.X * (vec1.Z / plainParameter.Z);
|
||||
plainParameter.Y = vec2.Y * (vec2.Z / plainParameter.Z);
|
||||
|
||||
a = 1 / a;
|
||||
b = 1 / b;
|
||||
c = 1 / c;
|
||||
plainParameter.X = 1 / plainParameter.X;
|
||||
plainParameter.Y = 1 / plainParameter.Y;
|
||||
plainParameter.Z = 1 / plainParameter.Z;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
ce46d1bdaa8770ceaaf7ed3e62af2643adc523f6
|
||||
ff849decdf788400d580af0a2c6cad5f58d8e017
|
||||
|
||||
Reference in New Issue
Block a user