Преобразователь уровня радиации - PullRequest
2 голосов
/ 06 мая 2011

Я работаю над чем-то, я хочу иметь такой конвертер, как этот веб-сайт: Излучение - Доза, эквивалентная - Коэффициенты преобразования Зиверта К сожалению, у этого конвертера нет источника, и я 'м в этом нуждается.

Может ли кто-нибудь указать мне правильное направление или предоставить исходный код этого преобразователя единиц излучения.

Я готов дать 350 бонусных баллов за правильный и совершенный источник, как только я найдуправильный ответ (по прошествии нескольких дней, который позволяет мне назначать вознаграждение).

Спасибо.

РЕДАКТИРОВАТЬ:

С тех порщедрость была начата.Мне нужно, чтобы этот скрипт был написан на PHP, что позволит конвертировать введенные значения в другую единицу излучения путем выбора.

Ответы [ 2 ]

4 голосов
/ 10 мая 2011

Самый простой способ управления преобразованиями между несколькими форматами, подобный этому, состоит в том, чтобы просто поддерживать таблицу преобразований для одного типа и выполнить преобразование из двух частей, чтобы получить желаемый формат. Это приводит к некоторой потере точности, но вам действительно нужно иметь достаточно точности для нужд чего-то подобного (вы всегда можете повысить точность, добавив еще несколько цифр к рентгеновскому типу).

Есть много способов сделать это, но я создал класс RadiationConverter, чтобы держать все в порядке, и я сделал небольшую цепочку, чтобы сохранить ее в чистоте. Вы поняли, хотя.

<?php

class RadiationConverter {

 // these are the keys we'll reference when sending a type to the methods, 
 // along with a value for what we'll display each type as:
 private $conversion_display = array ( 
     'sievert' => 'sievert',
     'millisievert' =>  'millisievert',
     'microsievert' => 'microsievert',
     'j/kg'=> 'joule/kilogram', 
     'm2/s2' => 'square meter/square second',   
     'rem' => 'Roentgen eq. man',   
     'millirem' => 'millirem',  
     'imillicurie' => 'intensity millicurie',   
     'electrons'=> 'gray (Wr=1, X-ray, gamma ray, electrons)',  
     'alpha' => 'gray (Wr=20, alpha particles)',
     'roentgen'=> 'Roentgen/hour (numerical equivalent)');

 // this is a conversion table for sieverts to anything else
 // (note the conversion factor of 1 for sievert)
 private $conversion_table = array (
    'sievert'   =>  1,
    'millisievert'  =>  0.001,
    'microsievert'  =>  0.000001,
    'j/kg'  =>  1,  
    'm2/s2' =>  1,  
    'rem'   =>  0.01,   
    'millirem'  =>  0.00001,    
    'imillicurie'   =>  1,  
    'electrons' =>  1,  
    'alpha' =>  20,
    'roentgen'  =>  0.119331742243,
);

 private $type;
 private $amount;
 private $base_type; // this is what our conversion table is based on

 public function __construct($from_type='sievert', $amount = 0) {

   $from_type = strtolower($from_type);
   if(!array_key_exists($from_type,$this->conversion_display)) {
      throw new Exception ("Radiation type does not exist.");
   }
   $this->type = $from_type;
   $this->amount = $amount;
   $this->base_type = 'sievert'; // for reference only, really

 }

 public function amount($amount=null) {
  if(empty($amount)) return $this->amount;
  $this->amount = $amount;
  return $this;
 }

 public function types() {
    return $this->conversion_display;
 }

 public function display_name($type=null) {
    if (empty($type)) $type=$this->type;
    return $this->conversion_display[$type];
 }

 public function display_as($type){
   return $this->convert_to($type) . ' '.$this->display_name($type);
 }

 public function convert_to($type) {
  $type = strtolower($type);
  if(!array_key_exists($type,$this->conversion_display)) {
      throw new Exception ("Radiation conversion type does not exist.");
  }
  // first we convert to our base type, then convert that to the new type:
  return ($this->amount*$this->conversion_table[$this->type])/$this->conversion_table[$type];
 }

 public function base_type(){
    return $this->base_type;
 }


}

Теперь все, что вам нужно, это пара <select> списков со значениями опций, представляющих различные типы для преобразования из / в, а затем поле <input> для суммы. Вы можете использовать это так:

$converter = new RadiationConverter($_POST['convert_from']); 

// return just the number
echo $converter->amount($_POST['amount'])->convert_to($_POST['convert_to']);

// or return the number with the new type
echo $converter->amount($_POST['amount'])->display_as($_POST['convert_to']);

// you can include the amount in the construct if you want like this:
$converter = new RadiationConverter('rem', 100);
echo $converter->display_as('electrons');

Если вы хотите создать таблицу как на этом сайте:

$display_amount = $_POST['amount'] . " " . $converter->display_name();

// just take the convert_from variable and cycle through all the types:
foreach($converter->types() as $type => $display) {
  echo  "$display_amount = " . $converter->display_as($type) . "<br />";
}
0 голосов
/ 06 мая 2011

Похоже, это в основном JavaScript. Вы можете просмотреть исходный код на странице и увидеть код, который они использовали, и интерпретировать его для вашего сайта.

...