`vignettes/algorithm.Rmd`

`algorithm.Rmd`

This vignette provides some further detail on the chapter Scripts, algorithms and functions (see https://geocompr.robinlovelace.net/algorithms.html ) of the Geocomputation with R book.

It starts with the same input data:

x_coords = c(10, 0, 0, 12, 20, 10) y_coords = c(0, 0, 10, 20, 15, 0) poly_mat = cbind(x_coords, y_coords) Origin = poly_mat[1, ] # create a point representing the origin T1 = rbind(Origin, poly_mat[2:3, ], Origin) # create 'triangle matrix' C1 = (T1[1, , drop = FALSE] + T1[2, , drop = FALSE] + T1[3, , drop = FALSE]) / 3 # find centroid

t_area = function(x) { abs( x[1, 1] * (x[2, 2] - x[3, 2]) + x[2, 1] * (x[3, 2] - x[1, 2]) + x[3, 1] * (x[1, 2] - x[2, 2]) ) / 2 }

The function `t_area`

generalizes the solution by taking any object `x`

, assumed to have the same dimensions as the triangle represented in `T1`

. We can verify it works on the triangle matrix `T1`

as follows:

t_area(T1)

`## [1] 50`

Likewise we can create a function that finds the triangle’s centroid:

t_centroid = function(x) { (x[1, ] + x[2, ] + x[3, ]) / 3 } t_centroid(T1)

```
## x_coords y_coords
## 3.333333 3.333333
```

The next stage is to create the second triangle and calculate its area and centroid. This is done in the code chunk below, which binds the 3^{rd} and 4^{th} coordinates onto the 1^{st}, and uses the same functions we created above to calculate its area and width:

T2 = rbind(Origin, poly_mat[3:4, ], Origin) A2 = t_area(T2) C2 = t_centroid(T2)

From this point it is not a big leap to see how to create the 3^{rd} and final triangle that constitutes the polygon represented by `poly_mat`

.

Note: it would also be possible to create the polygons with the **decido** package (code not run):