Categories
Research

The 3D Art Gallery Problem

By Ashlyn Lee, Mutiraj Laksanawisit, Johan Azambou, and Megan Grosse

Mentored by Professor Yusuf Sahillioglu and Mark Gillespie

The 2D Art Gallery Problem addresses the following question: given an art gallery with a polygonal floor plan, what is the optimal position of security guards to minimize the number of guards necessary to watch over the entirety of the space? This problem has been adapted into the 3D Art Gallery Problem, which aims to minimize the number of guards necessary to guard the entirety of a 3D polygonal mesh. It is this three-dimensional version which our SGI research team explored this past week.

In order to determine what triangular faces a given guarding point g inside of a mesh M could “see,” we defined point p ∈ M as visible to a guarding point g ∈ M if line segment gp lay entirely within M. To implement this definition, we used ray-triangle intersection: starting from each guarding point, our algorithm constructed hypothetical rays passing through the vertices of a small spherical mesh centered on the test point. Then, the first triangle in which each ray intersected was considered “visible.”

Our primary approach to solving the 3D Art Gallery Problem was greedy strategy. Using this method, we can reduce the 3D Art Gallery Problem to a set-covering problem with the set to cover consisting of all faces that make up a given triangle mesh. As part of this method, our algorithm iteratively picked the skeleton point from our sample that could “see” the most faces (as defined by ray-triangle intersection above), and then colored these faces, showing that they were guarded. It then once again picked the point that could cover the most faces and repeated this process with new colors until no faces remained.

However, it turned out that some of our mesh skeletons were not large enough of a sample space to ensure that every triangle face could be guarded. Thus, we implemented a larger sample space of guarding points, also including those outside of the skeleton but within the mesh.

Within this greedy strategy, we attempted both additive and subtractive methods of guarding. The subtractive method involved starting with many guards and removing those with lower guarding capabilities (that were able to see fewer faces). The additive method started with a single guard, placed in the location in which the most faces could be guarded. The additive method proved to be the most effective.

Our results are below, including images of guarded meshes as well as a table comparing skeleton and full-mesh sample points’ numbers of guards and times used:

Model Used

Using only points from the skeleton

(5 attempts)

Adding 1000 more random points

(5 attempts)

No. of Guards

Time Used (seconds)

No. of Guards

Time Used (seconds)

Torus

Min: 7

Max: 8

Avg: 7.2

Min: 6.174

Max: 7.223

Avg: 6.435

Min: 4

Max: 4

Avg: 4

Min: 26.291

Max: 26.882

Avg: 26.494

spot

Unsolvable

Min: 15.660

Max: 16.395

Avg: 16.041

Min: 5

Max: 6

Avg: 5.6

Min: 98.538

Max: 100.516

Avg: 99.479

homer

Unsolvable

Min: 31.210

Max: 31.395

Avg: 31.308

Unsolvable

Min: 232.707

Max: 241.483

Avg: 237.942

baby_doll

Unsolvable

Min: 70.340

Max: 71.245

Avg: 70.840

Unsolvable

Min: 388.229

Max: 400.163

Avg: 395.920

camel

Unsolvable

Min: 91.470

Max: 93.290

Avg: 92.539

Unsolvable

Min: 504.316

Max: 510.746

Avg: 508.053

donkey

Unsolvable

Min: 89.855

Max: 114.415

Avg: 96.008

Unsolvable

Min: 478.854

Max: 515.941

Avg: 488.058

kitten

Min: 4

Max: 5

Avg: 4.2

Min: 41.621

Max: 42.390

Avg: 41.966

Min: 4

Max: 5

Avg: 4.4

Min: 299.202

Max: 311.160

Avg: 302.571

man

Unsolvable

Min: 64.774

Max: 65.863

Avg: 65.200

Unsolvable (⅖)

Min: 15

Max: 15

Avg: 15

Min: 482.487

Max: 502.787

Avg: 494.051

running_pose

Unsolvable

Min: 38.153

Max: 38.761

Avg: 38.391

Unsolvable

Min: 491.180

Max: 508.940

Avg: 500.162

teapot

Min: 10

Max: 11

Avg: 10.2

Min: 39.895

Max: 40.283

Avg: 40.127

Min: 7

Max: 8

Avg: 7.8

Min: 230.414

Max: 235.597

Avg: 233.044

spider

Unsolvable

Min: 151.243

Max: 233.798

Avg: 179.692

Min: 26

Max: 28

Avg: 27

Min: 1734.485

Max: 2156.615

Avg: 1986.744

bunny_fixed

Unsolvable

Min: 32.013

Max: 44.759

Avg: 37.380

Min: 6

Max: 6

Avg: 6

Min: 274.152

Max: 347.479

Avg: 302.596

table

Min: 16

Max: 16

Avg: 16

Min: 358.471

Max: 430.318

Avg: 387.133

Min: 13

Max: 16

Avg: 15.2

Min:1607.658 

Max: 1654.312

Avg: 1627.800

lamb

Min: 13

Max: 13

Avg: 13

Min:72.651 

Max: 74.011

Avg: 73.480

Min:11 

Max: 13

Avg: 11.8

Min: 472.033

Max: 488.215

Avg: 479.064

pig

Min: 12

Max: 13

Avg: 12.4

Min:148.879 

Max: 150.889

Avg: 149.670

Min: 15

Max: 17

Avg: 16

Min: 752.750

Max: 789.704

Avg: 766.684

*Note: Unsolvable means that not all of the faces were intersected

Further Research

Given the time restraint, we were unable to explore all of the different approaches and techniques. Firstly, we would ensure all the faces were intersected as it is evident that with our current approach, some of the faces are not getting intersected. This could be applied to the code itself, or the skeleton of the mesh. We could test different approaches of skeletonization to ensure we have the optimal skeleton of the mesh when implementing these approaches. Next, we would have hoped to develop the updated subtractive approach of guarding to compare the results with both additive approaches. We would presume that the results of the runtime for each approach would differ and potentially the location of the guard points as well. Furthermore, we could compare our approaches to those from the literature to determine if we developed a more efficient approach. 

Author

Leave a Reply

Your email address will not be published. Required fields are marked *