Библиографический список
Николаев Ю.М., Соломонов Ю.С. – Инженерное проектирование управляемых баллистических ракет с РДТТ. М.: Воениздат. 1979, –240с.
Черноглазов Г.С., Пенкин А.О. – Расчет запасов топлива для РГЧ. Учебное пособие – Челябинск: Изд. ЮУрГУ, 2004, – 23с.
Усолкин Ю.Ю. – Проектирование головных частей баллистических ракет: Учебное пособие. – Челябинск: Изд. ЮУрГУ, 2005. – 41 с.
Приложение 1
Исходный код программы для определения оптимальной последовательности обхода целей. Язык программирования – PHP.
<?php
set_time_limit(2000);
//Генерирование всех возможных перестановок для 8 целей -------------
//Всего возможно 8! = 40320 перестановок
$n=8; //число целей
for ($i = 0; $i < $n; $i++) {
$per[$i] = $i+1;
}
$col=0;
while (1) {
$col = $col+1;
$obhod[$col] = null;
for ($k = 0; $k < $n; $k++) {
$obhod[$col] .= $per[$k];
}
$flag = false;
for ($i = $n - 2; $i >= 0; $i--) {
if ($per[$i] < $per[$i + 1]) {
$flag = true;
break;
}
}
if ($flag == false) {
break;
}
$raz = $per[$i+1];
for ($j = $i+1; $j < $n; $j++) {
if ((($per[$j] - $per[$i]) < $raz) && ($per[$i] < $per[$j])) {
$min = $j;
}
}
$tmp = $per[$i];
$per[$i] = $per[$min];
$per[$min] = $tmp;
for ($j = $i + 1; $j < $n; $j++) {
$obr[$j] = $per[$j];
}
$j = $i + 1;
for ($k = $n-1; $k >= $i+1; $k--) {
$per[$j] = $obr[$k];
$j++;
}
}
//-------------------------------------------------------------------
//Координаты целей, км ----------------------------------------------
//Вашингтон
$target[1]['x'] = -126.1702;
$target[1]['y'] = -108.7943;
//Нью-Йорк
$target[2]['x'] = 127.280;
$target[2]['y'] = 96.4421;
//Йорк
$target[3]['x'] = -100.3980;
$target[3]['y'] = 0;
//Филадельфия
$target[4]['x'] = 27.2838;
$target[4]['y'] = 5.9465;
//Балтимор
$target[5]['x'] = -94.8712;
$target[5]['y'] = -70.8830;
//Ланкастер
$target[6]['x'] = -61.4231;
$target[6]['y'] = 9.50;
//Атлантик-Сити
$target[7]['x'] = 94.5584;
$target[7]['y'] = -64.3277;
//Рединг
$target[8]['x'] = -35.2070;
$target[8]['y'] = 42.5953;
//-------------------------------------------------------------------
$sumDeltaSQRT = array();
$L_str = 8500; // Дальность стрельбы, км
$R_zp = 180; // Радиус зоны поражния, км
$dL = 4.37;
$dZ = 1.0;
$pi = 3.14159265358979;
$step_alfa = 0.017453292; //Шаг приращения угла, рад
for ($alfa = 0, $s=0; $alfa <= 2*$pi; $alfa += $step_alfa, $s++) {
echo "Расчет для alfa = $alfa начат...";
$sumDeltaSQRT[$s]['sqrt'] = null;
$sumDeltaSQRT[$s]['minZ'] = null;
$sumDeltaSQRT[$s]['alfa'] = $alfa;
foreach($obhod as $obhodsimple) {
//Угол поворота новой СК
$betta = atan( ($L_str*sin($alfa) - $target[$obhodsimple[0]]['y'] )
/ ($L_str*cos($alfa) - $target[$obhodsimple[0]]['x']) );
//Координаты целей в новой СК -------------------------------
for($w = 1; $w < 9; $w++) {
$newcoordinate[$w]['x'] = ($target[$w]['x'] - $target[$obhodsimple[0]]['x']) *
cos($betta + $pi/2) + ($target[$w]['y'] - $target[$obhodsimple[0]]['y']) *
sin($betta + $pi/2);
$newcoordinate[$w]['y'] = -1*($target[$w]['x'] - $target[$obhodsimple[0]]['x']) *
sin($betta + $pi/2) + ($target[$w]['y'] - $target[$obhodsimple[0]]['y']) *
cos($betta + $pi/2);
}
//-----------------------------------------------------------
//Отклонения по L и Z следующей точки относительно предыдущей ---------
$delta12['L'] = abs($newcoordinate[$obhodsimple[1]]['y'] -
$newcoordinate[$obhodsimple[0]]['y']);
$delta12['Z'] = abs($newcoordinate[$obhodsimple[1]]['x'] -
$newcoordinate[$obhodsimple[0]]['x']);
$delta23['L'] = abs($newcoordinate[$obhodsimple[2]]['y'] -
$newcoordinate[$obhodsimple[1]]['y']);
$delta23['Z'] = abs($newcoordinate[$obhodsimple[2]]['x'] -
$newcoordinate[$obhodsimple[1]]['x']);
$delta34['L'] = abs($newcoordinate[$obhodsimple[3]]['y'] -
$newcoordinate[$obhodsimple[2]]['y']);
$delta34['Z'] = abs($newcoordinate[$obhodsimple[3]]['x'] -
$newcoordinate[$obhodsimple[2]]['x']);
$delta45['L'] = abs($newcoordinate[$obhodsimple[4]]['y'] -
$newcoordinate[$obhodsimple[3]]['y']);
$delta45['Z'] = abs($newcoordinate[$obhodsimple[4]]['x'] -
$newcoordinate[$obhodsimple[3]]['x']);
$delta56['L'] = abs($newcoordinate[$obhodsimple[5]]['y'] -
$newcoordinate[$obhodsimple[4]]['y']);
$delta56['Z'] = abs($newcoordinate[$obhodsimple[5]]['x'] -
$newcoordinate[$obhodsimple[4]]['x']);
$delta67['L'] = abs($newcoordinate[$obhodsimple[6]]['y'] -
$newcoordinate[$obhodsimple[5]]['y']);
$delta67['Z'] = abs($newcoordinate[$obhodsimple[6]]['x'] -
$newcoordinate[$obhodsimple[5]]['x']);
$delta78['L'] = abs($newcoordinate[$obhodsimple[7]]['y'] -
$newcoordinate[$obhodsimple[6]]['y']);
$delta78['Z'] = abs($newcoordinate[$obhodsimple[7]]['x'] -
$newcoordinate[$obhodsimple[6]]['x']);
//---------------------------------------------------------------------
//Сумма отклонений по L и Z с учетом dL и dZ ---------------
$deltaSQRT = sqrt(pow($delta12['L']/$dL ,2) + pow($delta12['Z']/$dZ ,2)) +
sqrt(pow($delta23['L']/$dL ,2) + pow($delta23['Z']/$dZ ,2)) +
sqrt(pow($delta34['L']/$dL ,2) + pow($delta34['Z']/$dZ ,2)) +
sqrt(pow($delta45['L']/$dL ,2) + pow($delta45['Z']/$dZ ,2)) +
sqrt(pow($delta56['L']/$dL ,2) + pow($delta56['Z']/$dZ ,2)) +
sqrt(pow($delta67['L']/$dL ,2) + pow($delta67['Z']/$dZ ,2)) +
sqrt(pow($delta78['L']/$dL ,2) + pow($delta78['Z']/$dZ ,2));
if ($sumDeltaSQRT[$s]['sqrt']) {
if($deltaSQRT < $sumDeltaSQRT[$s]['sqrt']) {
$sumDeltaSQRT[$s]['sqrt'] = $deltaSQRT;
$sumDeltaSQRT[$s]['obhod'] = $obhodsimple;
$sumDeltaSQRT[$s]['SQRTdeltaZ'] = round($delta12['Z'],1) ."/ ".
round($delta23['Z'],1) ."/ ".
round($delta34['Z'],1) ."/ ".
round($delta45['Z'],1) ."/ ".
round($delta56['Z'],1) ."/ ".
round($delta67['Z'],1) ."/ ".
round($delta78['Z'],1);
$sumDeltaSQRT[$s]['SQRTdeltaL'] = round($delta12['L'],1) ."/ ".
round($delta23['L'],1) ."/ ".
round($delta34['L'],1) ."/ ".
round($delta45['L'],1) ."/ ".
round($delta56['L'],1) ."/ ".
round($delta67['L'],1) ."/ ".
round($delta78['L'],1);
}
}
else {
$sumDeltaSQRT[$s]['sqrt'] = $deltaSQRT;
$sumDeltaSQRT[$s]['obhod'] = $obhodsimple;
$sumDeltaSQRT[$s]['SQRTdeltaZ'] = round($delta12['Z'],1) ."/ ".
round($delta23['Z'],1) ."/ ".
round($delta34['Z'],1) ."/ ".
round($delta45['Z'],1) ."/ ".
round($delta56['Z'],1) ."/ ".
round($delta67['Z'],1) ."/ ".
round($delta78['Z'],1);
$sumDeltaSQRT[$s]['SQRTdeltaL'] = round($delta12['L'],1) ."/ ".
round($delta23['L'],1) ."/ ".
round($delta34['L'],1) ."/ ".
round($delta45['L'],1) ."/ ".
round($delta56['L'],1) ."/ ".
round($delta67['L'],1) ."/ ".
round($delta78['L'],1);
}
//-----------------------------------------------------------
//Сумма отклонений по Z ------------------------------------
$deltaZ = $delta12['Z'] + $delta23['Z'] + $delta34['Z'] +
$delta45['Z'] + $delta56['Z'] + $delta67['Z'] + $delta78['Z'];
if ($sumDeltaSQRT[$s]['minZ']) {
if($deltaZ < $sumDeltaSQRT[$s]['minZ']) {
$sumDeltaSQRT[$s]['minZ'] = $deltaZ;
$sumDeltaSQRT[$s]['obhodZ'] = $obhodsimple;
$sumDeltaSQRT[$s]['minZdeltaZ'] = round($delta12['Z'],1) ."/ ".
round($delta23['Z'],1) ."/ ".
round($delta34['Z'],1) ."/ ".
round($delta45['Z'],1) ."/ ".
round($delta56['Z'],1) ."/ ".
round($delta67['Z'],1) ."/ ".
round($delta78['Z'],1);
$sumDeltaSQRT[$s]['minZdeltaL'] = round($delta12['L'],1) ."/ ".
round($delta23['L'],1) ."/ ".
round($delta34['L'],1) ."/ ".
round($delta45['L'],1) ."/ ".
round($delta56['L'],1) ."/ ".
round($delta67['L'],1) ."/ ".
round($delta78['L'],1);
}
}
else {
$sumDeltaSQRT[$s]['minZ'] = $deltaZ;
$sumDeltaSQRT[$s]['obhodZ'] = $obhodsimple;
$sumDeltaSQRT[$s]['minZdeltaZ'] = round($delta12['Z'],1) ."/ ".
round($delta23['Z'],1) ."/ ".
round($delta34['Z'],1) ."/ ".
round($delta45['Z'],1) ."/ ".
round($delta56['Z'],1) ."/ ".
round($delta67['Z'],1) ."/ ".
round($delta78['Z'],1);
$sumDeltaSQRT[$s]['minZdeltaL'] = round($delta12['L'],1) ."/ ".
round($delta23['L'],1) ."/ ".
round($delta34['L'],1) ."/ ".
round($delta45['L'],1) ."/ ".
round($delta56['L'],1) ."/ ".
round($delta67['L'],1) ."/ ".
round($delta78['L'],1);
}
//-----------------------------------------------------------
}
echo "Расчет окончен...<br />";
}
//Вывод результатов расчета -----------------------------------------
echo "<table rules=\"all\" cellpadding=\"2\">";
echo "<tr>
<th>Угол</th>
<th>Обход (LZ способ)</th>
<th>Мин. откл. по L и Z</th>
<th>Отклонения по Z и L (LZ способ)</th>
<th>Обход (Z способ)</th>
<th>Мин. откл. Z</th>
<th>Отклонения по Z и L (Z способ)</th>
</tr>";
foreach ($sumDeltaSQRT as $sumDeltaSQRTsimple) {
$tableAlfa = round(rad2deg($sumDeltaSQRTsimple['alfa']));
$tableSQRT = round($sumDeltaSQRTsimple['sqrt'], 2);
$tableObhodSQRT = $sumDeltaSQRTsimple['obhod'];
$tableMinZ = round($sumDeltaSQRTsimple['minZ'], 2);
$tableObhodZ = $sumDeltaSQRTsimple['obhodZ'];
echo "<tr>
<td>{$tableAlfa}</td>
<td>{$tableObhodSQRT}</td>
<td>{$tableSQRT}</td>
<td><b>L:</b> {$sumDeltaSQRTsimple['SQRTdeltaL']} <br />
<b>Z:</b> {$sumDeltaSQRTsimple['SQRTdeltaZ']}</td>
<td>{$tableObhodZ}</td>
<td>{$tableMinZ}</td>
<td><b>L:</b> {$sumDeltaSQRTsimple['minZdeltaL']} <br />
<b>Z:</b> {$sumDeltaSQRTsimple['minZdeltaZ']}</td>
</tr> <br />";
}
echo "</table>";
?>