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 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);
}
}
}
+1 -1
View File
@@ -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;
@@ -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()
{
}
}
}
+7 -1
View File
@@ -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)
{
+4 -4
View File
@@ -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;
}
}
+106 -22
View File
@@ -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();
}
}
}
+2 -2
View File
@@ -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)
+10 -3
View File
@@ -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);
}
}
}
+22 -22
View File
@@ -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