Скачайте архив, который содержит следующие файлы:
sailing.exe 11776 - исполняемый файл,
SmallBasicLibrary 265471 - библитека из дистрибутива SmallBasic,
sailing.sb 11908 - исходный текст,
polar.exe 7680 - программа для вывода поляр в графическом виде,
polar.sb 4282 - ее исходный текст,
sail.txt - данные поляры паруса,
sail.tx1 - исходные данные поляры паруса (см. ниже),
board.txt - данные поляры шверта,
corp_r.txt - данные буксировочного сопротивления
data.txt - исходные данные для расчета.
Для запуска программы все файлы (кроме исходного текста) должны находиться в одной папке; для работы с исходным текстом установите Microsoft SmallBasic. Все это - только для Windows. Результаты выводятся на экран и в файл output.txt; если его не удалять и не переносить, при следующих запусках новые результаты добавляются в конец.
Cостав выходных данных:
Свободная CC. Короче, флаг в руки. Может, найдется человек сведущий в парусных делах и в программировании, и сделает что-то более полезное и удобное. Хотел было сделать на сайте "калькулятор поляры", но с Java Script не справился.
С данными из архива расчет сходится, но шаг вправо-влево... и никаких гарантий. Это же демонстрационная программа, в конце концов. Но надежда есть: раз лодка способна двигаться при некотором ветре под некоторым углом к нему с определенной скоростью, почему бы и расчету не сойтись?
Вопрос в том, насколько адекватно описывают судно данные, которые будут загружены, и в какой степени мешают отражению реальности разные упрощения, а то и не пойманные алгоритмические ошибки.
Конечно, эксперименты с точностью до тенденций возможны, иначе было бы неинтересно.
Все данные заносятся в текстовые файлы и считываются из них при запуске. Поскольку файлы читаются построчно, нельзя менять количество и положение строк. Можно менять только числа, при этом десятичный разделитель - только точка.
Каждая тройка строк содержит:
- угол атаки паруса в градусах,
- коэфф. лобового сопротивления Сх,
- коэфф. подъемной силы Сy.
Данные сняты с рисунка, приведенного в книге Ч.Мархая (стр. 100) для паруса с удлинением 5 и пузом 10%..
Необходимо отметить, что получаемые результаты сильно зависят от "разумности" оцифровки поляры паруса. Для приведенной поляры были сделаны два файла. В файле sail.tx1 записаны данные для точек, указанных на графике. Поскольку интерполяция между ними линейная, область максимума около 15° для расчета превращается в острый пик, а на получаемой поляре яхты имеются заметные изломы, по-видимому являющиеся артефактом такой оцифровки и расчета.
Для файла sail.txt были убраны данные для углов 60 и 80°, где график близок к линейному, да и область таких углов атаки вблизи фордевинда не слишком интересна. Вместо этого добавлены точки 14 и 16° в области максимума и резкого перегиба.
Общее число точек должно быть неизменным - 12, но расположить их можно при любых углах атаки. Там, где интервал между точками всего 1°, интерполяция поделит его на те же 5 частей, и интервал для расчета будет 0,2°.
Для этого файла поляра получается более гладкой, а скорости в области максимума тяги заметно больше.
Каждая тройка строк содержит:
- угол атаки шверта в градусах,
- коэфф. сопротивления Сх,
- коэфф. боковой силы Сy.
Данные сняты с показанной справа картинки, взятой с Barque.ru. Здесь самая благополучная ситуация, так как данные по профилям и пластинам можно найти и они наиболее надежны.
Если расчетный угол дрейфа (он же - угол атаки шверта) превысит максимальный из известных, расчет на этом останавливается и на экран выводится сообщение "Дрейф слишком велик". Данные расчета сохраняются в выходных файлах как обычно.
Пары строк содержат:
- скорость в м/с,
- силу в кГ.
Используйте любые данные, какие сможете получить.
В расчете применяется интерполяция, зависимость сопротивления от скорости между соседними точками считается квадратичной.
Тут все понятно:
Данные для расчета. Не меняйте положение строк, данные считываются по их номерам.
Площадь паруса, кв.м 10 Эквив. доп. парусность (корпус и пр.) в пересчете на Сх=1, кв.м 1 Скорость истинного ветра, м/с 7 Площадь шверта, кв.м 0.3 |
Примечание одно: "эквив. доп. парусность", она же паразитная - все что обдувает ветер, кроме создающего тягу паруса. Понятно, что борта, надстройка, рангоут и люди на палубе имеют разные аэродинамические коэффициенты сопротивления, да еще и зависящие от угла атаки, но считаем все вместе как стоящую поперек ветра стенку с Сх=1,0. Оцените на выпуклый морской глаз, насколько все хозяйство обтекается лучше стенки, и соответственно уменьшите площадь: например, при Cx=0.5 вместо 2 кв.м укажите 1.
Можно учесть и разницу в скоростях ветра на разных высотах, что, наверное, существенно, ведь зависимость аэродинамических сил от скорости ветра квадратичная.
Если одной фразой - методом последовательных приближений.
С помощью приведенных в книге Дж.Норвуда (гл. 1) соотношений определяются угол и скорость вымпельного ветра. Теперь можно рассчитать силу тяги, которую развивает парус, а по буксировочной кривой посмотреть, какая скорость лодки соответствует этой тяге. Поскольку начальная скорость берется с потолка (как доля скорости ветра), они будут различаться.
Изменим начальную скорость так, чтобы она была ближе к расчетной, и будем повторять цикл расчета до тех пор, пока силы тяги и сопротивления не окажутся близки.
Программа повторяет расчет скорости для ряда приведенных в данных о поляре углов атаки и останавливается на таком, при котором скорость лодки максимальна.
Касающийся дрейфа цикл расчетов входит в цикл определения скорости лодки. Сила дрейфа известна, она определена вместе с силой тяги. Для текущей скорости находим угол атаки шверта (он же угол дрейфа), при котором силы бокового сопротивления шверта и корпуса уравновешивают силу дрейфа.
Учитывается вклад сопротивления шверта в буксировочное сопротивление для расчета скорости по курсу, а также увеличение угла истинного ветра на угол дрейфа лодки.
Вот, собственно, и все. Все детали см. в исходном тексте; при желании можно выводить различные промежуточные данные, оставлены (закомментированы) несколько таких команд, использованных при отладке.