Вверх ↑
Ответов: 704
Рейтинг: 44
#1: 2013-01-25 00:49:44 ЛС | профиль | цитата
вот еще тема, кто хочет покумекать, и взорвать свои мозги напрочь на досуге
[offtop]Здравствуйте. Проблема вот в чем, мы вводим данный в градусах (направление) и морских милях (дстанция) и узлах (скорость). А в программе эти все данные считаются как радианы, метры и м/с - по системе Си. Подаскажите пожалуйста, как можно прописать код, чтоб перед расчетом сама перевела все параметры в систему Си. Я попробовал дописать, для перевода, но походу не получилось. И не могу найти ошибку в коде, может кто заметит, считает не правильно.[/offtop]
code_30175.txt
Описание сути.
[offtop]Известные значение, которые вводит пользователь (оператор):
Т2 = 3 (но чтоб можно было и самому менять, рекомендуется) – время наблюдения.
Vн – скорость
Кн – курс
М – коэффициент (рекомендуется равен 5, но можно самому менять)
D1 – дистанция
П1 – направление на объект
D2 – дистанция
П2 – направление на объект
E – эпселент = 0,01

1.Определение координат первой точки
X1 = D1*sinП1
Y 1 = D1*cos П1
2.Определение координат второй точки
X2 = D2*sinП2
Н2 = D2*cosП2
3.Определение ∆t
∆t = (T2-T1)/60 = T2/60
4.Составляющая вестора скорости Vн
∆Xvн = Vн*∆t*sinKн
∆Yvн = Vн*∆t*cosKн
5.Точка начала вестора Vн
Xн = X1 - ∆Xvн
Yн = Y1 - ∆Yvн
6.Длина ветора
Vн = корень из ∆Xvн^2 + ∆Yvн^2
7.Составляющая вектора скорости цели Vц
∆Xц = X2-Xн
∆Yц = Y2 – Yн
Vц = корень из ∆Xц^2 + ∆Yц^2
8.Дополнительные параметры
Y2н = ∆Yц
X2н = ∆Xц
∂ = Vн/Vц
9.Координаты точек касания
Xк1 = Xн+(∂^2)*X2н + ∂*√(∂^2)+(X2y^2)+(Y2н^2)-(Vн^2)
Xк2 = Xн+(∂^2)*X2н -∂*√(∂^2)+(X2y^2)+(Y2н^2)-(Vн^2)
10.Вторая координата точек касания
Y11 = Yh + (Y2h/2) + √(Y2h/2)^2 + (Xk1 – Xh)*(X2 – Xk1);
Y12 = Yh + (Y2h/2) - √(Y2h/2)^2 + (Xk1 – Xh)*(X2 – Xk1);
Y21 = Yh + (Y2h/2) + √(Y2h/2)^2 + (Xk2 – Xh)*(X2 – Xk2);
Y22 = Yh + (Y2h/2) - √(Y2h/2)^2 + (Xk2 – Xh)*(X2 – Xk2);
11.Проверка полученного значения путем выполнения условия
(Xk1; Y11), (Xk1; Y12), (Xk2; Y21), (Xk2; Y22) – по условие отбрасываем значения. Оставляем только подходящие по условию.
│((Y11 – Yh)^2) + ((Xk1 – Xh)^2) – (Vh^2)│≤ E;
│((Y12 – Yh)^2) + ((Xk1 – Xh)^2) – (Vh^2)│≤ E;
│((Y21 – Yh)^2) + ((Xk2 – Xh)^2) – (Vh^2)│≤ E;
│((Y22 – Yh)^2) + ((Xk2 – Xh)^2) – (Vh^2)│≤ E;
12.Вычисление К
∆Ykh1 = Yk1 – Yh;
∆Xkh1 = Xk1 – Xh;
Kh1 = -arctg (∆Ykh1/∆Xkh1) +
+90 если ∆Xkh1≥0. +270 если ∆Xkh1<0;

∆Ykh2 = Yk2 – Yh;
∆Xkh2 = Xk2 – Xh;
Kh1 = -arctg (∆Ykh2/∆Xkh2) +
+90 если ∆Xkh1≥0. +270 если ∆Xkh1<0;


13.Вычисляем координаты упреждающей точки
Xym = X2 + (M*(X2-X1));
Ннь = Y2 + (M*(Y2 – Y1));
14.Вычисляем дистанцию
Dn1 = (-1/Vh) * (Yym * (Yk1 – Yh) + Xym * (Xk1-Xh));
Dn2 = (-1/Vh) * (Yym * (Yk2 – Yh) + Xym * (Xk2-Xh));
Если Dn1>Dn2, то выбираем Dn1. Если Dn2>Dn1, то выбираем Dn2.

15.В зависимости от выбранного D выбираем К.
Если Dn1, то K1. Если Dn2 то К2.
16.Вывод на экран полученное знаение Dn и К.


Данный по которым пытаюсь проверить:
T2 = 3 (минуты); Vh = 12(узлы); Kh = 50(градусы), П1 = 80,9(градусы); D1 = 9,5(морские мили); П2 = 80; D2 = 6,8. Ответы должны получится: Dn1 = 1,5 K1 = 329; Dn2 = 3,7 K2 = 232.
Спасибо большое))
[/offtop]
http://www.cyberforum.ru/windows-forms/thread770878.html
Походу конкретно людей клинит
карма: 0

0
файлы: 1code_30175.txt [9.9KB] [214]