Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая РГЧ [Ринат].doc
Скачиваний:
3
Добавлен:
20.11.2019
Размер:
3.35 Mб
Скачать

Библиографический список

  1. Николаев Ю.М., Соломонов Ю.С. – Инженерное проектирование управляемых баллистических ракет с РДТТ. М.: Воениздат. 1979, –240с.

  2. Черноглазов Г.С., Пенкин А.О. – Расчет запасов топлива для РГЧ. Учебное пособие – Челябинск: Изд. ЮУрГУ, 2004, – 23с.

  3. Усолкин Ю.Ю. – Проектирование головных частей баллистических ракет: Учебное пособие. – Челябинск: Изд. ЮУрГУ, 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>";

?>