Initializing 3D Canvas...

Isovists & Viewshed

2 min read1 page

Isovist Fields & Spatial Visibility: First formalized by Michael Benedikt in 1979, an isovist is the set of all spatial points visible from a single vantage point in space. By casting radial 360-degree sightlines until striking walls or columns, computational architects quantify human visual perception, measuring spatial openness, perimeter occlusivity, and surveillance sightlines.

Isovist Geometric Metrics:

1. Visual Area ($A_v$): Total square footage directly visible from the observation point. 2. Compactness Ratio: $4 \pi A / P^2$ measures whether the visual field is circular (open) or fractured (labyrinthine). 3. Occlusivity: Length of visual boundary segments that correspond to occluding edges rather than solid walls.
python
1import numpy as np
2
3def compute_isovist_polygon(viewpoint, obstacles, max_radius=10.0, num_rays=360):
4 """
5 Computes Benedikt (1979) 2D isovist polygon from a viewpoint.
6 Casts radial rays in 360 degrees and finds the nearest intersection with room obstacles.
7 Key metrics: Area, Perimeter, Compactness (Circularity), and Occlusivity.
8 """
9 isovist_vertices = []
10 angles = np.linspace(0, 2 * np.pi, num_rays, endpoint=False)
11
12 for theta in angles:
13 ray_dir = np.array([np.cos(theta), np.sin(theta)])
14 closest_t = max_radius
15
16 for segment in obstacles:
17 t = ray_segment_intersect(viewpoint, ray_dir, segment)
18 if t is not None and t < closest_t:
19 closest_t = t
20
21 isovist_vertices.append(viewpoint + ray_dir * closest_t)
22
23 return isovist_vertices
Viewpoint X
-0.20
Viewpoint Y
-0.40
1 min read1 page

Cumulative Viewshed & Urban Sightlines: In regional master planning and skyline design, a viewshed identifies terrain and building zones visible from critical landmark viewpoints (such as historic monuments or observation decks). Computing mutual line-of-sight (LOS) across 3D city blocks highlights blind spots, public surveillance zones, and protected view corridors.

Viewshed Invariant:

1. Line-of-Sight (LOS): Unbroken straight line connecting observer coordinate to target point. 2. Elevation Profile: Any intervening terrain obstruction whose elevation angle exceeds the sightline causes occlusion. 3. Visual Connectivity Graph: Encodes human movement desire lines and commercial foot-traffic potential.
python
1def compute_cumulative_viewshed(dem_grid, observer_points):
2 """
3 Computes Digital Elevation Model (DEM) cumulative viewshed.
4 For each cell (x, y) on terrain, counts how many observers have unobstructed Line-of-Sight (LOS).
5 Uses Bresenham ray traversal or radial elevation profile slope comparisons:
6 tan(elevation_angle) = (z_target - z_obs) / horizontal_dist.
7 """
8 return "Cumulative Visibility Matrix (Heatmap)"
Tower Observer Height
2.00