@ 2021-06-10T03:17:59Z <?php
class Stress {
const ABSENT = 0; // Ausente
const SOFT = 1; // Ameno
const MODERATE = 2; // Moderado
const SEVERE = 3; // Severo
const CRITICAL = 4; // Morte/Crítico
const RATING = [
self::ABSENT => 'Ausência de estresse térmico',
self::SOFT => 'Estresse térmico ameno',
self::MODERATE => 'Estresse térmico moderado',
self::SEVERE => 'Estresse térmico severo',
self::CRITICAL => 'Estresse térmico crítico. Ocorrência de morte.',
];
const AMBIGUOUS = [
// Em 25 graus a 100% de UR temos um moderado:
250 => [ 100 => Stress::MODERATE ],
// Já na linha dos 26,1 graus temos 3 ambíguos:
261 => [ 80 => Stress::SOFT, 90 => Stress::MODERATE, 100 => Stress::MODERATE ],
// ...
433 => [ 30 => Stress::SEVERE ],
461 => [ 20 => Stress::MODERATE ],
];
public $temp;// int
public $ur;// int
public function __construct( $temp, $ur ) {
$this->temp = $temp;
$this->ur = $ur;
}
public function __toString() {
$ambiguousRatingIndex = $this->getAmbiguousStressRatingIndex();
if ( $ambiguousRatingIndex !== false )
return sprintf( 'Classificação (por tabela de desambiguação): %s', self::RATING[ $ambiguousRatingIndex ] );
else {
$rating = $this->getGeneralRatingIndex();
return sprintf( 'Classificação geral do estresse térmico por ausência de ambiguidade: %s', self::RATING[ $rating ] );
}
}
// Primeiro passo da lógica. Busca por ambiguidade:
private function getAmbiguousStressRatingIndex() {
$temp = $this->temp;
$ur = $this->ur;
if ( isset( self::AMBIGUOUS[ $temp ] ) && isset( self::AMBIGUOUS[ $temp ][ $ur ] ) )
return self::AMBIGUOUS[ $temp ][ $ur ];// int = índice do rótulo encontrado
return false;// boolean false = não encontrou. Podia ser Exception, mas vamos facilitar o código
}
// Utilizado apenas após confirmada a ausência de ambiguidade
// ITU = (0,8 x TA + (UR/100) x (TA-14,4) + 46,4)
private function getGeneralRatingIndex() {
$temp = $this->temp / 10;// Estávamos trabalhando com valores inteiros para a temperatura. 244 => 24.4
$ur = $this->ur / 100;
$ITU = .8 * $temp + $ur * ( $temp - 14.4 ) + 46.4;
if ( $ITU < 72 ) return Stress::ABSENT;
if ( $ITU < 79 ) return Stress::SOFT;
if ( $ITU < 90 ) return Stress::MODERATE;
if ( $ITU < 98 ) return Stress::SEVERE;
return Stress::CRITICAL;
}
}
echo (string)( new Stress( 250, 100 ) ) . "\n";// 25,0 graus / 100% UR
echo (string)( new Stress( 261, 80 ) ) . "\n";// 26,1 graus / 80% UR
echo (string)( new Stress( 261, 90 ) ) . "\n";// 26,1 graus / 90% UR
echo (string)( new Stress( 461, 20 ) ) . "\n";// 46,1 graus / 20% UR (seu exemplo)
echo (string)( new Stress( 433, 30 ) ) . "\n";// 43,3 graus / 30% UR (seu exemplo)
echo (string)( new Stress( 239, 40 ) ) . "\n";
echo (string)( new Stress( 317, 20 ) ) . "\n";
echo (string)( new Stress( 444, 80 ) ) . "\n";
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Output for git.master , git.master_jit , rfc.property-hooks Classificação (por tabela de desambiguação): Estresse térmico moderado
Classificação (por tabela de desambiguação): Estresse térmico ameno
Classificação (por tabela de desambiguação): Estresse térmico moderado
Classificação (por tabela de desambiguação): Estresse térmico moderado
Classificação (por tabela de desambiguação): Estresse térmico severo
Classificação geral do estresse térmico por ausência de ambiguidade: Ausência de estresse térmico
Classificação geral do estresse térmico por ausência de ambiguidade: Estresse térmico ameno
Classificação geral do estresse térmico por ausência de ambiguidade: Estresse térmico crítico. Ocorrência de morte.
This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.
Active branches Archived branches Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page
preferences:dark mode live preview
59.95 ms | 402 KiB | 8 Q