Алгоритм марширующего квадрата и вогнутые линииC#

Место общения программистов C#
Ответить
Anonymous
 Алгоритм марширующего квадрата и вогнутые линии

Сообщение Anonymous »

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

Код: Выделить всё

Vector2 GetLerpedEdgePoint(CellPoint cellPoint, Vector2 gridPos)
{
int corner1Index = cellPoint.AdditionalPos.Corner1Offset;
int corner2Index = cellPoint.AdditionalPos.Corner2Offset;
//get oceanVertData of corner to use the "DistanceToZero" value
OceanVertData Corner1VertData = _corners[corner1Index];
OceanVertData Corner2VertData = _corners[corner2Index];
//lerp between these positions to get the edge point
Vector2 corner1Pos = _gridPosOffsets[corner1Index] + gridPos;
Vector2 corner2Pos = _gridPosOffsets[corner2Index] + gridPos;
//ocean level is interpreted as 0,
//but for the interpolation formula to work, I need to interpret it as 1,
//so I just add one to a and b
float a = Corner1VertData.DistanceToOceanLevel + 1;
float b = Corner2VertData.DistanceToOceanLevel + 1;
return LerpCloseToOne(a , b, corner1Pos, corner2Pos);

}

Vector2 LerpCloseToOne(float valueA, float valueB, Vector2 a, Vector2 b)
{
return Vector2.Lerp(a, b, (1 - valueA) / (valueB - valueA));
}
Что мне следует сделать, чтобы решить эту проблему? Легче всего просто повысить уровень океана, но это похоже на пластырь. Я также мог бы попытаться каким-то образом сделать так, чтобы крайние точки были частью касательной, касающейся кривой суши. Что вы, ребята, предлагаете?
Вот ссылка на репозиторий GitHub, большая часть соответствующего кода находится в классе OceanFace:
ссылка
Изображение


Подробнее здесь: https://stackoverflow.com/questions/788 ... cave-lines
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»