Диаграмма Вороного

Форум пользователей пакета Maple

Модератор: Admin

Markiyan Hirnyk
Сообщения: 1366
Зарегистрирован: Вс дек 04, 2011 11:07 pm

Диаграмма Вороного

Сообщение Markiyan Hirnyk » Чт фев 09, 2012 11:15 pm

Как создать диаграмму Вороного, применяя Maple?
Диаграмма Вороного конечного множества точек S на плоскости представляет такое разбиение плоскости, при котором каждая область этого разбиения образует множество точек, более близких к одному из элементов множества S, чем к любому другому элементу множества.
См. http://ru.wikipedia.org/wiki/%D0%94%D0% ... 0%B3%D0%BE

Markiyan Hirnyk
Сообщения: 1366
Зарегистрирован: Вс дек 04, 2011 11:07 pm

Полезная ссылка

Сообщение Markiyan Hirnyk » Пт фев 10, 2012 1:49 pm


Markiyan Hirnyk
Сообщения: 1366
Зарегистрирован: Вс дек 04, 2011 11:07 pm

Мое решение

Сообщение Markiyan Hirnyk » Вс фев 12, 2012 4:22 pm

Мой код в случае n=3.
> restart; with(Statistics):
> with(plots):
> X := RandomVariable(Uniform(0, 10)): randomize():
> for j to 3 do A[j] := convert(Sample(X, 2), list) end do;

[7.33230345482022194, 6.17871614912884226]
[3.72916160700232790, 9.92005819168451275]
[3.78839002851119932, 2.97039883295694286]

> cell[1] := proc (x, y) if is(sqrt((x-A[1][1])^2+(y-A[1][2])^2)
-sqrt((x-A[2][1])^2+(y-A[2][2])^2) <= 0) and is(sqrt((x-A[1][1])^2+(y-A[1][2])^2)
-sqrt((x-A[3][1])^2+(y-A[3][2])^2) <= 0) then 1 end if end proc:
> c1 := contourplot(cell[1], 0 .. 10, 0 .. 10, numpoints = 20000, contours = [1], coloring = [blue, blue]);
> cell[2] := proc (x, y) if is(sqrt((x-A[2][1])^2+(y-A[2][2])^2)-sqrt((x-A[1][1])^2
+(y-A[1][2])^2) <= 0) and is(sqrt((x-A[2][1])^2+(y-A[2][2])^2)-sqrt((x-A[3][1])^2+(y-A[3][2])^2) <= 0)
then 1 end if end proc:
> c2 := contourplot(cell[2], 0 .. 10, 0 .. 10, numpoints = 20000, contours = [1], coloring = [red, red]):
> c3 := pointplot([A[1], A[2], A[3]], color = black, symbol = solidcircle, symbolsize = 20):
> display({c1, c2, c3}, view = [0 .. 10, 0 .. 10]);


Изображение
Мой рисунок не идеальный,конструктивные советы приветствуются. Есть несколько приложений, сделанных в Mathematica:
http://demonstrations.wolfram.com/VoronoiDiagrams/ ,
http://demonstrations.wolfram.com/Lloyd ... iDiagrams/ ,
http://demonstrations.wolfram.com/VoronoiImage/ .
Мой код не является переводом: проще написать собственный код.