[wpiunits] Add resistance units (#7168)

This commit is contained in:
Nicholas Armstrong
2024-10-23 10:20:17 -04:00
committed by GitHub
parent a3b12b3bd9
commit ac907f755a
32 changed files with 849 additions and 5 deletions

View File

@@ -25,6 +25,7 @@ import edu.wpi.first.units.measure.MomentOfInertia;
import edu.wpi.first.units.measure.Mult;
import edu.wpi.first.units.measure.Per;
import edu.wpi.first.units.measure.Power;
import edu.wpi.first.units.measure.Resistance;
import edu.wpi.first.units.measure.Temperature;
import edu.wpi.first.units.measure.Time;
import edu.wpi.first.units.measure.Torque;
@@ -246,6 +247,8 @@ public interface Measure<U extends Unit> extends Comparable<Measure<U>> {
return times(velocity);
} else if (multiplier instanceof Voltage voltage) {
return times(voltage);
} else if (multiplier instanceof Resistance resistance) {
return times(resistance);
} else {
// Dimensional analysis fallthrough or a generic input measure type
// Do a basic unit multiplication
@@ -530,6 +533,18 @@ public interface Measure<U extends Unit> extends Comparable<Measure<U>> {
.ofBaseUnits(baseUnitMagnitude() * multiplier.baseUnitMagnitude());
}
/**
* Multiplies this measure by a resistance and returns the resulting measure in the most
* appropriate unit.
*
* @param multiplier the measurement to multiply by.
* @return the multiplication result
*/
default Measure<?> times(Resistance multiplier) {
return MultUnit.combine(unit(), multiplier.unit())
.ofBaseUnits(baseUnitMagnitude() * multiplier.baseUnitMagnitude());
}
/**
* Multiplies this measure by a conversion factor, returning the converted measurement. Unlike
* {@link #times(Per)}, this allows for basic unit cancellation to return measurements of a known
@@ -687,6 +702,8 @@ public interface Measure<U extends Unit> extends Comparable<Measure<U>> {
return divide(velocity);
} else if (divisor instanceof Voltage voltage) {
return divide(voltage);
} else if (divisor instanceof Resistance resistance) {
return divide(resistance);
} else {
// Dimensional analysis fallthrough or a generic input measure type
// Do a basic unit multiplication
@@ -957,6 +974,17 @@ public interface Measure<U extends Unit> extends Comparable<Measure<U>> {
.ofBaseUnits(baseUnitMagnitude() / divisor.baseUnitMagnitude());
}
/**
* Divides this measure by a resistance and returns the result in the most appropriate unit.
*
* @param divisor the measurement to divide by.
* @return the division result
*/
default Measure<?> divide(Resistance divisor) {
return PerUnit.combine(unit(), divisor.unit())
.ofBaseUnits(baseUnitMagnitude() / divisor.baseUnitMagnitude());
}
/**
* Divides this measure by a ratio in terms of this measurement's unit to another unit, returning
* a measurement in terms of the other unit.