This commit is contained in:
h z
2025-01-08 21:05:36 +00:00
commit 08293bbf3a
10 changed files with 231 additions and 0 deletions

5
.gitignore vendored Normal file
View File

@@ -0,0 +1,5 @@
bin/
obj/
/packages/
riderModule.iml
/_ReSharper.Caches/

13
Hermeteus.csproj Normal file
View File

@@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Skeleton\Skeleton.csproj" />
</ItemGroup>
</Project>

22
Hermeteus.sln Normal file
View File

@@ -0,0 +1,22 @@
Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hermeteus", "Hermeteus.csproj", "{65C35817-9FA0-4AC6-B798-4AFBFC66A7C7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Skeleton", "..\Skeleton\Skeleton.csproj", "{D8D5EFCF-16AD-4E1F-ACF6-B47367A5CDB6}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{65C35817-9FA0-4AC6-B798-4AFBFC66A7C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{65C35817-9FA0-4AC6-B798-4AFBFC66A7C7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{65C35817-9FA0-4AC6-B798-4AFBFC66A7C7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{65C35817-9FA0-4AC6-B798-4AFBFC66A7C7}.Release|Any CPU.Build.0 = Release|Any CPU
{D8D5EFCF-16AD-4E1F-ACF6-B47367A5CDB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D8D5EFCF-16AD-4E1F-ACF6-B47367A5CDB6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D8D5EFCF-16AD-4E1F-ACF6-B47367A5CDB6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D8D5EFCF-16AD-4E1F-ACF6-B47367A5CDB6}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

25
src/HomogeneousMixture.cs Normal file
View File

@@ -0,0 +1,25 @@
namespace Hermeteus;
public class HomogeneousMixture
{
public HomogeneousMixture()
{
Components = new Dictionary<Molecule, double>();
}
internal Dictionary<Molecule, double> Components { get; }
internal SU3 EigenState => Components.Keys
.Select(x => x.EigenState.Log() * Ratio(x))
.Aggregate((a, b) => a + b)
.Exp();
public double Amount => Components.Sum(p => p.Value);
public double Ratio(Molecule m) => Amount == 0
? 0
: Components.GetValueOrDefault(m, 0) / Amount;
}

37
src/Measurements/Basic.cs Normal file
View File

@@ -0,0 +1,37 @@
namespace Hermeteus.Measurements;
public static partial class Measurement
{
private static double MolecularMass(this Molecule m)
{
H3 w = m.EigenState.ConjugateOn(new DiagR3(Math.PI / 32, Math.PI * 2, Math.PI * 8));
double r0 = w.Rayleigh(
m.EigenState.Log().ColumnAverageBivariant +
m.EigenState.ColumnAverage
);
return r0 * r0 / 8d;
}
private static double MolecularDensity(this Molecule m)
{
H3 w = m.EigenState.ConjugateOn(new DiagR3(-Math.PI, 0, Math.PI));
double r0 = w.Rayleigh(
m.EigenState.ColumnAverageBivariant -
m.EigenState.Log().ColumnAverage
);
return r0 * r0 / 3d;
}
public static double Mass(this HomogeneousMixture h) =>
h.Components
.Select(p => p.Key.MolecularMass() * p.Value)
.Sum();
public static double Density(this HomogeneousMixture h) =>
h.Components.Keys
.Select(x => x.MolecularDensity() * h.Ratio(x))
.Sum();
}

70
src/Measurements/Color.cs Normal file
View File

@@ -0,0 +1,70 @@
using Skeleton.Constants;
namespace Hermeteus.Measurements;
public static partial class Measurement
{
private static readonly U3 RedFilter = new LieU3
(
I, 0, -1,
0, I, 0,
1, 0, -I
).Exp();
private static readonly U3 GreenFilter = new LieU3
(
0, -I, 0,
-I, 0, -1,
0, 1, 0
).Exp();
private static readonly U3 BlueFilter = new LieU3
(
0, 0, -I,
0, 0, -1,
-I, 1, 0
).Exp();
private static readonly U3 OpacityFilter = new LieU3(
I, -I, -I,
-I, I, -1,
-I, 1, -I
).Exp();
private static readonly H3 RedDefinite = RedFilter.ConjugateOn(AlgebraConstant.UniformSpectrum3);
private static readonly H3 GreenDefinite = GreenFilter.ConjugateOn(AlgebraConstant.UniformSpectrum3);
private static readonly H3 BlueDefinite = BlueFilter.ConjugateOn(AlgebraConstant.UniformSpectrum3);
private static readonly H3 OpacityDefinite = OpacityFilter.ConjugateOn(new DiagR3(0.05d, 0.74d, 1d));
public static Byte Red(HomogeneousMixture m) => (Byte)
(
m.EigenState
.ConjugateOn(RedDefinite)
.Rayleigh(Ita(m)) * 255
);
public static Byte Green(HomogeneousMixture m) => (Byte)
(
m.EigenState
.ConjugateOn(GreenDefinite)
.Rayleigh(Ita(m)) * 255
);
public static Byte Blue(HomogeneousMixture m) => (Byte)
(
m.EigenState
.ConjugateOn(BlueDefinite)
.Rayleigh(Ita(m)) * 255
);
public static Byte Alpha(HomogeneousMixture m) => (Byte)
(
m.EigenState
.ConjugateOn(OpacityDefinite)
.Rayleigh(Ita(m)) * 255
);
}

View File

@@ -0,0 +1,11 @@
using System.Numerics;
namespace Hermeteus.Measurements;
public static partial class Measurement
{
private static Complex I => Complex.ImaginaryOne;
public static C3 Ita(this HomogeneousMixture h) => h.Components.Keys
.Select(x => x.EigenState.ColumnAverageBivariant * h.Ratio(x))
.Aggregate((a, b) => a + b);
}

View File

@@ -0,0 +1,12 @@
namespace Hermeteus.Measurements;
public static partial class Measurement
{
public static double[] Negativity(this Molecule m) =>
m.EigenState.EigenValues()
.Select(eiv => eiv.Phase/Math.PI)
.ToArray();
}

13
src/Molecule.cs Normal file
View File

@@ -0,0 +1,13 @@
namespace Hermeteus;
public class Molecule
{
internal SU3 EigenState { get; set; }
public Molecule(SU3 eigenState)
{
EigenState = eigenState;
}
}

23
src/Using.cs Normal file
View File

@@ -0,0 +1,23 @@
global using C3 = Skeleton.Algebra.CategoryOf<Skeleton.Algebra.DimensionProviders.IDim3>.OnField<System.Numerics.Complex>.FVector;
global using R3 = Skeleton.Algebra.CategoryOf<Skeleton.Algebra.DimensionProviders.IDim3>.OnField<double>.FVector;
global using C33 = Skeleton.Algebra.CategoryOf<Skeleton.Algebra.DimensionProviders.IDim3>.OnField<System.Numerics.Complex>.FMatrix;
global using R33 = Skeleton.Algebra.CategoryOf<Skeleton.Algebra.DimensionProviders.IDim3>.OnField<double>.FMatrix;
global using U3 = Skeleton.Algebra.CategoryOf<Skeleton.Algebra.DimensionProviders.IDim3>.FUnitaryMatrix;
global using SU3 = Skeleton.Algebra.CategoryOf<Skeleton.Algebra.DimensionProviders.IDim3>.FSpecialUnitaryMatrix;
global using LieU3 = Skeleton.Algebra.CategoryOf<Skeleton.Algebra.DimensionProviders.IDim3>.FLieUnitaryMatrix;
global using LieSU3 = Skeleton.Algebra.CategoryOf<Skeleton.Algebra.DimensionProviders.IDim3>.FSpecialLieUnitaryMatrix;
global using C3Space = Skeleton.Algebra.CategoryOf<Skeleton.Algebra.DimensionProviders.IDim3>.OnField<System.Numerics.Complex>.FVectorSpace;
global using R3Space = Skeleton.Algebra.CategoryOf<Skeleton.Algebra.DimensionProviders.IDim3>.OnField<double>.FVectorSpace;
global using DiagR3 = Skeleton.Algebra.CategoryOf<Skeleton.Algebra.DimensionProviders.IDim3>.OnField<double>.FDiagonalMatrix;
global using H3 = Skeleton.Algebra.CategoryOf<Skeleton.Algebra.DimensionProviders.IDim3>.FHermitianMatrix;