Создание участка с выпуклой оболочкой в ​​r - PullRequest
0 голосов
/ 25 января 2019

У меня есть задача сделать для университета, и я не знаю, как это сделать. Могу ли я попросить вашей помощи. Я не могу использовать дополнительные пакеты: (

У нас есть данные с точками

xi=(xi1, xi2), for i=1,…,n, where n is natural number.

Моя задача:

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

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

Я не могу установить пакеты.

Пример решения:

###Creating a set of random points on the plane
    pts <- list( rnorm(2))
    for(k in 1:20){ pts <- c( pts, list( rnorm(2))) }
    pts

Набор случайных точек

[[1]]
[1] -0.2895047  0.3938896

[[2]]
[1] 0.5187255 0.1691874

[[3]]
[1] 0.2310706 0.1311234

[[4]]
[1] -0.44087647  0.07283041

[[5]]
[1]  0.9438115 -1.1034222

[[6]]
[1] 0.9342882 0.9032668

[[7]]
[1] -0.3655531  1.0130261

[[8]]
[1] -2.268272 -1.278624

[[9]]
[1]  2.021061 -2.705479

[[10]]
[1] -0.9460602 -0.1185306

[[11]]
[1] -1.4656782 -0.8536016

[[12]]
[1]  1.0060148 -0.9254827

[[13]]
[1] -0.1493196  1.3880502

[[14]]
[1]  0.4846496 -0.8680879

[[15]]
[1] -0.03187148  1.03490764

[[16]]
[1] 0.3078759 0.8329899

[[17]]
[1]  1.225831 -1.492936

[[18]]
[1] -1.64684601 -0.06100802

[[19]]
[1] -0.08985374  0.62738174

[[20]]
[1] -0.8206645  0.3503755

[[21]]
[1] -0.1374857  0.4190813

Я должен создать функцию listpoints (pts), которая перечисляет точки выпуклой оболочки

convHull( pts)
[[1]]
[1]  2.021061 -2.705479

[[2]]
[1] -2.268272 -1.278624

[[3]]
[1] -1.64684601 -0.06100802

[[4]]
[1] -0.1493196  1.3880502

[[5]]
[1] 0.9342882 0.9032668

[[6]]
[1]  2.021061 -2.705479
null device 
          1

И создать простой сюжет

png( "./fig1.png")
plotPoints( pts, col = "white")
addPoints( convHull( pts), pch = 20, cex = 2, col = "red")
addRegion( convHull( pts), col = rgb(1, 0, 0, 0.1), border = "red")
addPoints( pts, pch = 20, col = "black")
dev.off()

enter image description here

...