using InnovEnergy.Lib.Units.Power; namespace InnovEnergy.Lib.Units.Composite; public sealed class AcPhase { private AcPhase(){} public required Voltage Voltage { get; init; } public required Current Current { get; init; } public required AcPower Power { get; init; } public static AcPhase FromVoltageCurrentPhi(Voltage voltageRms, Current currentRms, Angle phi) => new() { Current = currentRms, Voltage = voltageRms, Power = AcPower.FromVoltageCurrentPhi(voltageRms, currentRms, phi) }; public static AcPhase FromVoltageCurrentActiveReactive(Voltage voltageRms, Current currentRms, ActivePower activePower, ReactivePower reactivePower) => new() { Current = currentRms, Voltage = voltageRms, Power = AcPower.FromActiveReactive(activePower, reactivePower) }; public static AcPhase FromVoltageCurrentActiveReactiveApparent(Voltage voltageRms, Current currentRms, ActivePower activePower, ReactivePower reactivePower, ApparentPower apparentPower) => new() { Current = currentRms, Voltage = voltageRms, Power = AcPower.FromActiveReactiveApparent(activePower, reactivePower, apparentPower) }; public static AcPhase Null => FromVoltageCurrentPhi(0, 0, 0); }