daily update on 20230416 by nitload youmu
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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