여기에서 시뮬레이션을 실행 중입니다.첫 번째 물리적 단위 SY 보석을 설치합니다
gem install sy
을 그리고,이 하나는 통제 된 환경 시뮬레이션 주위에 갈 수있는 방법은 다음과 같습니다,
require 'sy' # physical units
module ControlledEnvironment
class Air
SPECIFIC_HEAT_CAPACITY = 1.005.kJ.kg(-1).K(-1)
attr_accessor :volume, :temperature, :humidity, :pressure, :gas_composition
# to simplify things, let's forget about humidity, gas compositions...
def initialize(volume: 500.m(3),
temperature: SY::TRIPLE_POINT_OF_WATER + 20.K,
pressure: 101.3.kPa)
@volume, @temperature, @pressure = volume, temperature, pressure
end
def density
density_of_air_at_0_celsius = 1.205.kg.m(-3)
atmospheric_pressure = 101.3.kPa
density_of_air_at_0_celsius *
SY::TRIPLE_POINT_OF_WATER/temperature *
pressure/atmospheric_pressure
end
def heat!(energy)
@temperature += energy/(SPECIFIC_HEAT_CAPACITY * volume * density)
end
def cool!(energy); heat -energy end
end
class ThermalExchanger
attr_accessor :power_output
attr_reader :target
def initialize(power_output, target)
@power_output = power_output
@target = target
end
def act(delta_time, pow=power_output)
target.heat! pow * delta_time
end
end
class Heater < ThermalExchanger
def heat!(delta_time)
act delta_time
end
end
class Cooler < ThermalExchanger
def cool!(delta_time)
act(delta_time, -power_output)
end
end
end
이 통제 된 환경 믹스 인을 설정 한 다음의 사용 하원 클래스를 만들어 보자 그것.
class House
include ControlledEnvironment # including a mixin
# a house has air, one heater, and one cooler
attr_reader :heater, :cooler, :air
def initialize(heater_power: 1.kW, cooler_power: 1.kW,
air_volume: 500.m(3))
@air = Air.new volume: air_volume
@heater = Heater.new(heater_power, @air)
@cooler = Cooler.new(cooler_power, @air)
end
# its temperature is defined as air temperature
def temperature
"#{(air.temperature - SY::TRIPLE_POINT_OF_WATER).to_f} centigrade"
end
# and, given current heating/cooling power settings, we can step forward in time
def step(delta_time=1.min)
heater.heat! delta_time
cooler.cool! delta_time
puts "After #{delta_time.in(:min)} minutes, the temperature is #{temperature}"
end
end
이제 우리는 재생할 수 있습니다 :
house = House.new heater_power: 1.5.kW, cooler_power: 1.kW, air_volume: 1500.m(3)
house.temperature
#=> "20.0 centigrade"
house.step 1.h
#=> After 60 minutes, the temperature is 21.040302385090797 centigrade
house.step 1.h
#=> After 60 minutes, the temperature is 22.08429649473362 centigrade
house.heater.power_output = 0.kW # turn off the heater, for instance
#=> #<±Magnitude: 0.W >
house.step 30.min
#=> After 30 minutes, the temperature is 21.013285968306377 centigrade
100.times do house.step end
을 당신이 올바른 궤도에, 당신은 이런 식으로 부를 것이다 : 하우스 1 = House.new (75, 거짓, TRUE); house1.update_temperature! update_temperature에서 puts를 사용하는 것을 피 하겠지만 실제로는 액션을 수행해야합니다. – vgoff
사람들이 당신을 하향 투표하고 있지만, 당신의 질문은 전혀 바보가 아닙니다. 내가 제공 한 대답에는 자동 온도 조절 장치가 포함되어 있지 않습니다. 내 코드를 이해하고 직접 써모 스탯 수업을 작성하십시오. 발생할 수있는 문제와 의문점은 루비스트로서 성장하는 데 도움이 될 것입니다. 포스가 함께하길. –
이 게시물을 잠그고 있으므로 지금 편집하지 않습니다. 잠금이 해제 된 후에도이 방법으로 다시 편집하지 않을 것입니다. 감사! –