Casting Rays Through Chess and Radio Waves
Designing an antenna pattern chess set meant solving two problems at once: visualising how radio waves propagate directionally from each piece, and validating whether a piece can legally reach its destination. Both problems trace invisible lines through space—perfect for raycasting.
Raycasting shoots mathematical rays from a source point along a direction vector, checking for intersections with obstacles. In our antenna chess set, each piece casts rays according to its movement rules while simultaneously modeling its RF radiation pattern.
struct Ray {
let origin: (x: Double, y: Double)
let direction: (x: Double, y: Double)
func castTo(distance: Double, obstacles: [(x: Double, y: Double)]) -> Bool {
let steps = Int(distance * 10)
for i in 1...steps {
let t = Double(i) / Double(steps)
let point = (x: origin.x + direction.x * t,
y: origin.y + direction.y * t)
if obstacles.contains(where: { abs($0.x - point.x) < 0.1 && abs($0.y - point.y) < 0.1 }) {
return false
}
}
return true
}
}
Swift’s tuple syntax makes the geometric calculations clean, but Perl’s pattern matching shines when parsing chess notation and validating complex move patterns:
sub cast_ray {
my ($from_x, $from_y, $to_x, $to_y, $board) = @_;
my ($dx, $dy) = ($to_x - $from_x, $to_y - $from_y);
my $steps = int(sqrt($dx*$dx + $dy*$dy) * 10);
for my $i (1..$steps-1) {
my $x = int($from_x + ($dx * $i / $steps) + 0.5);
my $y = int($from_y + ($dy * $i / $steps) + 0.5);
return 0 if $board->[$y][$x] ne ' ';
}
return 1;
}
The beauty of raycasting lies in its uniform approach—whether you’re checking if a rook can slide to h8 or calculating how a dipole antenna radiates power at 45 degrees, you’re stepping along the same mathematical ray. The algorithm’s discrete sampling approach mirrors how we actually measure antenna patterns: taking readings at regular angular intervals.
This dual-purpose thinking shaped the physical chess set design too. Each 3D-printed piece incorporates subtle directional grooves that hint at both its movement capabilities and its theoretical radiation pattern, making the invisible mathematics visible.