Sha256: db79bd526ed020f38236125605c9e95cde9edb63665facce622225b8e4a412be

Contents?: true

Size: 1.15 KB

Versions: 1

Compression:

Stored size: 1.15 KB

Contents

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

require 'matrix'
require 'mageo/vector3d.rb'

#3次元極座標。
#極座標ライブラリでは、角度は基本的に radian を使用する。
#degree は人間の都合で決められた尺度だろう。
#まあ人間用に degree 用インターフェイスも用意することもあるかもしれんが。
class Polar3D

  include Math
  
  attr_reader :r, :theta, :phi

  #
  def initialize( r, theta, phi)
    @r = r
    @theta = theta
    @phi = phi
  end

  #3次元 Vector に変換。
  def to_v3d
    #Vector[ @r * cos( @theta ), @r * sin( @theta ) ]
    x = @r * sin( @theta ) * cos( @phi )
    y = @r * sin( @theta ) * sin( @phi )
    z = @r * cos( @theta )
    Vector3D[ x, y, z ]
  end

  #phi を 0 <= phi < 2*PI の間の角度に変換する破壊破壊的メソッド。
  def minimize_phi!
    tmp = ( @phi / (2.0*PI) )
    tmp = tmp - tmp.floor
    @phi = (2.0*PI) * tmp
  end

  #phi を 0 <= phi < 2*PI の間の角度に変換したオブジェクトを返す非破壊破壊的メソッド。
  def minimize_phi
    result = Marshal.load( Marshal.dump( self ) )
    result.minimize_phi!
    result
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mageo-0.0.1 lib/mageo/polar3d.rb