Room2D.java
package org.hammer.audio.experimental.acoustic.simulation;
import org.hammer.audio.geometry.Vector2;
/** Rectangular 2D virtual room for deterministic localization experiments. */
public record Room2D(
double widthMeters, double heightMeters, double reflectionGain, double noiseAmplitude) {
/** Create room parameters. */
public Room2D {
if (!(widthMeters > 0.0)
|| !(heightMeters > 0.0)
|| !Double.isFinite(widthMeters)
|| !Double.isFinite(heightMeters)) {
throw new IllegalArgumentException("room dimensions must be finite and > 0");
}
if (reflectionGain < 0.0 || reflectionGain > 1.0 || !Double.isFinite(reflectionGain)) {
throw new IllegalArgumentException("reflectionGain must be finite and in [0,1]");
}
if (noiseAmplitude < 0.0 || noiseAmplitude > 1.0 || !Double.isFinite(noiseAmplitude)) {
throw new IllegalArgumentException("noiseAmplitude must be finite and in [0,1]");
}
}
/** Return whether a point is inside the room. */
public boolean contains(Vector2 position) {
return position.x() >= 0.0
&& position.x() <= widthMeters
&& position.y() >= 0.0
&& position.y() <= heightMeters;
}
}