Логика симуляции комнаты

This commit is contained in:
2025-02-10 20:09:04 +03:00
parent db840afffa
commit 289935499b

View File

@@ -1,14 +1,48 @@
package ru.spbstu.telematics.java;
import java.util.Random;
/*
* Симулирует физические процессы, протекающие в команте.
*/
public class Room implements Runnable {
private double temperature;
private double humidity;
// Температура измеряется в градусах цельсия
private volatile double temperature = 24.0;
public double getTemperature() {
return temperature;
}
// Относительная влажность в процентах
private volatile double humidity = 0.5;
public double getHumidity() {
return humidity;
}
// Параметры произвольного изменения температуры и влажности в комнате
private Random random = new Random();
private double temperatureMaxStep = 1;
private double humidityMaxStep = 0.05;
private long maxStepTimeMs = 3000;
@Override
public void run() {
// Пусть температура и влажность произвольно изменяются со временем
while (!Thread.interrupted()) {
temperature += (random.nextDouble() - 0.5) * 2 * temperatureMaxStep;
humidity += (random.nextDouble() - 0.5) * 2 * humidityMaxStep;
try {
Thread.sleep(getStepTime());
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
private long getStepTime() {
// Спим от 0.5 * maxStepTimeMs до maxSteTimeMs миллисекунд
return (long) (random.nextDouble() * 0.5 + 0.5) * maxStepTimeMs;
}
}