Определение средней линии развала

Товарищи программисты,

Я знаю, что это немного выходит за рамки вашей юрисдикции, но мне интересно, может быть, у вас есть время, не могли бы вы помочь мне с одной «процедурой». Не с точки зрения математики, а как лучше взять.

alt textальтернативный текст

Это аэродинамический профиль/профиль. Обычно профили определяются с двумя наборами данных. Одним из них является положение средней линии изгиба, представленное в виде x, y, где x обычно дается в процентах от длины хорды. Второй набор данных представляет собой толщину в процентах от длины хорды. Толщина всегда рисуется перпендикулярно линии изгиба (!), и это дает точки профиля.

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

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


Редактировать (как это делается на бумаге): Ухх, мучительно и в большом масштабе (я говорю о длинной бумаге формата A0, то есть 1189x5945 мм на большом чертежном столе. Вы начинаете с рисования первого изгиба линия (CL) итерация через средние точки (средние точки) между точками лица и спины с одинаковыми ординатами X. После этого вы рисуете много перпендикулярных линий, перпендикулярных этому CL, и находите их середины между лицом и спиной (эти точки на лицевой и оборотной стороне больше не будут иметь одинаковые значения x). Соедините их, и это будет ваша вторая итерация CL. После этого вы просто повторите второй шаг процедуры, нарисовав перпендикулярные линии на этом 2-м CL ... (обычно он сходится после 3-4 повторений).


2-е редактирование: изображение заменено на изображение, которое лучше показывает, как задумчивость «нарисована» на линии изгиба (CL). Другой способ представить это, как на картинке № 2. Если вы нарисуете много кругов, центральные точки которых находятся на линии изгиба, а радиусы будут величинами толщины, то касательные к этим кругам будут линиями (составляющими кривую) профиля.

Линия изгиба не является средней линией (средней между точками лица и спины); он может с ней совпадать (отсюда обычно и путаница). Эту разницу легко увидеть в более выпуклых профилях (более изогнутых).


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

На этом рисунке показана средняя линия - это линия, образованная средними значениями лица и спины по одним и тем же координатам x.

альтернативный текст

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

альтернативный текст

На рисунке ниже показана вторая итерация линии изгиба вместе со средней линией из первого изображения, чтобы проиллюстрировать разницу между ними. Эти круги теперь еще лучше сидят внутри (кроме того первого, который вылетел, но не обращайте на него внимания).

альтернативный текст


person Rook    schedule 23.09.2010    source источник
comment
Какая крутая проблема. Возможно, вам повезет на math.stackexchange.com.   -  person mtrw    schedule 24.09.2010
comment
Как вы делаете это на бумаге прямо сейчас?   -  person mtrw    schedule 24.09.2010
comment
@Rook: я подозреваю, что единственный способ сделать это - это в основном имитация метода, который вы использовали бы вручную. Хорошо, что большинство шагов довольно просты. Итерация, которая становится утомительной, но это не влияет на компьютер...   -  person Jerry Coffin    schedule 24.09.2010
comment
Вы должны добавить свое описание бумажного метода к основному вопросу. Это определенно то, что можно превратить в программу!   -  person mtrw    schedule 24.09.2010
comment
@Rook: Тогда сделайте то же самое в коде. Хотите верьте, хотите нет, но компьютеры гораздо быстрее выполняют геометрические вычисления, чем люди. Алгоритм, который вы описали, звучит очень эффективно и не сложно.   -  person slacker    schedule 24.09.2010
comment
@mtrw - В таком случае (я знаю, что сказал, что справлюсь с этим сам, но именно с имитацией этого процесса у меня проблемы) не могли бы вы предложить общий алгоритм или какой-то псевдокод, как я мог сделай это?   -  person Rook    schedule 24.09.2010
comment
@slacker, @Jerry Coffin - В таком случае (знаю, я сказал, что справлюсь с этим сам, но именно с имитацией этого процесса у меня проблемы) не могли бы вы предложить общий алгоритм или какой-то псевдо код, как я мог это сделать?   -  person Rook    schedule 24.09.2010
comment
Похоже на какой-то сплайн-алгоритм для меня.   -  person Richard Cook    schedule 24.09.2010
comment
@Richard Cook - да, интерполяция часто представляет собой сплайн, но также используются и все другие виды. Я не уверен, что это то, что вы называете алгоритмом сплайна.   -  person Rook    schedule 24.09.2010
comment
Я тоже не совсем уверен, что имею в виду ;-), но похоже, что естественный кубический сплайн справился бы с задачей. У вас есть три фиксированные точки (начало изгиба, конец изгиба и средняя точка), и естественный кубический сплайн — это самая гладкая кривая, которая проходит через этот фиксированный набор из трех точек. Что касается вычислений, мне придется подумать об этом некоторое время.   -  person Richard Cook    schedule 24.09.2010
comment
@ Ричард Кук - Хм, я думаю, вы неправильно поняли мою проблему. Я не уверен, но ваш последний комментарий оставил у меня такое впечатление. У меня нет линии развала. Все, что у меня есть, это набор точек, которые образуют лицевую и заднюю линии профиля (они не равноудалены и ничего подобного). После этого я интерполирую их (несколько методов) и получаю набор (соответствующее) количество точек (лица и спины). И тогда мне нужно определить! положение линии развала. (Также, пожалуйста, прочтите часть о толщине, перпендикулярной ЦС)   -  person Rook    schedule 24.09.2010


Ответы (4)


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

Другими словами, ваша линия изгиба всегда является средней точкой между двумя краями, но вдоль линии кратчайшего расстояния между верхним и нижним краями.

Итак, учитывая координаты y y=top(x) и y=bot(x), почему бы вам не:

<pseudocode>
for each x:
  find x2 where top(x)-bot(x2) is minimized
  camber( mean(x,x2) ) = mean( top(x),bot(x2) )
</pseudocode>

а затем интерполировать и т. д.?

альтернативный текст

редактировать

Извини! Если подумать, я думаю, что это должно быть

  find x2 where ( (top(x)-bot(x2))^2 + (x-x2)^2 ) is minimised

очевидно, вы должны минимизировать длину этой перпендикулярной линии.

Это правильно?

person Sanjay Manohar    schedule 24.09.2010
comment
90 градусов находятся между биссектрисой и красной линией, верно? - person Rook; 24.09.2010
comment
красная линия делит пополам угол между касательными. красная линия является касательной к развалу и определяется тем фактом, что это один и тот же угол от верхней касательной и нижней касательной вдоль линии, где расстояние сверху и снизу минимально. Дело в том, что два угла, отмеченные красным, одинаковы. - person Sanjay Manohar; 24.09.2010
comment
Как это может быть между красной линией и касательной к развалу? Разве красная линия не является касательной? - person Rook; 24.09.2010
comment
.. но, да, я думаю, что у вас здесь что-то есть ... +1 за усилия, пока я не проверю, что это работает ;-) (кстати, что вы это нарисовали?) - person Rook; 24.09.2010
comment
да, извините, вы правы, красная линия касается развала. - person Sanjay Manohar; 24.09.2010
comment
Хахахахаха :))) - О, я не думаю, что у меня будет более смешная минута, чем та, которая была у меня, когда я читал это, до конца недели :))) - person Rook; 24.09.2010
comment
@Sanjay - вчера я попробовал ваш первый подход, но он не совсем сработал. Сегодня попробую второй. Однако, чтобы устранить путаницу, я проиллюстрировал разницу между средней линией и линией развала на примере. Надеюсь, теперь стало немного понятнее (моё первое объяснение было совершенно запутанным, теперь я это вижу). - person Rook; 24.09.2010
comment
Я хотел нарисовать такую ​​же картину. Вы можете выбрать точку на нижней поверхности, а затем двигаться вдоль верхней поверхности, пока не найдете отрезок, биссектриса которого также делит пополам угол верхней и нижней касательных (как показано здесь). Тогда этот сегмент будет иметь среднюю точку на линии изгиба. - person phkahler; 24.09.2010

Я новичок в переполнении стека, но это проблема, над которой я довольно много работал, и решил опубликовать альтернативный подход к этой проблеме. В этом подходе используется концепция диаграммы Вороного: http://en.wikipedia.org/wiki/Voronoi_diagram По сути, создается карта, которая делит пространство на области, содержащие одну из входных точек (x, y вашего аэродинамического профиля). Важной частью здесь является то, что любая точка в регионе находится ближе всего к входной точке в этом регионе. Узлы, созданные этим разделением пространства, равноудалены по крайней мере от трех входных точек.

Вот интересная часть: для создания круга можно использовать три равноудаленные точки от центральной точки. Как вы упомянули, центральные точки вписанных окружностей используются для рисования средней линии развала, потому что вписанная окружность измеряет толщину.

Мы уже близко. Природа диаграммы Вороного в этом приложении означает, что любой узел Вороного внутри нашей области аэродинамического профиля является центральной точкой одной из этих «кругов толщины». (Это приводит к некоторой проблеме, очень близкой к LE и TE, в зависимости от ваших данных. Я обычно применяю здесь некоторую фильтрацию).

Базовая структура:

Create Voronoi Diagram
Extract Voronoi Nodes
Determine Nodes Which Lie Within Airfoil
Construct Mean Camber Line From Interior Nodes

Большая часть моей работы выполняется в Matlab, в который встроены функции voronoi и inpolygon. Таким образом, я не сильно помогу в разработке этих функций, но они должны быть хорошо задокументированы в другом месте.

Проблемы с задним/передним фронтом

Я уверен, что вы испытали или знаете, что трудно точно измерить толщину, когда она находится близко к LE/TE. Этот подход создаст развилку в узлах, когда окружность толщины меньше радиуса ребра. Проверка данных для этой вилки найдет точки, которые неверны для линии развала. Чтобы построить линию изгиба до края фойла, вы можете экстраполировать линию изгиба (2-й или 3-й порядок должен подойти) и найти пересечение.

person seahuston    schedule 28.12.2012
comment
Я был взволнован, увидев этот новый метод, но немного разочарован, когда я применил вычисления здесь и остался смотреть на очень зигзаг заглаженный МКЛ. Однако результаты были значительно лучше, когда я увеличил плотность точек на своем участке. Просто хотел передать это. Кстати, я работаю с лопатками компрессора и аэродинамическими профилями лопастей, пытаясь надеть профили LE после ковки/обрезки, и эти «проблемы с краями», о которых вы упомянули, должны были свести меня с ума. Спасибо за восстановление моего здравомыслия! - person subnivean; 03.01.2013
comment
Рад, что вы попробовали это и что это сработало достаточно хорошо. Плотность точек является большим ограничением этой проблемы. Если представить, что окружность соответствует точкам сверху или снизу, расстояние между точками создаст дугу этой окружности за пределами профиля. Вы можете вычислить приблизительную ошибку в этом как: (толщина)/2*(1-sqrt(1-(pointSpaceing/толщина)^2))). Моим основным применением для этого является извлечение параметров данных КИМ для проверки сечения аэродинамического профиля турбины. К счастью, мы работаем с оборудованием, которое обеспечивает очень высокую плотность точек, и этот подход хорошо сработал для нас. - person seahuston; 03.01.2013
comment
Кроме того, если вы проводите много времени, работая с лопастями и лопастями (я, конечно, делаю). Вы можете найти эти интересные документы: ссылка.springer.com/article/. Этот платный и в конечном итоге не сработал для моего приложения, но, тем не менее, хорошо читается: ieeexplore.ieee.org/xpl/ Удачи! - person seahuston; 03.01.2013
comment
Я использую его точно для той же цели, также (иногда) для деталей секции турбины низкого давления. Моя плотность точек также может быть очень высокой — обычно я создаю сплайны через точки КИМ, а затем могу передискретизировать их настолько плотно, насколько захочу. Говоря о сплайнах, я подумал, что в качестве последнего «завершающего» прохода я «пройдусь» по сплайну MCL: возьму нормаль, найду (2) пересечения ее со сплайном AF (ccv и cvx) и настрою точку MCL. по нормали для выравнивания расстояний. Один проход должен сделать это, я думаю. Спасибо за ссылки. - person subnivean; 03.01.2013
comment
Интересно, мне будет интересно услышать, как это работает для вас, и попробовать самому. Я все еще нахожусь в стадии разработки, но я очень взволнован потенциалом метода Вороного. Возможно, это не окончательное решение или правильное решение, но оно кажется новым в этой области. Круто найти здесь такого же МЕНЯ, который делает то же самое! Я хотел бы поделиться идеями, которые могут не иметь отношения к этой теме. Если вам интересно, я считаю, что моя электронная почта доступна в моем профиле. - person seahuston; 03.01.2013
comment
Нет, мне не видно. Мне интересно, есть ли ты в моей корпоративной телефонной книге, но пока ничего. Держу пари, что если вы не работаете на крупном аэрокосмическом заводе в Хуксетте, то наверняка знаете о них! - person subnivean; 03.01.2013
comment
Для удобства других читателей, вот пример проблем с плотностью точек, о которых мы говорим: i45.tinypic .com/294rwu9.jpg . - person seahuston; 03.01.2013
comment
давайте продолжим это обсуждение в чате - person seahuston; 03.01.2013

Я думаю, что лучший способ нарисовать линию изгиба аэродинамического профиля — загрузить профиль в CATIA. После этого в CATIA мы можем нарисовать окружности, которые касаются обеих сторон профиля (сторона всасывания и сторона нагнетания). Затем мы можем соединить центры этих окружностей и, следовательно, точно найти линию изгиба.

person user3488128    schedule 02.04.2014

Является ли линия среднего изгиба множеством точек, равноудаленных от верхней и нижней линий? Если это определение, то оно отличается от определения Санджая или, по крайней мере, для меня не совпадает.

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

Но я готов поспорить, что итеративный метод, который вы вставили из комментариев, легче кодировать, и я думаю, он будет сходиться к той же кривой.

person Darius Bacon    schedule 24.09.2010
comment
Привет. Я не совсем уверен, сработает ли это; Надо будет проверить на примере. Тем не менее, я проиллюстрировал разницу между ними (средняя линия и линия развала), чтобы прояснить путаницу. Надеюсь, это поможет с пониманием. - person Rook; 24.09.2010
comment
@Rook, Итак, если вы посмотрите на свои новые черные диаграммы, вы увидите, что касательные к окружности (и к фактическому крылу) делятся пополам центром окружности, как я и думал. Не должно ли это означать, что, используя подобные треугольники, вам на самом деле не нужно отбрасывать какие-либо перпендикуляры, а просто минимизировать расстояние между ребрами? - person Sanjay Manohar; 24.09.2010
comment
@Sanjay - Честно говоря, я больше не уверен. Сначала мне нужно это проверить, но разве это не относится к вашему второму подходу (предложенному в вашем ответе)? - person Rook; 24.09.2010