Мне нужно определить объект (или область), который имеет вид «шарика», сформированного на дискретной сетке.Это должно выглядеть примерно так:
, где красная область обозначает центральную точку (это всего лишь идеи, любая пузырьковая форма будет работать до тех пор, пока она может изменяться случайным образом),Моя идея до сих пор заключалась в том, чтобы итеративно увеличивать угол от начальной точки (= 0 градусов) до 360 градусов и использовать тригонометрию для вычисления внешних точек окружности (что приведет к единичной окружности, если радиус = 1 = const).Затем я использовал алгоритм линий Брезенхэма (помните: мы движемся по дискретной сетке), чтобы вычислить линию, которая соединяет центр круга и внешнюю точку, с которой я только что придумал.Моя идея состояла в том, что, если бы я мог немного изменить радиус, я мог бы создать эти пузырьковые формы.То, что я придумала до сих пор, дает мне красивые формы, хотя они просто не очень «пухлые».Вот мой код (обратите внимание, что x0
и y0
отмечают центральную точку моей карты сетки, plotBresenham
просто помещает все 1s
в регионы, чтобы карта сетки могла быть визуализирована):
double radius = 10;
for(int alpha=0; alpha<360; alpha++) {
double x = cos(alpha*M_PI/180.0)*radius;
double y = sin(alpha*M_PI/180.0)*radius;
if(alpha<45) radius+=0.5;
else if(alpha<90) radius-=0.5;
else if(alpha<135) radius+=0.5;
else if(alpha<180) radius-=0.5;
else if(alpha<225) radius+=0.5;
else if(alpha<270) radius-=0.5;
else if(alpha<315) radius+=0.5;
else radius-=0.5;
plotBresenhamLine(x0,y0,x,y)
}
Результат выглядит так:
Извините за грубый чертеж.Язык программирования - C ++, но я думаю, что подход на самом деле не зависит от используемого языка.Любые советы / помощь / руководство о том, как я могу создавать фигуры, которые больше похожи на те, которые мне нужны?Или даже Framework, который делает такие вещи для вас?Для меня просто важно иметь координаты точек внутри, чтобы поместить их в мою сетку.