diff --git a/README.md b/README.md index 9104c6a34aa84afcf215eb941b4e81668f3d9841..6257eef647feb5d26f018bc6caf1926c7a766cc2 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,10 @@ If output file `OUTFILE` is undefined, the output is directed to `STDOUT`. Set the filename of the input spreadsheet. +- **-w**, **-\-width** *WIDTHS* + + Set comma-separated list of column widths of the input spreadsheet if auto-detection fails. + - **-m**, **-\-method** *METHOD* Set the interpolation method. Select one of the following: `linear` (default), `nearest`, `cubic`. The following options are available for 2D data only: `nearest-up`, `zero`, `slinear`, `quadratic`, `previous`, `next`. @@ -65,44 +69,44 @@ If output file `OUTFILE` is undefined, the output is directed to `STDOUT`. Assume the following input file `testdata2.csv` containing scattered data points in 2D: ```text - x y - 0.005 0.615 - 0.014 2.935 - 0.019 4.712 - 0.038 13.814 - 0.064 24.658 - 0.076 29.594 - 0.095 39.155 - 0.125 59.091 - 0.145 77.677 + X Y + 0.005 0.615 + 0.014 2.935 + 0.019 4.712 + 0.038 13.814 + 0.064 24.658 + 0.076 29.594 + 0.095 39.155 + 0.125 59.091 + 0.145 77.677 ``` The following command will parse the file above and produce regular gridded data points using cubic spline interpolation along the first column in the interval `[0.0,0.15]` using `15` steps, i.e. every increment of `0.01` a data point is interpolated in the second column. ```bash -$ mkgrid --infile testdata2.csv --range 0:0.15 --steps 15 --method cubic +$ mkgrid -i testdata2.csv -r 0:0.15 -s 15 -m cubic ``` The output will look like the following: ```text - x y - 0.000 -0.297 - 0.010 1.780 - 0.020 5.116 - 0.030 9.812 - 0.040 14.762 - 0.050 19.119 - 0.060 23.094 - 0.070 27.051 - 0.080 31.418 - 0.090 36.432 - 0.100 42.011 - 0.110 48.205 - 0.120 55.215 - 0.130 63.249 - 0.140 72.516 - 0.150 83.224 + X Y + 0.000 -0.297 + 0.010 1.780 + 0.020 5.116 + 0.030 9.812 + 0.040 14.762 + 0.050 19.119 + 0.060 23.094 + 0.070 27.051 + 0.080 31.418 + 0.090 36.432 + 0.100 42.011 + 0.110 48.205 + 0.120 55.215 + 0.130 63.249 + 0.140 72.516 + 0.150 83.224 ``` An example plot for the above result would look like this: @@ -114,69 +118,74 @@ An example plot for the above result would look like this: Assume the following input file `testdata3.csv` containing scattered data points in 3D: ```text - x y z - 0.000 0.000 0.000 - 0.019 0.000 4.712 - 0.042 0.000 15.976 - 0.092 0.000 37.076 - 0.109 0.000 47.519 - 0.136 0.000 68.049 - 0.009 0.001 2.413 - 0.026 0.005 11.605 - 0.094 0.032 43.647 - 0.106 0.037 51.925 - 0.134 0.052 76.073 - 0.004 0.004 2.127 - 0.025 0.026 17.043 - 0.059 0.061 30.732 - 0.093 0.095 52.012 - 0.102 0.103 59.315 - 0.113 0.113 68.501 - 0.132 0.132 87.946 - 0.003 0.009 2.752 - 0.007 0.021 8.035 - 0.011 0.033 12.049 - 0.022 0.066 18.954 - 0.040 0.109 27.913 - 0.046 0.122 31.549 - 0.052 0.132 34.542 - 0.000 0.023 5.569 - 0.000 0.072 11.650 - 0.000 0.091 13.370 - 0.000 0.115 15.056 - 0.000 0.134 16.302 + X Y Z + 0.000 0.000 0.000 + 0.019 0.000 4.712 + 0.042 0.000 15.976 + 0.092 0.000 37.076 + 0.109 0.000 47.519 + 0.136 0.000 68.049 + + 0.009 0.001 2.413 + 0.026 0.005 11.605 + 0.094 0.032 43.647 + 0.106 0.037 51.925 + 0.134 0.052 76.073 + + 0.004 0.004 2.127 + 0.025 0.026 17.043 + 0.059 0.061 30.732 + 0.093 0.095 52.012 + 0.102 0.103 59.315 + 0.113 0.113 68.501 + 0.132 0.132 87.946 + + 0.003 0.009 2.752 + 0.007 0.021 8.035 + 0.011 0.033 12.049 + 0.022 0.066 18.954 + 0.040 0.109 27.913 + 0.046 0.122 31.549 + 0.052 0.132 34.542 + + 0.000 0.023 5.569 + 0.000 0.072 11.650 + 0.000 0.091 13.370 + 0.000 0.115 15.056 + 0.000 0.134 16.302 ``` The following command will parse the above input file and creates regular gridded data points along data columns 1 and 2 within the interval `[0.0,0.13]` in both dimensions. The corresponding data in column 3 will be interpolated using `13` steps, i.e. `(13+1)×(13+1)=196` records will be created in total. ```bash -$ mkgrid --infile testdata3.csv --range 0:0.13,0:0.13 --steps 13 +$ mkgrid -i testdata3.csv -r 0:0.13,0:0.13 -s 13 ``` The output will look like the following: ```text - x y z - 0.000 0.000 0.000 - 0.010 0.000 2.480 - 0.020 0.000 5.202 - 0.030 0.000 10.099 - 0.040 0.000 14.997 - 0.050 0.000 19.352 - 0.060 0.000 23.572 - 0.070 0.000 27.792 - 0.080 0.000 32.012 - 0.090 0.000 36.232 - 0.100 0.000 41.990 - 0.110 0.000 48.279 - 0.120 0.000 55.883 - 0.130 0.000 63.487 - 0.000 0.010 2.421 - 0.010 0.010 5.438 - 0.020 0.010 10.451 - 0.030 0.010 14.423 - 0.040 0.010 17.364 - 0.050 0.010 20.807 + X Y Z + 0.000 0.000 0.000 + 0.010 0.000 2.480 + 0.020 0.000 5.202 + 0.030 0.000 10.099 + 0.040 0.000 14.997 + 0.050 0.000 19.352 + 0.060 0.000 23.572 + 0.070 0.000 27.792 + 0.080 0.000 32.012 + 0.090 0.000 36.232 + 0.100 0.000 41.990 + 0.110 0.000 48.279 + 0.120 0.000 55.883 + 0.130 0.000 63.487 + + 0.000 0.010 2.421 + 0.010 0.010 5.438 + 0.020 0.010 10.451 + 0.030 0.010 14.423 + 0.040 0.010 17.364 + 0.050 0.010 20.807 [...] ``` An example plot for the above would look like this: @@ -188,14 +197,14 @@ An example plot for the above would look like this: Assume an input file `testdata4.csv` containing 4 columns of scattered input data. In this example, columns 1-3 describe spatial coordinates on the surface of a sphere wheras column 4 holds the surface temperature of that point: ```text - x y z T - 0.000 0.000 10.000 0.0 - 2.588 0.000 9.659 7.8 - 5.000 0.000 8.660 15.0 - 7.071 0.000 7.071 21.2 - 8.660 0.000 5.000 26.0 - 9.659 0.000 2.588 29.0 - 10.000 0.000 0.000 30.0 + X Y Z T + 0.000 0.000 10.000 0.0 + 2.588 0.000 9.659 7.8 + 5.000 0.000 8.660 15.0 + 7.071 0.000 7.071 21.2 + 8.660 0.000 5.000 26.0 + 9.659 0.000 2.588 29.0 + 10.000 0.000 0.000 30.0 [...] ``` diff --git a/bin/mkgrid b/bin/mkgrid index 6390124b0133e99ef888ed9807e83f294e1dfa31..745675e9e8758456184c38e908e5d6180c550f83 100755 --- a/bin/mkgrid +++ b/bin/mkgrid @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # # Created: Mon 2024-07-15 18:40:27 CEST (boljen) -# Modified: So 2024-07-21 12:10:54 CEST (boljen) +# Modified: Tue 2024-08-06 20:17:12 CEST (boljen) # # mkgrid: # Convert scattered data to regular gridded data in 2D, 3D and 4D @@ -42,14 +42,15 @@ def execute_main(): description='Convert scattered data to regular gridded data in 2D, 3D and 4D') # Add options - parser.add_argument('-i', '--infile', help='Input filename', type=str, required=True) - parser.add_argument('-m', '--method', help='Interpolation method', type=str, default='linear', choices=method.keys()) - parser.add_argument('-p', '--plot', help='Plot filename', nargs='?', const='***', type=str, default=None) - parser.add_argument('-u', '--usecols', help='Comma-separated list of data columns to use from input file', type=str, default=None) - parser.add_argument('-r', '--range', help='Comma-separated list of range specifiers for output', type=str, default=None) - parser.add_argument('-s', '--steps', help='Comma-separated list of discretization steps', type=str, default=None) - parser.add_argument('-y', '--yes', help='Overwrite existing output file', default=False, action=argparse.BooleanOptionalAction) - parser.add_argument('outfile', help='Output filename', nargs='?', type=str, default=sys.stdout.buffer) + parser.add_argument('-i', '--infile', help='Input filename', type=str, required=True) + parser.add_argument('-m', '--method', help='Interpolation method', type=str, default='linear', choices=method.keys()) + parser.add_argument('-p', '--plot', help='Plot filename', nargs='?', const='***', type=str, default=None) + parser.add_argument('-u', '--usecols', help='Comma-separated list of data columns to use from input file', type=str, default=None) + parser.add_argument('-r', '--range', help='Comma-separated list of range specifiers for output', type=str, default=None) + parser.add_argument('-s', '--steps', help='Comma-separated list of discretization steps', type=str, default=None) + parser.add_argument('-w', '--widths', help='Comma-separated list of column widths', type=str, default=None) + parser.add_argument('-y', '--yes', help='Overwrite existing output file', default=False, action=argparse.BooleanOptionalAction) + parser.add_argument('outfile', help='Output filename', nargs='?', type=str, default=sys.stdout.buffer) # Parse options args = parser.parse_args() @@ -58,14 +59,33 @@ def execute_main(): if args.outfile != sys.stdout.buffer and os.path.exists(args.outfile) and not args.yes: raise ValueError("File {:s} exists".format(args.outfile)) - # Read input file - df = pd.read_fwf(args.infile) + if args.widths is None: + + # Initialize list + widths = None + + else: + + # Split widths string in list of comma-seperated tokens + widths = [ x.strip() for x in args.widths.split(',') ] + + # Loop over tokens + for i,x in enumerate(widths): + + # Assert boundary values are floating-point data + try: + widths[i] = int(x) + except: + raise ValueError('Invalid token {:s} in widths list'.format(x)) + + # Read from input file + df = pd.read_fwf(args.infile, widths=widths, comment="#", skip_empty_rows=True) data = df.to_dict('list') # Initialize column list usecols = None - # Parse --usecols + # Parse usecols argument if args.usecols is None: # Use all available columns unless otherwise defined @@ -75,6 +95,7 @@ def execute_main(): # Use columns specified by comma-separated list only usecols = [ x.strip() for x in args.usecols.split(',') ] + # Convert strings to integers for i,x in enumerate(usecols): try: @@ -99,7 +120,7 @@ def execute_main(): # Initialize range lists myrange = [] - # Parse --range + # Parse range argument if args.range is not None: # Split comma-separated list of values @@ -154,8 +175,12 @@ def execute_main(): except: raise ValueError('Invalid token {:s} in steps list'.format(x)) - # Initialize labels list + # Initialize labels and formats list label = [] + fmtlist = [] + + # Assemble header + headstr = '' # Loop over columns for i,x in enumerate(usecols): @@ -163,6 +188,20 @@ def execute_main(): # Assign column label label.append(df.columns[usecols[i]]) + # Auto-determine column width + width = max(len(label[-1]),12) + if widths is not None and widths[usecols[i]] > width: + width = widths[usecols[i]] + + # Set format string + fmtstr = '%{:d}.{:d}f'.format(width,width-6) + fmtlist.append(fmtstr) + + # Set header + if headstr != '': headstr += ' ' + fmtstr = '{:>' + '{:d}s'.format(width) + '}' + headstr += fmtstr.format(df.columns[usecols[i]]) + # Auto-detect array value if i >= len(steps): # Apply default or last element value @@ -254,14 +293,8 @@ def execute_main(): for i,j,k,l in np.nditer([xi,yi,zi,ci]): xout.append([i,j,k,l]) - # Assemble header - headstr = '' - for i in label: - if headstr != '': headstr += ' ' - headstr += '{:>16s}'.format(i) - # Save regular gridded data to output file - np.savetxt(args.outfile, xout, header=headstr, comments='', fmt='%16.7f') + np.savetxt(args.outfile, xout, header=headstr, comments='', fmt=fmtlist) # ================= # Create plot diff --git a/test/Makefile b/test/Makefile index bd2de87c54944c76e8d6d9578c366462f9ed203b..370e1345405f092ef87a2ed1f42f19469ae2caed 100644 --- a/test/Makefile +++ b/test/Makefile @@ -5,13 +5,13 @@ OUTFILES = $(addsuffix .out, testdata2 testdata3 testdata4) default: $(OUTFILES) testdata2.out: testdata2.csv - $(MKGRID) -y -i $< -p $(subst .csv,.png,$<) -s 15 -r 0:0.15 -m cubic $@ + $(MKGRID) -y -i $< -p $(subst .csv,.png,$<) -s 15 -r 0:0.15 -m cubic -w 12,12 $@ testdata3.out: testdata3.csv - $(MKGRID) -y -i $< -p $(subst .csv,.png,$<) -s 13 -r 0:0.13,0:0.13 $@ + $(MKGRID) -y -i $< -p $(subst .csv,.png,$<) -s 13 -r 0:0.13,0:0.13 -w 12,12,12 $@ testdata4.out: testdata4.csv - $(MKGRID) -y -i $< -p $(subst .csv,.png,$<) -s 10 -u 4,5,6,7 $@ + $(MKGRID) -y -i $< -p $(subst .csv,.png,$<) -s 10 -u 4,5,6,7 -w 10,10,10,10,10,10,10 $@ clean: $(RM) $(OUTFILES) $(subst .out,.png,$(OUTFILES)) diff --git a/test/testdata2.csv b/test/testdata2.csv index 774c0d3e96ae85bab31a292923ad289494fc4fd4..c757038236c94d4a45d6bbc3e4628c4aca860e64 100644 --- a/test/testdata2.csv +++ b/test/testdata2.csv @@ -1,10 +1,10 @@ - x y - 0.005 0.615 - 0.014 2.935 - 0.019 4.712 - 0.038 13.814 - 0.064 24.658 - 0.076 29.594 - 0.095 39.155 - 0.125 59.091 - 0.145 77.677 + x y + 0.005 0.615 + 0.014 2.935 + 0.019 4.712 + 0.038 13.814 + 0.064 24.658 + 0.076 29.594 + 0.095 39.155 + 0.125 59.091 + 0.145 77.677 diff --git a/test/testdata3.csv b/test/testdata3.csv index cb7b804a438049f3b256c3023bb109fc97fef081..0765956d9b42773f305b2fa981ae729f889162b0 100644 --- a/test/testdata3.csv +++ b/test/testdata3.csv @@ -1,31 +1,31 @@ - x y z - 0.000 0.000 0.000 - 0.019 0.000 4.712 - 0.042 0.000 15.976 - 0.092 0.000 37.076 - 0.109 0.000 47.519 - 0.136 0.000 68.049 - 0.009 0.001 2.413 - 0.026 0.005 11.605 - 0.094 0.032 43.647 - 0.106 0.037 51.925 - 0.134 0.052 76.073 - 0.004 0.004 2.127 - 0.025 0.026 17.043 - 0.059 0.061 30.732 - 0.093 0.095 52.012 - 0.102 0.103 59.315 - 0.113 0.113 68.501 - 0.132 0.132 87.946 - 0.003 0.009 2.752 - 0.007 0.021 8.035 - 0.011 0.033 12.049 - 0.022 0.066 18.954 - 0.040 0.109 27.913 - 0.046 0.122 31.549 - 0.052 0.132 34.542 - 0.000 0.023 5.569 - 0.000 0.072 11.650 - 0.000 0.091 13.370 - 0.000 0.115 15.056 - 0.000 0.134 16.302 + x y z + 0.000 0.000 0.000 + 0.019 0.000 4.712 + 0.042 0.000 15.976 + 0.092 0.000 37.076 + 0.109 0.000 47.519 + 0.136 0.000 68.049 + 0.009 0.001 2.413 + 0.026 0.005 11.605 + 0.094 0.032 43.647 + 0.106 0.037 51.925 + 0.134 0.052 76.073 + 0.004 0.004 2.127 + 0.025 0.026 17.043 + 0.059 0.061 30.732 + 0.093 0.095 52.012 + 0.102 0.103 59.315 + 0.113 0.113 68.501 + 0.132 0.132 87.946 + 0.003 0.009 2.752 + 0.007 0.021 8.035 + 0.011 0.033 12.049 + 0.022 0.066 18.954 + 0.040 0.109 27.913 + 0.046 0.122 31.549 + 0.052 0.132 34.542 + 0.000 0.023 5.569 + 0.000 0.072 11.650 + 0.000 0.091 13.370 + 0.000 0.115 15.056 + 0.000 0.134 16.302 diff --git a/test/testdata4.csv b/test/testdata4.csv index 17edfff559a3dca1846493136f3c7f380a7eebab..a4a8bf5513ce740ccaaed73ae9895fe074e81879 100644 --- a/test/testdata4.csv +++ b/test/testdata4.csv @@ -1,290 +1,290 @@ - r theta phi x y z T - 10.0 0.0 0.0 0.000 0.000 10.000 0.0 - 10.0 15.0 0.0 2.588 0.000 9.659 7.8 - 10.0 30.0 0.0 5.000 0.000 8.660 15.0 - 10.0 45.0 0.0 7.071 0.000 7.071 21.2 - 10.0 60.0 0.0 8.660 0.000 5.000 26.0 - 10.0 75.0 0.0 9.659 0.000 2.588 29.0 - 10.0 90.0 0.0 10.000 0.000 0.000 30.0 - 10.0 105.0 0.0 9.659 0.000 -2.588 29.0 - 10.0 120.0 0.0 8.660 0.000 -5.000 26.0 - 10.0 135.0 0.0 7.071 0.000 -7.071 21.2 - 10.0 150.0 0.0 5.000 0.000 -8.660 15.0 - 10.0 165.0 0.0 2.588 0.000 -9.659 7.8 - 10.0 180.0 0.0 0.000 0.000 -10.000 0.0 + r theta phi x y z T + 10.0 0.0 0.0 0.000 0.000 10.000 0.0 + 10.0 15.0 0.0 2.588 0.000 9.659 7.8 + 10.0 30.0 0.0 5.000 0.000 8.660 15.0 + 10.0 45.0 0.0 7.071 0.000 7.071 21.2 + 10.0 60.0 0.0 8.660 0.000 5.000 26.0 + 10.0 75.0 0.0 9.659 0.000 2.588 29.0 + 10.0 90.0 0.0 10.000 0.000 0.000 30.0 + 10.0 105.0 0.0 9.659 0.000 -2.588 29.0 + 10.0 120.0 0.0 8.660 0.000 -5.000 26.0 + 10.0 135.0 0.0 7.071 0.000 -7.071 21.2 + 10.0 150.0 0.0 5.000 0.000 -8.660 15.0 + 10.0 165.0 0.0 2.588 0.000 -9.659 7.8 + 10.0 180.0 0.0 0.000 0.000 -10.000 0.0 - 10.0 15.0 15.0 2.500 0.670 9.659 7.8 - 10.0 30.0 15.0 4.830 1.294 8.660 15.0 - 10.0 45.0 15.0 6.830 1.830 7.071 21.2 - 10.0 60.0 15.0 8.365 2.241 5.000 26.0 - 10.0 75.0 15.0 9.330 2.500 2.588 29.0 - 10.0 90.0 15.0 9.659 2.588 0.000 30.0 - 10.0 105.0 15.0 9.330 2.500 -2.588 29.0 - 10.0 120.0 15.0 8.365 2.241 -5.000 26.0 - 10.0 135.0 15.0 6.830 1.830 -7.071 21.2 - 10.0 150.0 15.0 4.830 1.294 -8.660 15.0 - 10.0 165.0 15.0 2.500 0.670 -9.659 7.8 + 10.0 15.0 15.0 2.500 0.670 9.659 7.8 + 10.0 30.0 15.0 4.830 1.294 8.660 15.0 + 10.0 45.0 15.0 6.830 1.830 7.071 21.2 + 10.0 60.0 15.0 8.365 2.241 5.000 26.0 + 10.0 75.0 15.0 9.330 2.500 2.588 29.0 + 10.0 90.0 15.0 9.659 2.588 0.000 30.0 + 10.0 105.0 15.0 9.330 2.500 -2.588 29.0 + 10.0 120.0 15.0 8.365 2.241 -5.000 26.0 + 10.0 135.0 15.0 6.830 1.830 -7.071 21.2 + 10.0 150.0 15.0 4.830 1.294 -8.660 15.0 + 10.0 165.0 15.0 2.500 0.670 -9.659 7.8 - 10.0 15.0 30.0 2.241 1.294 9.659 7.8 - 10.0 30.0 30.0 4.330 2.500 8.660 15.0 - 10.0 45.0 30.0 6.124 3.536 7.071 21.2 - 10.0 60.0 30.0 7.500 4.330 5.000 26.0 - 10.0 75.0 30.0 8.365 4.830 2.588 29.0 - 10.0 90.0 30.0 8.660 5.000 0.000 30.0 - 10.0 105.0 30.0 8.365 4.830 -2.588 29.0 - 10.0 120.0 30.0 7.500 4.330 -5.000 26.0 - 10.0 135.0 30.0 6.124 3.536 -7.071 21.2 - 10.0 150.0 30.0 4.330 2.500 -8.660 15.0 - 10.0 165.0 30.0 2.241 1.294 -9.659 7.8 + 10.0 15.0 30.0 2.241 1.294 9.659 7.8 + 10.0 30.0 30.0 4.330 2.500 8.660 15.0 + 10.0 45.0 30.0 6.124 3.536 7.071 21.2 + 10.0 60.0 30.0 7.500 4.330 5.000 26.0 + 10.0 75.0 30.0 8.365 4.830 2.588 29.0 + 10.0 90.0 30.0 8.660 5.000 0.000 30.0 + 10.0 105.0 30.0 8.365 4.830 -2.588 29.0 + 10.0 120.0 30.0 7.500 4.330 -5.000 26.0 + 10.0 135.0 30.0 6.124 3.536 -7.071 21.2 + 10.0 150.0 30.0 4.330 2.500 -8.660 15.0 + 10.0 165.0 30.0 2.241 1.294 -9.659 7.8 - 10.0 15.0 45.0 1.830 1.830 9.659 7.8 - 10.0 30.0 45.0 3.536 3.536 8.660 15.0 - 10.0 45.0 45.0 5.000 5.000 7.071 21.2 - 10.0 60.0 45.0 6.124 6.124 5.000 26.0 - 10.0 75.0 45.0 6.830 6.830 2.588 29.0 - 10.0 90.0 45.0 7.071 7.071 0.000 30.0 - 10.0 105.0 45.0 6.830 6.830 -2.588 29.0 - 10.0 120.0 45.0 6.124 6.124 -5.000 26.0 - 10.0 135.0 45.0 5.000 5.000 -7.071 21.2 - 10.0 150.0 45.0 3.536 3.536 -8.660 15.0 - 10.0 165.0 45.0 1.830 1.830 -9.659 7.8 + 10.0 15.0 45.0 1.830 1.830 9.659 7.8 + 10.0 30.0 45.0 3.536 3.536 8.660 15.0 + 10.0 45.0 45.0 5.000 5.000 7.071 21.2 + 10.0 60.0 45.0 6.124 6.124 5.000 26.0 + 10.0 75.0 45.0 6.830 6.830 2.588 29.0 + 10.0 90.0 45.0 7.071 7.071 0.000 30.0 + 10.0 105.0 45.0 6.830 6.830 -2.588 29.0 + 10.0 120.0 45.0 6.124 6.124 -5.000 26.0 + 10.0 135.0 45.0 5.000 5.000 -7.071 21.2 + 10.0 150.0 45.0 3.536 3.536 -8.660 15.0 + 10.0 165.0 45.0 1.830 1.830 -9.659 7.8 - 10.0 15.0 60.0 1.294 2.241 9.659 7.8 - 10.0 30.0 60.0 2.500 4.330 8.660 15.0 - 10.0 45.0 60.0 3.536 6.124 7.071 21.2 - 10.0 60.0 60.0 4.330 7.500 5.000 26.0 - 10.0 75.0 60.0 4.830 8.365 2.588 29.0 - 10.0 90.0 60.0 5.000 8.660 0.000 30.0 - 10.0 105.0 60.0 4.830 8.365 -2.588 29.0 - 10.0 120.0 60.0 4.330 7.500 -5.000 26.0 - 10.0 135.0 60.0 3.536 6.124 -7.071 21.2 - 10.0 150.0 60.0 2.500 4.330 -8.660 15.0 - 10.0 165.0 60.0 1.294 2.241 -9.659 7.8 + 10.0 15.0 60.0 1.294 2.241 9.659 7.8 + 10.0 30.0 60.0 2.500 4.330 8.660 15.0 + 10.0 45.0 60.0 3.536 6.124 7.071 21.2 + 10.0 60.0 60.0 4.330 7.500 5.000 26.0 + 10.0 75.0 60.0 4.830 8.365 2.588 29.0 + 10.0 90.0 60.0 5.000 8.660 0.000 30.0 + 10.0 105.0 60.0 4.830 8.365 -2.588 29.0 + 10.0 120.0 60.0 4.330 7.500 -5.000 26.0 + 10.0 135.0 60.0 3.536 6.124 -7.071 21.2 + 10.0 150.0 60.0 2.500 4.330 -8.660 15.0 + 10.0 165.0 60.0 1.294 2.241 -9.659 7.8 - 10.0 15.0 75.0 0.670 2.500 9.659 7.8 - 10.0 30.0 75.0 1.294 4.830 8.660 15.0 - 10.0 45.0 75.0 1.830 6.830 7.071 21.2 - 10.0 60.0 75.0 2.241 8.365 5.000 26.0 - 10.0 75.0 75.0 2.500 9.330 2.588 29.0 - 10.0 90.0 75.0 2.588 9.659 0.000 30.0 - 10.0 105.0 75.0 2.500 9.330 -2.588 29.0 - 10.0 120.0 75.0 2.241 8.365 -5.000 26.0 - 10.0 135.0 75.0 1.830 6.830 -7.071 21.2 - 10.0 150.0 75.0 1.294 4.830 -8.660 15.0 - 10.0 165.0 75.0 0.670 2.500 -9.659 7.8 + 10.0 15.0 75.0 0.670 2.500 9.659 7.8 + 10.0 30.0 75.0 1.294 4.830 8.660 15.0 + 10.0 45.0 75.0 1.830 6.830 7.071 21.2 + 10.0 60.0 75.0 2.241 8.365 5.000 26.0 + 10.0 75.0 75.0 2.500 9.330 2.588 29.0 + 10.0 90.0 75.0 2.588 9.659 0.000 30.0 + 10.0 105.0 75.0 2.500 9.330 -2.588 29.0 + 10.0 120.0 75.0 2.241 8.365 -5.000 26.0 + 10.0 135.0 75.0 1.830 6.830 -7.071 21.2 + 10.0 150.0 75.0 1.294 4.830 -8.660 15.0 + 10.0 165.0 75.0 0.670 2.500 -9.659 7.8 - 10.0 15.0 90.0 0.000 2.588 9.659 7.8 - 10.0 30.0 90.0 0.000 5.000 8.660 15.0 - 10.0 45.0 90.0 0.000 7.071 7.071 21.2 - 10.0 60.0 90.0 0.000 8.660 5.000 26.0 - 10.0 75.0 90.0 0.000 9.659 2.588 29.0 - 10.0 90.0 90.0 0.000 10.000 0.000 30.0 - 10.0 105.0 90.0 0.000 9.659 -2.588 29.0 - 10.0 120.0 90.0 0.000 8.660 -5.000 26.0 - 10.0 135.0 90.0 0.000 7.071 -7.071 21.2 - 10.0 150.0 90.0 0.000 5.000 -8.660 15.0 - 10.0 165.0 90.0 0.000 2.588 -9.659 7.8 + 10.0 15.0 90.0 0.000 2.588 9.659 7.8 + 10.0 30.0 90.0 0.000 5.000 8.660 15.0 + 10.0 45.0 90.0 0.000 7.071 7.071 21.2 + 10.0 60.0 90.0 0.000 8.660 5.000 26.0 + 10.0 75.0 90.0 0.000 9.659 2.588 29.0 + 10.0 90.0 90.0 0.000 10.000 0.000 30.0 + 10.0 105.0 90.0 0.000 9.659 -2.588 29.0 + 10.0 120.0 90.0 0.000 8.660 -5.000 26.0 + 10.0 135.0 90.0 0.000 7.071 -7.071 21.2 + 10.0 150.0 90.0 0.000 5.000 -8.660 15.0 + 10.0 165.0 90.0 0.000 2.588 -9.659 7.8 - 10.0 15.0 105.0 -0.670 2.500 9.659 7.8 - 10.0 30.0 105.0 -1.294 4.830 8.660 15.0 - 10.0 45.0 105.0 -1.830 6.830 7.071 21.2 - 10.0 60.0 105.0 -2.241 8.365 5.000 26.0 - 10.0 75.0 105.0 -2.500 9.330 2.588 29.0 - 10.0 90.0 105.0 -2.588 9.659 0.000 30.0 - 10.0 105.0 105.0 -2.500 9.330 -2.588 29.0 - 10.0 120.0 105.0 -2.241 8.365 -5.000 26.0 - 10.0 135.0 105.0 -1.830 6.830 -7.071 21.2 - 10.0 150.0 105.0 -1.294 4.830 -8.660 15.0 - 10.0 165.0 105.0 -0.670 2.500 -9.659 7.8 + 10.0 15.0 105.0 -0.670 2.500 9.659 7.8 + 10.0 30.0 105.0 -1.294 4.830 8.660 15.0 + 10.0 45.0 105.0 -1.830 6.830 7.071 21.2 + 10.0 60.0 105.0 -2.241 8.365 5.000 26.0 + 10.0 75.0 105.0 -2.500 9.330 2.588 29.0 + 10.0 90.0 105.0 -2.588 9.659 0.000 30.0 + 10.0 105.0 105.0 -2.500 9.330 -2.588 29.0 + 10.0 120.0 105.0 -2.241 8.365 -5.000 26.0 + 10.0 135.0 105.0 -1.830 6.830 -7.071 21.2 + 10.0 150.0 105.0 -1.294 4.830 -8.660 15.0 + 10.0 165.0 105.0 -0.670 2.500 -9.659 7.8 - 10.0 15.0 120.0 -1.294 2.241 9.659 7.8 - 10.0 30.0 120.0 -2.500 4.330 8.660 15.0 - 10.0 45.0 120.0 -3.536 6.124 7.071 21.2 - 10.0 60.0 120.0 -4.330 7.500 5.000 26.0 - 10.0 75.0 120.0 -4.830 8.365 2.588 29.0 - 10.0 90.0 120.0 -5.000 8.660 0.000 30.0 - 10.0 105.0 120.0 -4.830 8.365 -2.588 29.0 - 10.0 120.0 120.0 -4.330 7.500 -5.000 26.0 - 10.0 135.0 120.0 -3.536 6.124 -7.071 21.2 - 10.0 150.0 120.0 -2.500 4.330 -8.660 15.0 - 10.0 165.0 120.0 -1.294 2.241 -9.659 7.8 + 10.0 15.0 120.0 -1.294 2.241 9.659 7.8 + 10.0 30.0 120.0 -2.500 4.330 8.660 15.0 + 10.0 45.0 120.0 -3.536 6.124 7.071 21.2 + 10.0 60.0 120.0 -4.330 7.500 5.000 26.0 + 10.0 75.0 120.0 -4.830 8.365 2.588 29.0 + 10.0 90.0 120.0 -5.000 8.660 0.000 30.0 + 10.0 105.0 120.0 -4.830 8.365 -2.588 29.0 + 10.0 120.0 120.0 -4.330 7.500 -5.000 26.0 + 10.0 135.0 120.0 -3.536 6.124 -7.071 21.2 + 10.0 150.0 120.0 -2.500 4.330 -8.660 15.0 + 10.0 165.0 120.0 -1.294 2.241 -9.659 7.8 - 10.0 15.0 135.0 -1.830 1.830 9.659 7.8 - 10.0 30.0 135.0 -3.536 3.536 8.660 15.0 - 10.0 45.0 135.0 -5.000 5.000 7.071 21.2 - 10.0 60.0 135.0 -6.124 6.124 5.000 26.0 - 10.0 75.0 135.0 -6.830 6.830 2.588 29.0 - 10.0 90.0 135.0 -7.071 7.071 0.000 30.0 - 10.0 105.0 135.0 -6.830 6.830 -2.588 29.0 - 10.0 120.0 135.0 -6.124 6.124 -5.000 26.0 - 10.0 135.0 135.0 -5.000 5.000 -7.071 21.2 - 10.0 150.0 135.0 -3.536 3.536 -8.660 15.0 - 10.0 165.0 135.0 -1.830 1.830 -9.659 7.8 + 10.0 15.0 135.0 -1.830 1.830 9.659 7.8 + 10.0 30.0 135.0 -3.536 3.536 8.660 15.0 + 10.0 45.0 135.0 -5.000 5.000 7.071 21.2 + 10.0 60.0 135.0 -6.124 6.124 5.000 26.0 + 10.0 75.0 135.0 -6.830 6.830 2.588 29.0 + 10.0 90.0 135.0 -7.071 7.071 0.000 30.0 + 10.0 105.0 135.0 -6.830 6.830 -2.588 29.0 + 10.0 120.0 135.0 -6.124 6.124 -5.000 26.0 + 10.0 135.0 135.0 -5.000 5.000 -7.071 21.2 + 10.0 150.0 135.0 -3.536 3.536 -8.660 15.0 + 10.0 165.0 135.0 -1.830 1.830 -9.659 7.8 - 10.0 15.0 150.0 -2.241 1.294 9.659 7.8 - 10.0 30.0 150.0 -4.330 2.500 8.660 15.0 - 10.0 45.0 150.0 -6.124 3.536 7.071 21.2 - 10.0 60.0 150.0 -7.500 4.330 5.000 26.0 - 10.0 75.0 150.0 -8.365 4.830 2.588 29.0 - 10.0 90.0 150.0 -8.660 5.000 0.000 30.0 - 10.0 105.0 150.0 -8.365 4.830 -2.588 29.0 - 10.0 120.0 150.0 -7.500 4.330 -5.000 26.0 - 10.0 135.0 150.0 -6.124 3.536 -7.071 21.2 - 10.0 150.0 150.0 -4.330 2.500 -8.660 15.0 - 10.0 165.0 150.0 -2.241 1.294 -9.659 7.8 + 10.0 15.0 150.0 -2.241 1.294 9.659 7.8 + 10.0 30.0 150.0 -4.330 2.500 8.660 15.0 + 10.0 45.0 150.0 -6.124 3.536 7.071 21.2 + 10.0 60.0 150.0 -7.500 4.330 5.000 26.0 + 10.0 75.0 150.0 -8.365 4.830 2.588 29.0 + 10.0 90.0 150.0 -8.660 5.000 0.000 30.0 + 10.0 105.0 150.0 -8.365 4.830 -2.588 29.0 + 10.0 120.0 150.0 -7.500 4.330 -5.000 26.0 + 10.0 135.0 150.0 -6.124 3.536 -7.071 21.2 + 10.0 150.0 150.0 -4.330 2.500 -8.660 15.0 + 10.0 165.0 150.0 -2.241 1.294 -9.659 7.8 - 10.0 15.0 165.0 -2.500 0.670 9.659 7.8 - 10.0 30.0 165.0 -4.830 1.294 8.660 15.0 - 10.0 45.0 165.0 -6.830 1.830 7.071 21.2 - 10.0 60.0 165.0 -8.365 2.241 5.000 26.0 - 10.0 75.0 165.0 -9.330 2.500 2.588 29.0 - 10.0 90.0 165.0 -9.659 2.588 0.000 30.0 - 10.0 105.0 165.0 -9.330 2.500 -2.588 29.0 - 10.0 120.0 165.0 -8.365 2.241 -5.000 26.0 - 10.0 135.0 165.0 -6.830 1.830 -7.071 21.2 - 10.0 150.0 165.0 -4.830 1.294 -8.660 15.0 - 10.0 165.0 165.0 -2.500 0.670 -9.659 7.8 + 10.0 15.0 165.0 -2.500 0.670 9.659 7.8 + 10.0 30.0 165.0 -4.830 1.294 8.660 15.0 + 10.0 45.0 165.0 -6.830 1.830 7.071 21.2 + 10.0 60.0 165.0 -8.365 2.241 5.000 26.0 + 10.0 75.0 165.0 -9.330 2.500 2.588 29.0 + 10.0 90.0 165.0 -9.659 2.588 0.000 30.0 + 10.0 105.0 165.0 -9.330 2.500 -2.588 29.0 + 10.0 120.0 165.0 -8.365 2.241 -5.000 26.0 + 10.0 135.0 165.0 -6.830 1.830 -7.071 21.2 + 10.0 150.0 165.0 -4.830 1.294 -8.660 15.0 + 10.0 165.0 165.0 -2.500 0.670 -9.659 7.8 - 10.0 15.0 180.0 -2.588 0.000 9.659 7.8 - 10.0 30.0 180.0 -5.000 0.000 8.660 15.0 - 10.0 45.0 180.0 -7.071 0.000 7.071 21.2 - 10.0 60.0 180.0 -8.660 0.000 5.000 26.0 - 10.0 75.0 180.0 -9.659 0.000 2.588 29.0 - 10.0 90.0 180.0 -10.000 0.000 0.000 30.0 - 10.0 105.0 180.0 -9.659 0.000 -2.588 29.0 - 10.0 120.0 180.0 -8.660 0.000 -5.000 26.0 - 10.0 135.0 180.0 -7.071 0.000 -7.071 21.2 - 10.0 150.0 180.0 -5.000 0.000 -8.660 15.0 - 10.0 165.0 180.0 -2.588 0.000 -9.659 7.8 + 10.0 15.0 180.0 -2.588 0.000 9.659 7.8 + 10.0 30.0 180.0 -5.000 0.000 8.660 15.0 + 10.0 45.0 180.0 -7.071 0.000 7.071 21.2 + 10.0 60.0 180.0 -8.660 0.000 5.000 26.0 + 10.0 75.0 180.0 -9.659 0.000 2.588 29.0 + 10.0 90.0 180.0 -10.000 0.000 0.000 30.0 + 10.0 105.0 180.0 -9.659 0.000 -2.588 29.0 + 10.0 120.0 180.0 -8.660 0.000 -5.000 26.0 + 10.0 135.0 180.0 -7.071 0.000 -7.071 21.2 + 10.0 150.0 180.0 -5.000 0.000 -8.660 15.0 + 10.0 165.0 180.0 -2.588 0.000 -9.659 7.8 - 10.0 15.0 195.0 -2.500 -0.670 9.659 7.8 - 10.0 30.0 195.0 -4.830 -1.294 8.660 15.0 - 10.0 45.0 195.0 -6.830 -1.830 7.071 21.2 - 10.0 60.0 195.0 -8.365 -2.241 5.000 26.0 - 10.0 75.0 195.0 -9.330 -2.500 2.588 29.0 - 10.0 90.0 195.0 -9.659 -2.588 0.000 30.0 - 10.0 105.0 195.0 -9.330 -2.500 -2.588 29.0 - 10.0 120.0 195.0 -8.365 -2.241 -5.000 26.0 - 10.0 135.0 195.0 -6.830 -1.830 -7.071 21.2 - 10.0 150.0 195.0 -4.830 -1.294 -8.660 15.0 - 10.0 165.0 195.0 -2.500 -0.670 -9.659 7.8 + 10.0 15.0 195.0 -2.500 -0.670 9.659 7.8 + 10.0 30.0 195.0 -4.830 -1.294 8.660 15.0 + 10.0 45.0 195.0 -6.830 -1.830 7.071 21.2 + 10.0 60.0 195.0 -8.365 -2.241 5.000 26.0 + 10.0 75.0 195.0 -9.330 -2.500 2.588 29.0 + 10.0 90.0 195.0 -9.659 -2.588 0.000 30.0 + 10.0 105.0 195.0 -9.330 -2.500 -2.588 29.0 + 10.0 120.0 195.0 -8.365 -2.241 -5.000 26.0 + 10.0 135.0 195.0 -6.830 -1.830 -7.071 21.2 + 10.0 150.0 195.0 -4.830 -1.294 -8.660 15.0 + 10.0 165.0 195.0 -2.500 -0.670 -9.659 7.8 - 10.0 15.0 210.0 -2.241 -1.294 9.659 7.8 - 10.0 30.0 210.0 -4.330 -2.500 8.660 15.0 - 10.0 45.0 210.0 -6.124 -3.536 7.071 21.2 - 10.0 60.0 210.0 -7.500 -4.330 5.000 26.0 - 10.0 75.0 210.0 -8.365 -4.830 2.588 29.0 - 10.0 90.0 210.0 -8.660 -5.000 0.000 30.0 - 10.0 105.0 210.0 -8.365 -4.830 -2.588 29.0 - 10.0 120.0 210.0 -7.500 -4.330 -5.000 26.0 - 10.0 135.0 210.0 -6.124 -3.536 -7.071 21.2 - 10.0 150.0 210.0 -4.330 -2.500 -8.660 15.0 - 10.0 165.0 210.0 -2.241 -1.294 -9.659 7.8 + 10.0 15.0 210.0 -2.241 -1.294 9.659 7.8 + 10.0 30.0 210.0 -4.330 -2.500 8.660 15.0 + 10.0 45.0 210.0 -6.124 -3.536 7.071 21.2 + 10.0 60.0 210.0 -7.500 -4.330 5.000 26.0 + 10.0 75.0 210.0 -8.365 -4.830 2.588 29.0 + 10.0 90.0 210.0 -8.660 -5.000 0.000 30.0 + 10.0 105.0 210.0 -8.365 -4.830 -2.588 29.0 + 10.0 120.0 210.0 -7.500 -4.330 -5.000 26.0 + 10.0 135.0 210.0 -6.124 -3.536 -7.071 21.2 + 10.0 150.0 210.0 -4.330 -2.500 -8.660 15.0 + 10.0 165.0 210.0 -2.241 -1.294 -9.659 7.8 - 10.0 15.0 225.0 -1.830 -1.830 9.659 7.8 - 10.0 30.0 225.0 -3.536 -3.536 8.660 15.0 - 10.0 45.0 225.0 -5.000 -5.000 7.071 21.2 - 10.0 60.0 225.0 -6.124 -6.124 5.000 26.0 - 10.0 75.0 225.0 -6.830 -6.830 2.588 29.0 - 10.0 90.0 225.0 -7.071 -7.071 0.000 30.0 - 10.0 105.0 225.0 -6.830 -6.830 -2.588 29.0 - 10.0 120.0 225.0 -6.124 -6.124 -5.000 26.0 - 10.0 135.0 225.0 -5.000 -5.000 -7.071 21.2 - 10.0 150.0 225.0 -3.536 -3.536 -8.660 15.0 - 10.0 165.0 225.0 -1.830 -1.830 -9.659 7.8 + 10.0 15.0 225.0 -1.830 -1.830 9.659 7.8 + 10.0 30.0 225.0 -3.536 -3.536 8.660 15.0 + 10.0 45.0 225.0 -5.000 -5.000 7.071 21.2 + 10.0 60.0 225.0 -6.124 -6.124 5.000 26.0 + 10.0 75.0 225.0 -6.830 -6.830 2.588 29.0 + 10.0 90.0 225.0 -7.071 -7.071 0.000 30.0 + 10.0 105.0 225.0 -6.830 -6.830 -2.588 29.0 + 10.0 120.0 225.0 -6.124 -6.124 -5.000 26.0 + 10.0 135.0 225.0 -5.000 -5.000 -7.071 21.2 + 10.0 150.0 225.0 -3.536 -3.536 -8.660 15.0 + 10.0 165.0 225.0 -1.830 -1.830 -9.659 7.8 - 10.0 15.0 240.0 -1.294 -2.241 9.659 7.8 - 10.0 30.0 240.0 -2.500 -4.330 8.660 15.0 - 10.0 45.0 240.0 -3.536 -6.124 7.071 21.2 - 10.0 60.0 240.0 -4.330 -7.500 5.000 26.0 - 10.0 75.0 240.0 -4.830 -8.365 2.588 29.0 - 10.0 90.0 240.0 -5.000 -8.660 0.000 30.0 - 10.0 105.0 240.0 -4.830 -8.365 -2.588 29.0 - 10.0 120.0 240.0 -4.330 -7.500 -5.000 26.0 - 10.0 135.0 240.0 -3.536 -6.124 -7.071 21.2 - 10.0 150.0 240.0 -2.500 -4.330 -8.660 15.0 - 10.0 165.0 240.0 -1.294 -2.241 -9.659 7.8 + 10.0 15.0 240.0 -1.294 -2.241 9.659 7.8 + 10.0 30.0 240.0 -2.500 -4.330 8.660 15.0 + 10.0 45.0 240.0 -3.536 -6.124 7.071 21.2 + 10.0 60.0 240.0 -4.330 -7.500 5.000 26.0 + 10.0 75.0 240.0 -4.830 -8.365 2.588 29.0 + 10.0 90.0 240.0 -5.000 -8.660 0.000 30.0 + 10.0 105.0 240.0 -4.830 -8.365 -2.588 29.0 + 10.0 120.0 240.0 -4.330 -7.500 -5.000 26.0 + 10.0 135.0 240.0 -3.536 -6.124 -7.071 21.2 + 10.0 150.0 240.0 -2.500 -4.330 -8.660 15.0 + 10.0 165.0 240.0 -1.294 -2.241 -9.659 7.8 - 10.0 15.0 255.0 -0.670 -2.500 9.659 7.8 - 10.0 30.0 255.0 -1.294 -4.830 8.660 15.0 - 10.0 45.0 255.0 -1.830 -6.830 7.071 21.2 - 10.0 60.0 255.0 -2.241 -8.365 5.000 26.0 - 10.0 75.0 255.0 -2.500 -9.330 2.588 29.0 - 10.0 90.0 255.0 -2.588 -9.659 0.000 30.0 - 10.0 105.0 255.0 -2.500 -9.330 -2.588 29.0 - 10.0 120.0 255.0 -2.241 -8.365 -5.000 26.0 - 10.0 135.0 255.0 -1.830 -6.830 -7.071 21.2 - 10.0 150.0 255.0 -1.294 -4.830 -8.660 15.0 - 10.0 165.0 255.0 -0.670 -2.500 -9.659 7.8 + 10.0 15.0 255.0 -0.670 -2.500 9.659 7.8 + 10.0 30.0 255.0 -1.294 -4.830 8.660 15.0 + 10.0 45.0 255.0 -1.830 -6.830 7.071 21.2 + 10.0 60.0 255.0 -2.241 -8.365 5.000 26.0 + 10.0 75.0 255.0 -2.500 -9.330 2.588 29.0 + 10.0 90.0 255.0 -2.588 -9.659 0.000 30.0 + 10.0 105.0 255.0 -2.500 -9.330 -2.588 29.0 + 10.0 120.0 255.0 -2.241 -8.365 -5.000 26.0 + 10.0 135.0 255.0 -1.830 -6.830 -7.071 21.2 + 10.0 150.0 255.0 -1.294 -4.830 -8.660 15.0 + 10.0 165.0 255.0 -0.670 -2.500 -9.659 7.8 - 10.0 15.0 270.0 0.000 -2.588 9.659 7.8 - 10.0 30.0 270.0 0.000 -5.000 8.660 15.0 - 10.0 45.0 270.0 0.000 -7.071 7.071 21.2 - 10.0 60.0 270.0 0.000 -8.660 5.000 26.0 - 10.0 75.0 270.0 0.000 -9.659 2.588 29.0 - 10.0 90.0 270.0 0.000 -10.000 0.000 30.0 - 10.0 105.0 270.0 0.000 -9.659 -2.588 29.0 - 10.0 120.0 270.0 0.000 -8.660 -5.000 26.0 - 10.0 135.0 270.0 0.000 -7.071 -7.071 21.2 - 10.0 150.0 270.0 0.000 -5.000 -8.660 15.0 - 10.0 165.0 270.0 0.000 -2.588 -9.659 7.8 + 10.0 15.0 270.0 0.000 -2.588 9.659 7.8 + 10.0 30.0 270.0 0.000 -5.000 8.660 15.0 + 10.0 45.0 270.0 0.000 -7.071 7.071 21.2 + 10.0 60.0 270.0 0.000 -8.660 5.000 26.0 + 10.0 75.0 270.0 0.000 -9.659 2.588 29.0 + 10.0 90.0 270.0 0.000 -10.000 0.000 30.0 + 10.0 105.0 270.0 0.000 -9.659 -2.588 29.0 + 10.0 120.0 270.0 0.000 -8.660 -5.000 26.0 + 10.0 135.0 270.0 0.000 -7.071 -7.071 21.2 + 10.0 150.0 270.0 0.000 -5.000 -8.660 15.0 + 10.0 165.0 270.0 0.000 -2.588 -9.659 7.8 - 10.0 15.0 285.0 0.670 -2.500 9.659 7.8 - 10.0 30.0 285.0 1.294 -4.830 8.660 15.0 - 10.0 45.0 285.0 1.830 -6.830 7.071 21.2 - 10.0 60.0 285.0 2.241 -8.365 5.000 26.0 - 10.0 75.0 285.0 2.500 -9.330 2.588 29.0 - 10.0 90.0 285.0 2.588 -9.659 0.000 30.0 - 10.0 105.0 285.0 2.500 -9.330 -2.588 29.0 - 10.0 120.0 285.0 2.241 -8.365 -5.000 26.0 - 10.0 135.0 285.0 1.830 -6.830 -7.071 21.2 - 10.0 150.0 285.0 1.294 -4.830 -8.660 15.0 - 10.0 165.0 285.0 0.670 -2.500 -9.659 7.8 + 10.0 15.0 285.0 0.670 -2.500 9.659 7.8 + 10.0 30.0 285.0 1.294 -4.830 8.660 15.0 + 10.0 45.0 285.0 1.830 -6.830 7.071 21.2 + 10.0 60.0 285.0 2.241 -8.365 5.000 26.0 + 10.0 75.0 285.0 2.500 -9.330 2.588 29.0 + 10.0 90.0 285.0 2.588 -9.659 0.000 30.0 + 10.0 105.0 285.0 2.500 -9.330 -2.588 29.0 + 10.0 120.0 285.0 2.241 -8.365 -5.000 26.0 + 10.0 135.0 285.0 1.830 -6.830 -7.071 21.2 + 10.0 150.0 285.0 1.294 -4.830 -8.660 15.0 + 10.0 165.0 285.0 0.670 -2.500 -9.659 7.8 - 10.0 15.0 300.0 1.294 -2.241 9.659 7.8 - 10.0 30.0 300.0 2.500 -4.330 8.660 15.0 - 10.0 45.0 300.0 3.536 -6.124 7.071 21.2 - 10.0 60.0 300.0 4.330 -7.500 5.000 26.0 - 10.0 75.0 300.0 4.830 -8.365 2.588 29.0 - 10.0 90.0 300.0 5.000 -8.660 0.000 30.0 - 10.0 105.0 300.0 4.830 -8.365 -2.588 29.0 - 10.0 120.0 300.0 4.330 -7.500 -5.000 26.0 - 10.0 135.0 300.0 3.536 -6.124 -7.071 21.2 - 10.0 150.0 300.0 2.500 -4.330 -8.660 15.0 - 10.0 165.0 300.0 1.294 -2.241 -9.659 7.8 + 10.0 15.0 300.0 1.294 -2.241 9.659 7.8 + 10.0 30.0 300.0 2.500 -4.330 8.660 15.0 + 10.0 45.0 300.0 3.536 -6.124 7.071 21.2 + 10.0 60.0 300.0 4.330 -7.500 5.000 26.0 + 10.0 75.0 300.0 4.830 -8.365 2.588 29.0 + 10.0 90.0 300.0 5.000 -8.660 0.000 30.0 + 10.0 105.0 300.0 4.830 -8.365 -2.588 29.0 + 10.0 120.0 300.0 4.330 -7.500 -5.000 26.0 + 10.0 135.0 300.0 3.536 -6.124 -7.071 21.2 + 10.0 150.0 300.0 2.500 -4.330 -8.660 15.0 + 10.0 165.0 300.0 1.294 -2.241 -9.659 7.8 - 10.0 15.0 315.0 1.830 -1.830 9.659 7.8 - 10.0 30.0 315.0 3.536 -3.536 8.660 15.0 - 10.0 45.0 315.0 5.000 -5.000 7.071 21.2 - 10.0 60.0 315.0 6.124 -6.124 5.000 26.0 - 10.0 75.0 315.0 6.830 -6.830 2.588 29.0 - 10.0 90.0 315.0 7.071 -7.071 0.000 30.0 - 10.0 105.0 315.0 6.830 -6.830 -2.588 29.0 - 10.0 120.0 315.0 6.124 -6.124 -5.000 26.0 - 10.0 135.0 315.0 5.000 -5.000 -7.071 21.2 - 10.0 150.0 315.0 3.536 -3.536 -8.660 15.0 - 10.0 165.0 315.0 1.830 -1.830 -9.659 7.8 + 10.0 15.0 315.0 1.830 -1.830 9.659 7.8 + 10.0 30.0 315.0 3.536 -3.536 8.660 15.0 + 10.0 45.0 315.0 5.000 -5.000 7.071 21.2 + 10.0 60.0 315.0 6.124 -6.124 5.000 26.0 + 10.0 75.0 315.0 6.830 -6.830 2.588 29.0 + 10.0 90.0 315.0 7.071 -7.071 0.000 30.0 + 10.0 105.0 315.0 6.830 -6.830 -2.588 29.0 + 10.0 120.0 315.0 6.124 -6.124 -5.000 26.0 + 10.0 135.0 315.0 5.000 -5.000 -7.071 21.2 + 10.0 150.0 315.0 3.536 -3.536 -8.660 15.0 + 10.0 165.0 315.0 1.830 -1.830 -9.659 7.8 - 10.0 15.0 330.0 2.241 -1.294 9.659 7.8 - 10.0 30.0 330.0 4.330 -2.500 8.660 15.0 - 10.0 45.0 330.0 6.124 -3.536 7.071 21.2 - 10.0 60.0 330.0 7.500 -4.330 5.000 26.0 - 10.0 75.0 330.0 8.365 -4.830 2.588 29.0 - 10.0 90.0 330.0 8.660 -5.000 0.000 30.0 - 10.0 105.0 330.0 8.365 -4.830 -2.588 29.0 - 10.0 120.0 330.0 7.500 -4.330 -5.000 26.0 - 10.0 135.0 330.0 6.124 -3.536 -7.071 21.2 - 10.0 150.0 330.0 4.330 -2.500 -8.660 15.0 - 10.0 165.0 330.0 2.241 -1.294 -9.659 7.8 + 10.0 15.0 330.0 2.241 -1.294 9.659 7.8 + 10.0 30.0 330.0 4.330 -2.500 8.660 15.0 + 10.0 45.0 330.0 6.124 -3.536 7.071 21.2 + 10.0 60.0 330.0 7.500 -4.330 5.000 26.0 + 10.0 75.0 330.0 8.365 -4.830 2.588 29.0 + 10.0 90.0 330.0 8.660 -5.000 0.000 30.0 + 10.0 105.0 330.0 8.365 -4.830 -2.588 29.0 + 10.0 120.0 330.0 7.500 -4.330 -5.000 26.0 + 10.0 135.0 330.0 6.124 -3.536 -7.071 21.2 + 10.0 150.0 330.0 4.330 -2.500 -8.660 15.0 + 10.0 165.0 330.0 2.241 -1.294 -9.659 7.8 - 10.0 15.0 345.0 2.500 -0.670 9.659 7.8 - 10.0 30.0 345.0 4.830 -1.294 8.660 15.0 - 10.0 45.0 345.0 6.830 -1.830 7.071 21.2 - 10.0 60.0 345.0 8.365 -2.241 5.000 26.0 - 10.0 75.0 345.0 9.330 -2.500 2.588 29.0 - 10.0 90.0 345.0 9.659 -2.588 0.000 30.0 - 10.0 105.0 345.0 9.330 -2.500 -2.588 29.0 - 10.0 120.0 345.0 8.365 -2.241 -5.000 26.0 - 10.0 135.0 345.0 6.830 -1.830 -7.071 21.2 - 10.0 150.0 345.0 4.830 -1.294 -8.660 15.0 - 10.0 165.0 345.0 2.500 -0.670 -9.659 7.8 + 10.0 15.0 345.0 2.500 -0.670 9.659 7.8 + 10.0 30.0 345.0 4.830 -1.294 8.660 15.0 + 10.0 45.0 345.0 6.830 -1.830 7.071 21.2 + 10.0 60.0 345.0 8.365 -2.241 5.000 26.0 + 10.0 75.0 345.0 9.330 -2.500 2.588 29.0 + 10.0 90.0 345.0 9.659 -2.588 0.000 30.0 + 10.0 105.0 345.0 9.330 -2.500 -2.588 29.0 + 10.0 120.0 345.0 8.365 -2.241 -5.000 26.0 + 10.0 135.0 345.0 6.830 -1.830 -7.071 21.2 + 10.0 150.0 345.0 4.830 -1.294 -8.660 15.0 + 10.0 165.0 345.0 2.500 -0.670 -9.659 7.8 diff --git a/test/testdata4.png b/test/testdata4.png index 67622902a8d3c443ca6dc0464bd867870e85bffc..d184b10732459e2932878e9482cfe0e9f33de25b 100644 Binary files a/test/testdata4.png and b/test/testdata4.png differ