2012-05-04 2 views
0

Мне нужно создать равностороннюю треугольную сетку, которая соответствует заданной геометрии.Создание равносторонней треугольной сетки по геометрии

У меня есть изображение, содержащее геометрию, оно может содержать отверстия или тонкие дорожки. и мне нужно создать сетку, подобную этой фотографии:

http://neutrinodata.s3.amazonaws.com/theage-education/cmsimages/web/b3c5925e-34de-11e0-99f6-005056b06a0e-4535326.jpg

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

+3

Это похоже домашнее задание. Если это так, он должен быть помечен как таковой. – CAbbott

+0

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

ответ

3

Вы можете думать о треугольной сетке как косая прямоугольная сетка

enter image description here

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

const double Sin30 = 0.5; 
static readonly double Cos30 = Math.Cos(30*Math.PI/180); 

for (int xLogical = 0; xLogical < NX; xLogical++) { 
    for (int yLogical = 0; yLogical < NY; yLogical++) { 
     double xGeo = GridDistance * xLogical * Cos30; 
     double yGeo = GridDistance * (yLogical + xLogical * Sin30); 
     ... 
    } 
} 
0

Я предполагаю, что это для создания инструмента для 2D-сетки. Если это так, и это домашнее задание, я предлагаю сделать это самостоятельно, так как вы получите много. Если это не проблема с сеткой, то я должен буду сказать, что вам необходимо помочь ...

Для этого используйте центры узлов сетки, чтобы сгенерировать ваши эквиваляторы. Если у вас нет центральных точек для начала, вам нужно сначала выбрать ориентацию для своего объекта, а затем создать эти (прямоугольные) узлы сетки (вам нужно будет разработать способ проверки, действительно ли эти точки лежат внутри границ вашего объекта). Затем вы можете построить свои равносторонние треугольники, используя эти точки. Заметка. Вам снова придется иметь дело с обнаружением края, чтобы получить половину достойной точности.

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

Отметьте этот link двумерному tet-mesh-генератору с использованием AMA. В статье этот код основан на это:

  1. V. Dolejsi: Anisotropic mesh adaptation for finite volume and finite element methods on triangular meshes Computing and Visualisation in Science, 1:165-178, 1998.
Смежные вопросы