#! /usr/bin/env python # def triangle_grid_points ( n, t ): #*****************************************************************************80 # ## TRIANGLE_GRID_POINTS computes points on a triangular grid. # # Discussion: # # The grid is defined by specifying the coordinates of an enclosing # triangle T, and the number of subintervals each side of the triangle # should be divided into. # # Choosing N = 10, for instance, breaks each side into 10 subintervals, # and produces a grid of ((10+1)*(10+2))/2 = 66 points. # # X # 9 X # 8 9 X # 7 8 9 X # 6 7 8 9 X # 5 6 7 8 9 X # 4 5 6 7 8 9 X # 3 4 5 6 7 8 9 X # 2 3 4 5 6 7 8 9 X # 1 2 3 4 5 6 7 8 9 X # 0 1 2 3 4 5 6 7 8 9 X # # Licensing: # # This code is distributed under the GNU LGPL license. # # Modified: # # 09 April 2015 # # Author: # # John Burkardt # # Parameters: # # Input, integer N, the number of subintervals. # # Input, real T[3,2], the coordinates of the points # defining the triangle. # # Output, real TG[NG,2], the coordinates # of the points in the triangle. # import numpy as np ng = ( ( n + 1 ) * ( n + 2 ) ) // 2 tg = np.zeros ( ( ng, 2 ) ) p = 0 for i in range ( 0, n + 1 ): for j in range ( 0, n + 1 - i ): tg[p,0] = ( float ( i ) * t[0,0] \ + float ( j ) * t[1,0] \ + float ( n - i - j ) * t[2,0] ) \ / float ( n ) tg[p,1] = ( float ( i ) * t[0,1] \ + float ( j ) * t[1,1] \ + float ( n - i - j ) * t[2,1] ) \ / float ( n ) p = p + 1 return tg def triangle_grid_points_test ( n ): #*****************************************************************************80 # ## TRIANGLE_GRID_POINTS_TEST tests TRIANGLE_GRID_POINTS. # # Licensing: # # This code is distributed under the GNU LGPL license. # # Modified: # # 09 April 2015 # # Author: # # John Burkardt # import numpy as np import platform from r82col_print_part import r82col_print_part from r8mat_print import r8mat_print from r8mat_write import r8mat_write from triangle_grid_count import triangle_grid_count from triangle_grid_display import triangle_grid_display print ( '' ) print ( 'TRIANGLE_GRID_POINTS_TEST:' ) print ( ' Python version: %s' % ( platform.python_version ( ) ) ) print ( ' TRIANGLE_GRID_POINTS defines a triangular grid' ) print ( ' with N+1 points on a side, based on any triangle.' ) print ( '' ) print ( ' Input value of N is %d' % ( n ) ) ng = triangle_grid_count ( n ) print ( ' Number of grid points will be %d' % ( ng ) ) t = np.array ( [ \ [ 0.0, 0.0 ], \ [ 1.0, 0.0 ], \ [ 0.5, 0.86602540378443860 ] ] ) r8mat_print ( 3, 2, t, ' Triangle vertices:' ) tg = triangle_grid_points ( n, t ) r82col_print_part ( ng, tg, 20, ' Part of the grid point array:' ); # # Write the data to a file. # filename = 'triangle_grid_points.xy' r8mat_write ( filename, ng, 2, tg ) # # Plot the data. # print ( '' ) print ( ' Data written to the file "%s".' % ( filename ) ) filename = 'triangle_grid_points.png' triangle_grid_display ( t, ng, tg, filename ) # # Terminate. # print ( '' ) print ( 'TRIANGLE_GRID_POINTS_TEST:' ) print ( ' Normal end of execution.' ) return if ( __name__ == '__main__' ): from timestamp import timestamp timestamp ( ) triangle_grid_points_test ( 10 ) timestamp ( )