#! /usr/bin/env python # def uniform_in_triangle_map1 ( v1, v2, v3, n, seed ): #*****************************************************************************80 # ## UNIFORM_IN_TRIANGLE_MAP1 maps uniform points into a triangle. # # Discussion: # # The triangle is defined by three vertices. This routine # uses Turk's rule #1. # # Licensing: # # This code is distributed under the GNU LGPL license. # # Modified: # # 19 January 2016 # # Author: # # John Burkardt # # Reference: # # Greg Turk, # Generating Random Points in a Triangle, # in Graphics Gems, # edited by Andrew Glassner, # AP Professional, 1990, pages 24-28. # # Parameters: # # Input, real V1(2), V2(2), V3(2), the vertices. # # Input, integer N, the number of points. # # Input/output, integer SEED, a seed for the random number generator. # # Output, real X(2,N), the points. # import numpy as np from r8vec_uniform_01 import r8vec_uniform_01 x = np.zeros ( [ 2, n ] ) # # Generate the points using Turk's rule 1. # for j in range ( 0, n ): r, seed = r8vec_uniform_01 ( 2, seed ) a = 1.0 - np.sqrt ( r[1] ) b = ( 1.0 - r[0] ) * np.sqrt ( r[1] ) c = r[0] * np.sqrt ( r[1] ) for i in range ( 0, 2 ): x[i,j] = ( a * v1[i] \ + b * v2[i] \ + c * v3[i] ) return x, seed def uniform_in_triangle_map1_test ( ): #*****************************************************************************80 # #% UNIFORM_IN_TRIANGLE_MAP1_TEST tests UNIFORM_IN_TRIANGLE_MAP1. # # Licensing: # # This code is distributed under the GNU LGPL license. # # Modified: # # 19 January 2016 # # Author: # # John Burkardt # import numpy as np import platform from r8mat_transpose_write import r8mat_transpose_write n = 1000 seed = 123456789 v1 = np.array ( [ 0.75, 0.90 ] ) v2 = np.array ( [ 0.00, 0.20 ] ) v3 = np.array ( [ 0.95, 0.65 ] ) print ( '' ) print ( 'UNIFORM_IN_TRIANGLE_MAP1_TEST' ) print ( ' Python version: %s' % ( platform.python_version ( ) ) ) print ( ' UNIFORM_IN_TRIANGLE_MAP1 maps uniform' ) print ( ' points into a triangle.' ) print ( '' ) print ( ' Number of points N = %d' % ( n ) ) print ( ' Initial random number SEED = %d' % ( seed ) ) print ( '' ) print ( ' V1 = %12f %12f' % ( v1[0], v1[1] ) ) print ( ' V2 = %12f %12f' % ( v2[0], v2[1] ) ) print ( ' V3 = %12f %12f' % ( v3[0], v3[1] ) ) x, seed = uniform_in_triangle_map1 ( v1, v2, v3, n, seed ) print ( ' Final random number SEED = %d' % ( seed ) ) filename = 'uniform_in_triangle_map1.txt' r8mat_transpose_write ( filename, 2, n, x ) print ( '' ) print ( ' Data written to "%s".' % ( filename ) ) # # Terminate. # print ( '' ) print ( 'UNIFORM_IN_TRIANGLE_MAP1_TEST:' ) print ( ' Normal end of execution.' ) return if ( __name__ == '__main__' ): from timestamp import timestamp timestamp ( ) uniform_in_triangle_map1_test ( ) timestamp ( )