daily update on 20230416 by nitload youmu

This commit is contained in:
Nitload
2023-04-16 03:28:59 +08:00
parent 9756504e9d
commit 7891a26550
26 changed files with 215 additions and 94 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
+14 -8
View File
@@ -1,8 +1,10 @@
using Steamworks; using Steamworks;
using StgSharp.Linear;
using StgSharp.Math; using StgSharp.Math;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.Runtime.CompilerServices;
using System.Text; using System.Text;
namespace StgSharp.Geometries namespace StgSharp.Geometries
@@ -11,8 +13,8 @@ namespace StgSharp.Geometries
{ {
internal Point _basePoint; internal Point _basePoint;
internal Point _center; internal Point _center;
internal Point _radius; internal Point _beginPoint;
internal Point _angle; internal Point _endPoint;
internal RenderMode _renderMode; internal RenderMode _renderMode;
internal readonly uint bornTick; internal readonly uint bornTick;
@@ -26,13 +28,13 @@ namespace StgSharp.Geometries
bornTick = tickCounter._value; bornTick = tickCounter._value;
} }
public override Point BasePoint => _basePoint; public override Point RefOrigin => _basePoint;
public override Point RefPoint => _center; 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; public override RenderMode renderMode => _renderMode;
@@ -45,12 +47,12 @@ namespace StgSharp.Geometries
internal sealed override void CalcVec02(vec3d vec, uint tick) 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) 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; public virtual vec3d MoveCenter(uint tick) => default;
@@ -88,7 +90,11 @@ namespace StgSharp.Geometries
throw new NotImplementedException(); throw new NotImplementedException();
} }
public override Line[] GetAllSides() => throw new NotImplementedException();
public override Plain GetPlain()
{
return new Plain(this._center,this._beginPoint,this._endPoint);
}
} }
} }
+1 -1
View File
@@ -15,7 +15,7 @@ namespace StgSharp.Geometries
internal RenderMode _renderMode; internal RenderMode _renderMode;
internal readonly uint bornTick; internal readonly uint bornTick;
public override Point BasePoint => _baseCenter; public override Point RefOrigin => _baseCenter;
public override Point RefPoint => _center; public override Point RefPoint => _center;
@@ -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 namespace StgSharp.Geometries
{ {
/// <summary>
/// 平面几何体。包含三角形,对称四边形,自由多边形等。最多可由16个点参数定义。
/// </summary>
public abstract class IPlainGeometry:INode<IPlainGeometry> public abstract class IPlainGeometry:INode<IPlainGeometry>
{ {
private readonly uint bornTick; private readonly uint bornTick;
public abstract Point BasePoint { get; } public abstract Point RefOrigin { get; }
public abstract Point RefPoint{ get; } public abstract Point RefPoint{ get; }
public abstract Point RefVec01{ get; } public abstract Point RefVec01{ get; }
public abstract Point RefVec02{ get; } public abstract Point RefVec02{ get; }
@@ -31,6 +35,21 @@ namespace StgSharp.Geometries
internal abstract void CalcVec01(uint tick); internal abstract void CalcVec01(uint tick);
internal abstract void CalcVec02(vec3d vec, uint tick); internal abstract void CalcVec02(vec3d vec, uint tick);
internal abstract void CalcVec03(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); internal abstract void OnRender(uint tick);
public abstract RenderMode renderMode { get; } 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()
{
}
}
}
+7 -1
View File
@@ -1,6 +1,7 @@
using Steamworks; using Steamworks;
using StgSharp; using StgSharp;
using StgSharp.Control; using StgSharp.Control;
using StgSharp.Linear;
using StgSharp.Math; using StgSharp.Math;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -18,7 +19,7 @@ namespace StgSharp.Geometries
internal RenderMode _renderMode; internal RenderMode _renderMode;
internal readonly uint bornTick; internal readonly uint bornTick;
public override Point BasePoint => _basePoint; public override Point RefOrigin => _basePoint;
public override Point RefPoint => _beginPoint; public override Point RefPoint => _beginPoint;
@@ -98,5 +99,10 @@ namespace StgSharp.Geometries
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
public override Plain GetPlain()
{
throw new ToUpperDimensionException();
}
} }
} }
@@ -1,4 +1,5 @@
using StgSharp.Control; using StgSharp.Control;
using StgSharp.Linear;
using StgSharp.Math; using StgSharp.Math;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -15,7 +16,7 @@ namespace StgSharp.Geometries
internal RenderMode _renderMode; internal RenderMode _renderMode;
internal readonly uint bornTick; 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 RefPoint => _center;
public override sealed Point RefVec01 => _vertex1; public override sealed Point RefVec01 => _vertex1;
@@ -123,6 +124,10 @@ namespace StgSharp.Geometries
return sides; return sides;
} }
public override Plain GetPlain()
{
return new Plain(this._center, this._vertex1,this._vertex2);
}
protected vec3d GetVertex3(Counter<uint> tick) protected vec3d GetVertex3(Counter<uint> tick)
{ {
+4 -4
View File
@@ -28,17 +28,17 @@ namespace StgSharp.Geometries
public bool IsInGeometry(IPlainGeometry geo) public bool IsInGeometry(IPlainGeometry geo)
{ {
throw new NotImplementedException();
} }
public bool IsInGeometry(IPlainGeometryCombination geo) 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;
} }
} }
+106 -22
View File
@@ -1,48 +1,132 @@
using System; using StgSharp.Linear;
using StgSharp.Math;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Numerics; using System.Numerics;
using System.Text; using System.Text;
namespace StgSharp.Geometries 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]; throw new NotImplementedException();
this.toSimpleGeometry();
} }
public Polygon(Point[] pointsArray) internal override void CalcVec03(vec3d vec, uint tick)
{ {
PointsArray = pointsArray; throw new NotImplementedException();
this.toSimpleGeometry();
} }
internal override void toSimpleGeometry() internal override void CalcVec04(vec3d vec, uint tick)
{ {
Point begin = pointsArray[0]; throw new NotImplementedException();
for (int i = 1; i <= pointsArray.Length; i++)
{
Triangle a = new Triangle(this._bornTick);
this.Add(a);
}
} }
public Point[] PointsArray internal override void CalcVec05(vec3d vec, uint tick)
{ {
get { return pointsArray; } throw new NotImplementedException();
set { pointsArray = value; }
} }
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();
}
} }
} }
+2 -2
View File
@@ -16,7 +16,7 @@ namespace StgSharp.Geometries
internal RenderMode _renderMode; internal RenderMode _renderMode;
internal readonly uint bornTick; 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 RefPoint=>_center;
public override sealed Point RefVec01 => _vertex1; public override sealed Point RefVec01 => _vertex1;
@@ -148,7 +148,7 @@ namespace StgSharp.Geometries
public override Plain GetPlain() public override Plain GetPlain()
{ {
return new Plain(_vertex1._position, ); return new Plain(this._center, this._vertex1,this._vertex2);
} }
protected vec3d GetVertex3(Counter<uint> tick) protected vec3d GetVertex3(Counter<uint> tick)
+10 -3
View File
@@ -1,4 +1,5 @@
using StgSharp; using StgSharp;
using StgSharp.Linear;
using StgSharp.Math; using StgSharp.Math;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -16,7 +17,7 @@ namespace StgSharp.Geometries
internal RenderMode _renderMode; internal RenderMode _renderMode;
internal readonly uint bornTick; internal readonly uint bornTick;
public override sealed Point BasePoint => _basePoint; public override sealed Point RefOrigin => _basePoint;
public override sealed Point RefPoint=>_vertex1; public override sealed Point RefPoint=>_vertex1;
@@ -63,8 +64,8 @@ namespace StgSharp.Geometries
switch (_renderMode) switch (_renderMode)
{ {
case RenderMode.BasePoint: case RenderMode.BasePoint:
CalcVec02(BasePoint._position,tick); CalcVec02(RefOrigin._position,tick);
CalcVec03(BasePoint._position,tick); CalcVec03(RefOrigin._position,tick);
break; break;
case RenderMode.RefPoint: case RenderMode.RefPoint:
CalcVec02(_vertex1._position,tick); CalcVec02(_vertex1._position,tick);
@@ -103,5 +104,11 @@ namespace StgSharp.Geometries
return sides; return sides;
} }
public override Plain GetPlain()
{
return new Plain(this._vertex1,this._vertex2,this._vertex3);
}
} }
} }
+22 -22
View File
@@ -8,28 +8,28 @@ namespace StgSharp.Linear
{ {
public unsafe class Plain public unsafe class Plain
{ {
internal vec3d origin;
internal vec3d vec1; internal vec3d vec1;
internal vec3d vec2; internal vec3d vec2;
internal float a; internal vec3d plainParameter;
internal float b;
internal float c;
internal readonly float d = -1 ; 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平面上的方向投影 this.origin = o;
vec2 = v2 - vec1 * (v2.X/v1.X); //计算平面在yz平面上的方向投影 this.vec1 = v1 - v2 * (v1.Y/v2.Y); //计算平面在xz平面上的方向投影
this.vec2 = v2 - vec1 * (v2.X/v1.X); //计算平面在yz平面上的方向投影
//|origin|-k1*|vec1|-k2*|vec2|计算c; //|origin|-k1*|vec1|-k2*|vec2|计算plainParameter.Z;
c = origin.Z - vec1.Z * (origin.X / vec1.X) - vec2.Z * (origin.Y / vec2.Y); plainParameter.Z = origin.Z - vec1.Z * (origin.X / vec1.X) - vec2.Z * (origin.Y / vec2.Y);
//根据c和对应的方向矢量计算a和b //根据plainParameter.Z和对应的方向矢量计算plainParameter.X和plainParameter.Y
a = vec1.X * (vec1.Z / c); plainParameter.X = vec1.X * (vec1.Z / plainParameter.Z);
b = vec2.Y * (vec2.Z / c); plainParameter.Y = vec2.Y * (vec2.Z / plainParameter.Z);
a = 1 / a; plainParameter.X = 1 / plainParameter.X;
b = 1 / b; plainParameter.Y = 1 / plainParameter.Y;
c = 1 / c; plainParameter.Z = 1 / plainParameter.Z;
} }
public Plain(Point p1, Point p2, Point p3) public Plain(Point p1, Point p2, Point p3)
@@ -42,15 +42,15 @@ namespace StgSharp.Linear
vec1 = v1 - v2 * (v1.Y / v2.Y); //计算平面在xz平面上的方向投影 vec1 = v1 - v2 * (v1.Y / v2.Y); //计算平面在xz平面上的方向投影
vec2 = v2 - vec1 * (v2.X / v1.X); //计算平面在yz平面上的方向投影 vec2 = v2 - vec1 * (v2.X / v1.X); //计算平面在yz平面上的方向投影
//|origin|-k1*|vec1|-k2*|vec2|计算c; //|origin|-k1*|vec1|-k2*|vec2|计算plainParameter.Z;
c = origin.Z - vec1.Z * (origin.X / vec1.X) - vec2.Z * (origin.Y / vec2.Y); plainParameter.Z = origin.Z - vec1.Z * (origin.X / vec1.X) - vec2.Z * (origin.Y / vec2.Y);
//根据c和对应的方向矢量计算a和b //根据plainParameter.Z和对应的方向矢量计算plainParameter.X和plainParameter.Y
a = vec1.X * (vec1.Z / c); plainParameter.X = vec1.X * (vec1.Z / plainParameter.Z);
b = vec2.Y * (vec2.Z / c); plainParameter.Y = vec2.Y * (vec2.Z / plainParameter.Z);
a = 1 / a; plainParameter.X = 1 / plainParameter.X;
b = 1 / b; plainParameter.Y = 1 / plainParameter.Y;
c = 1 / c; plainParameter.Z = 1 / plainParameter.Z;
} }
} }
@@ -1 +1 @@
ce46d1bdaa8770ceaaf7ed3e62af2643adc523f6 ff849decdf788400d580af0a2c6cad5f58d8e017