#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # Randomly pick point on the sphere surface. # # References: # [1] Shpere Poin Picking -- from Wolfram MathWorld # http://mathworld.wolfram.com/SpherePointPicking.html # [2] Random Points on a Sphere # https://www.jasondavies.com/maps/random-points/ # # Aaron LI # 2015/06/18 __version__ = "0.1.0" __date__ = "2015/06/16" import math import random def sphere_point(n=1, unit="rad"): """ Randomly uniformly pick a point on the sphere surface. Using the method "Sphere Point Picking" from Wolfram MathWorld. Arguments: n: number of points to be generated unit: unit of output values: rad/deg Return: (theta, phi): spherical coordinate (unit: rad). theta: [0, 2\pi); phi: [0 - \pi] If n > 1, then return a list of (theta, phi) """ points = [] for i in range(n): u = random.random() v = random.random() theta = 2.0 * math.pi * u phi = math.acos(2.0*v - 1.0) if unit == "deg": theta = rad2deg(theta) phi = rad2deg(phi) points.append((theta, phi)) if n == 1: return points[0] else: return points def rad2deg(x): return x * 180.0 / math.pi def deg2rad(x): return x * math.pi / 180.0