球面上の点を平面上にステレオ投影する

2017年3月27日
1 分

先週のさらに続き。先週は、球面上の点を平面上に投影するのに X, Y 座標をそのまま使って水平投影したけど、今度はステレオ投影というのをやってみる。
ステレオ投影は Wikipedia に詳しく載っている。
先週と同じように、下半球の点 300 個を XY 平面(赤道面)上に投影する。やってみたのが下の図。

コードは次の通り。

#!/usr/bin/env ruby  
# encoding: utf-8

require 'csv'

def sp(x, y, z)  
  [x / (1.0 - z), y / (1.0 - z)]  
end

csv = File.open(ARGV.shift, "r")
csv.each_line do |line|  
  x, y, z = line.parse_csv.map{|v| v.to_f }  
  r = Math.sqrt(x * x + y * y + z * z)  
  print sp(x, y, z).map{|v| v * r }.to_csv  
end

やっつけ仕事なので、ヘルプもないけど、先週の gss_gen コマンド(--cartesian オプション付き)の結果を入力として、投影点の座標を CSV で出力する。