diff --git a/README.md b/README.md index 22d2f34..58ac867 100644 --- a/README.md +++ b/README.md @@ -3,346 +3,165 @@ CUDA Rasterizer **University of Pennsylvania, CIS 565: GPU Programming and Architecture, Project 4** -* (TODO) YOUR NAME HERE -* Tested on: (TODO) Windows 22, i7-2222 @ 2.22GHz 22GB, GTX 222 222MB (Moore 2222 Lab) - -### (TODO: Your README) - -*DO NOT* leave the README to the last minute! It is a crucial part of the -project, and we will not be able to grade you without a good README. - - -Instructions (delete me) -======================== - -This is due Sunday, October 11, evening at midnight. - -**Summary:** -In this project, you will use CUDA to implement a simplified -rasterized graphics pipeline, similar to the OpenGL pipeline. You will -implement vertex shading, primitive assembly, rasterization, fragment shading, -and a framebuffer. More information about the rasterized graphics pipeline can -be found in the class slides and in the CIS 560 lecture notes. - -The base code provided includes an OBJ loader and much of the I/O and -bookkeeping code. It also includes some functions that you may find useful, -described below. The core rasterization pipeline is left for you to implement. - -You are not required to use this base code if you don't want -to. You may also change any part of the base code as you please. -**This is YOUR project.** - -**Recommendation:** -Every image you save should automatically get a different -filename. Don't delete all of them! For the benefit of your README, keep a -bunch of them around so you can pick a few to document your progress. - - -### Contents - -* `src/` C++/CUDA source files. -* `util/` C++ utility files. -* `objs/` Example OBJ test files (# verts, # tris in buffers after loading) - * `tri.obj` (3v, 1t): The simplest possible geometric object. - * `cube.obj` (36v, 12t): A small model with low depth-complexity. - * `suzanne.obj` (2904 verts, 968 tris): A medium model with low depth-complexity. - * `suzanne_smooth.obj` (2904 verts, 968 tris): A medium model with low depth-complexity. - This model has normals which must be interpolated. - * `cow.obj` (17412 verts, 5804 tris): A large model with low depth-complexity. - * `cow_smooth.obj` (17412 verts, 5804 tris): A large model with low depth-complexity. - This model has normals which must be interpolated. - * `flower.obj` (1920 verts, 640 tris): A medium model with very high depth-complexity. - * `sponza.obj` (837,489 verts, 279,163 tris): A huge model with very high depth-complexity. -* `renders/` Debug render of an example OBJ. -* `external/` Includes and static libraries for 3rd party libraries. - -### Running the code - -The main function requires a scene description file. Call the program with -one as an argument: `cis565_rasterizer objs/cow.obj`. -(In Visual Studio, `../objs/cow.obj`.) - -If you are using Visual Studio, you can set this in the Debugging > Command -Arguments section in the Project properties. Note that this value is different -for every different configuration type. Make sure you get the path right; read -the console for errors. - -## Requirements - -**Ask on the mailing list for any clarifications.** - -In this project, you are given the following code: - -* A library for loading standard Alias/Wavefront `.obj` format mesh - files and converting them to OpenGL-style buffers of index and vertex data. - * This library does NOT read materials, and provides all colors as white by - default. You can use another library if you wish. -* Simple structs for some parts of the pipeline. -* Depth buffer to framebuffer copy. -* CUDA-GL interop. - -You will need to implement the following features/pipeline stages: - -* Vertex shading. -* (Vertex shader) perspective transformation. -* Primitive assembly with support for triangles read from buffers of index and - vertex data. -* Rasterization. -* Fragment shading. -* A depth buffer for storing and depth testing fragments. -* Fragment to depth buffer writing (**with** atomics for race avoidance). -* (Fragment shader) simple lighting scheme, such as Lambert or Blinn-Phong. - -See below for more guidance. - -You are also required to implement at least "3.0" points in extra features. -(the parenthesized numbers must add to 3.0 or more): - -* (1.0) Tile-based pipeline. -* Additional pipeline stages. - * (1.0) Tessellation shader. - * (1.0) Geometry shader, able to output a variable number of primitives per - input primitive, optimized using stream compaction (thrust allowed). - * (0.5 **if not doing geometry shader**) Backface culling, optimized using - stream compaction (thrust allowed). - * (1.0) Transform feedback. - * (0.5) Scissor test. - * (0.5) Blending (when writing into framebuffer). -* (1.0) Instancing: draw one set of vertex data multiple times, each run - through the vertex shader with a different ID. -* (0.5) Correct color interpolation between points on a primitive. -* (1.0) UV texture mapping with bilinear texture filtering and perspective - correct texture coordinates. -* Support for rasterizing additional primitives: - * (0.5) Lines or line strips. - * (0.5) Points. -* (1.0) Anti-aliasing. -* (1.0) Occlusion queries. -* (1.0) Order-independent translucency using a k-buffer. -* (0.5) **Mouse**-based interactive camera support. - -This extra feature list is not comprehensive. If you have a particular idea -you would like to implement, please **contact us first**. - -**IMPORTANT:** -For each extra feature, please provide the following brief analysis: - -* Concise overview write-up of the feature. -* Performance impact of adding the feature (slower or faster). -* If you did something to accelerate the feature, what did you do and why? -* How might this feature be optimized beyond your current implementation? - - -## Base Code Tour - -You will be working primarily in two files: `rasterize.cu`, and -`rasterizeTools.h`. Within these files, areas that you need to complete are -marked with a `TODO` comment. Areas that are useful to and serve as hints for -optional features are marked with `TODO (Optional)`. Functions that are useful -for reference are marked with the comment `CHECKITOUT`. **You should look at -all TODOs and CHECKITOUTs before starting!** There are not many. - -* `src/rasterize.cu` contains the core rasterization pipeline. - * A few pre-made structs are included for you to use, but those marked with - TODO will also be needed for a simple rasterizer. As with any part of the - base code, you may modify or replace these as you see fit. - -* `src/rasterizeTools.h` contains various useful tools - * Includes a number of barycentric coordinate related functions that you may - find useful in implementing scanline based rasterization. - -* `util/utilityCore.hpp` serves as a kitchen-sink of useful functions. - - -## Rasterization Pipeline - -Possible pipelines are described below. Pseudo-type-signatures are given. -Not all of the pseudocode arrays will necessarily actually exist in practice. - -### First-Try Pipeline - -This describes a minimal version of *one possible* graphics pipeline, similar -to modern hardware (DX/OpenGL). Yours need not match precisely. To begin, try -to write a minimal amount of code as described here. Verify some output after -implementing each pipeline step. This will reduce the necessary time spent -debugging. - -Start out by testing a single triangle (`tri.obj`). - -* Clear the depth buffer with some default value. -* Vertex shading: - * `VertexIn[n] vs_input -> VertexOut[n] vs_output` - * A minimal vertex shader will apply no transformations at all - it draws - directly in normalized device coordinates (-1 to 1 in each dimension). -* Primitive assembly. - * `VertexOut[n] vs_output -> Triangle[n/3] primitives` - * Start by supporting ONLY triangles. For a triangle defined by indices - `(a, b, c)` into `VertexOut` array `vo`, simply copy the appropriate values - into a `Triangle` object `(vo[a], vo[b], vo[c])`. -* Rasterization. - * `Triangle[n/3] primitives -> FragmentIn[m] fs_input` - * A scanline implementation is simpler to start with. -* Fragment shading. - * `FragmentIn[m] fs_input -> FragmentOut[m] fs_output` - * A super-simple test fragment shader: output same color for every fragment. - * Also try displaying various debug views (normals, etc.) -* Fragments to depth buffer. - * `FragmentOut[m] -> FragmentOut[width][height]` - * Results in race conditions - don't bother to fix these until it works! - * Can really be done inside the fragment shader, if you call the fragment - shader from the rasterization kernel for every fragment (including those - which get occluded). **OR,** this can be done before fragment shading, which - may be faster but means the fragment shader cannot change the depth. -* A depth buffer for storing and depth testing fragments. - * `FragmentOut[width][height] depthbuffer` - * An array of `fragment` objects. - * At the end of a frame, it should contain the fragments drawn to the screen. -* Fragment to framebuffer writing. - * `FragmentOut[width][height] depthbuffer -> vec3[width][height] framebuffer` - * Simply copies the colors out of the depth buffer into the framebuffer - (to be displayed on the screen). - -### A Useful Pipeline - -* Clear the depth buffer with some default value. -* Vertex shading: - * `VertexIn[n] vs_input -> VertexOut[n] vs_output` - * Apply some vertex transformation (e.g. model-view-projection matrix using - `glm::lookAt ` and `glm::perspective `). -* Primitive assembly. - * `VertexOut[n] vs_output -> Triangle[n/3] primitives` - * As above. - * Other primitive types are optional. -* Rasterization. - * `Triangle[n/3] primitives -> FragmentIn[m] fs_input` - * You may choose to do a tiled rasterization method, which should have lower - global memory bandwidth. - * A scanline optimization: when rasterizing a triangle, only scan over the - box around the triangle (`getAABBForTriangle`). -* Fragment shading. - * `FragmentIn[m] fs_input -> FragmentOut[m] fs_output` - * Add a shading method, such as Lambert or Blinn-Phong. Lights can be defined - by kernel parameters (like GLSL uniforms). -* Fragments to depth buffer. - * `FragmentOut[m] -> FragmentOut[width][height]` - * Can really be done inside the fragment shader, if you call the fragment - shader from the rasterization kernel for every fragment (including those - which get occluded). **OR,** this can be done before fragment shading, which - may be faster but means the fragment shader cannot change the depth. - * This result in an optimization: it allows you to do depth tests before - spending execution time in complex fragment shader code! - * Handle race conditions! Since multiple primitives write fragments to the - same fragment in the depth buffer, races must be avoided by using CUDA - atomics. - * *Approach 1:* Lock the location in the depth buffer during the time that - a thread is comparing old and new fragment depths (and possibly writing - a new fragment). This should work in all cases, but be slower. - * *Approach 2:* Convert your depth value to a fixed-point `int`, and use - `atomicMin` to store it into an `int`-typed depth buffer `intdepth`. After - that, the value which is stored at `intdepth[i]` is (usually) that of the - fragment which should be stored into the `fragment` depth buffer. - * This may result in some rare race conditions (e.g. across blocks). - * The `flower.obj` test file is good for testing race conditions. -* A depth buffer for storing and depth testing fragments. - * `FragmentOut[width][height] depthbuffer` - * An array of `fragment` objects. - * At the end of a frame, it should contain the fragments drawn to the screen. -* Fragment to framebuffer writing. - * `FragmentOut[width][height] depthbuffer -> vec3[width][height] framebuffer` - * Simply copies the colors out of the depth buffer into the framebuffer - (to be displayed on the screen). - -This is a suggested sequence of pipeline steps, but you may choose to alter the -order of this sequence or merge entire kernels as you see fit. For example, if -you decide that doing has benefits, you can choose to merge the vertex shader -and primitive assembly kernels, or merge the perspective transform into another -kernel. There is not necessarily a right sequence of kernels, and you may -choose any sequence that works. Please document in your README what sequence -you choose and why. - - -## Resources - -The following resources may be useful for this project: - -* High-Performance Software Rasterization on GPUs: - * [Paper (HPG 2011)](http://www.tml.tkk.fi/~samuli/publications/laine2011hpg_paper.pdf) - * [Code](http://code.google.com/p/cudaraster/) - * Note that looking over this code for reference with regard to the paper is - fine, but we most likely will not grant any requests to actually - incorporate any of this code into your project. - * [Slides](http://bps11.idav.ucdavis.edu/talks/08-gpuSoftwareRasterLaineAndPantaleoni-BPS2011.pdf) -* The Direct3D 10 System (SIGGRAPH 2006) - for those interested in doing - geometry shaders and transform feedback: - * [Paper](http://dl.acm.org/citation.cfm?id=1141947) - * [Paper, through Penn Libraries proxy](http://proxy.library.upenn.edu:2247/citation.cfm?id=1141947) -* Multi-Fragment Effects on the GPU using the k-Buffer - for those who want to do - order-independent transparency using a k-buffer: - * [Paper](http://www.inf.ufrgs.br/~comba/papers/2007/kbuffer_preprint.pdf) -* FreePipe: A Programmable, Parallel Rendering Architecture for Efficient - Multi-Fragment Effects (I3D 2010): - * [Paper](https://sites.google.com/site/hmcen0921/cudarasterizer) -* Writing A Software Rasterizer In Javascript: - * [Part 1](http://simonstechblog.blogspot.com/2012/04/software-rasterizer-part-1.html) - * [Part 2](http://simonstechblog.blogspot.com/2012/04/software-rasterizer-part-2.html) - - -## Third-Party Code Policy - -* Use of any third-party code must be approved by asking on our Google Group. -* If it is approved, all students are welcome to use it. Generally, we approve - use of third-party code that is not a core part of the project. For example, - for the path tracer, we would approve using a third-party library for loading - models, but would not approve copying and pasting a CUDA function for doing - refraction. -* Third-party code **MUST** be credited in README.md. -* Using third-party code without its approval, including using another - student's code, is an academic integrity violation, and will, at minimum, - result in you receiving an F for the semester. - - -## README - -Replace the contents of this README.md in a clear manner with the following: - -* A brief description of the project and the specific features you implemented. -* At least one screenshot of your project running. -* A 30 second or longer video of your project running. -* A performance analysis (described below). - -### Performance Analysis - -The performance analysis is where you will investigate how to make your CUDA -programs more efficient using the skills you've learned in class. You must have -performed at least one experiment on your code to investigate the positive or -negative effects on performance. - -We encourage you to get creative with your tweaks. Consider places in your code -that could be considered bottlenecks and try to improve them. - -Provide summary of your optimizations (no more than one page), along with -tables and or graphs to visually explain any performance differences. - -* Include a breakdown of time spent in each pipeline stage for a few different - models. It is suggested that you use pie charts or 100% stacked bar charts. -* For optimization steps (like backface culling), include a performance - comparison to show the effectiveness. - - -## Submit - -If you have modified any of the `CMakeLists.txt` files at all (aside from the -list of `SOURCE_FILES`), you must test that your project can build in Moore -100B/C. Beware of any build issues discussed on the Google Group. - -1. Open a GitHub pull request so that we can see that you have finished. - The title should be "Submission: YOUR NAME". - * **ADDITIONALLY:** - In the body of the pull request, include a link to your repository. -2. Send an email to the TA (gmail: kainino1+cis565@) with: - * **Subject**: in the form of `[CIS565] Project N: PENNKEY`. - * Direct link to your pull request on GitHub. - * Estimate the amount of time you spent on the project. - * If there were any outstanding problems, or if you did any extra - work, *briefly* explain. - * Feedback on the project itself, if any. +Terry Sun; Arch Linux, Intel i5-4670, GTX 750 + +This project contains a simplied graphics pipeline implemented in CUDA. + +![](renders/demo.gif) + +## Pipeline Overview + +1. Vertex shader: applies a model-view-projection transformation to each + input vertex. Parallelized across vertices. + +2. Primitive assembly: reads in indices and transformed vertices and assembles + primitives (triangles). Parallelized across primitives. + +3. Geometry shader: after primitives are assembled, the geometry shader + performs additional primitive generation (or deletion), up to a fixed factor + (4) per original primitive. + + 1. Backface culling: triangles that face away from the camera are removed. + `thrust::remove_if` stream compaction is used to filter these out before + rasterization occurs. + + 2. Tessellation shading/smoothing: Each triangle is subdivided into 4 smaller + triangles, with interpolated normals. + +4. Rasterization: uses a scanline algorithm to determine which fragments are + covered by a particular primitive, performs depth testing, and stores into a + depth buffer. Uses an axis-aligned bounding box for optimization, barycentric + coordinate checking to test coverage, and CUDA `atomicMin` to avoid race + conditions when doing depth testing. Parallelized across primitives. + +5. Fragment shading: computes color of each pixel using Lambert (diffuse) + shading. Interpolates normals within a triangle. Parallelized across + fragments. + +6. Copy to screen/frame buffer. + +## Features + +### Geometry shader + +**Backface culling**. Triangles which do not face the camera are removed before +rasterization. Triangles are tested by computing the cross product between the +edges (v0-v1, v0-v2); by convention, triangles which face away from the front of +the model will be defined such that this cross product has a negative z +component. ([source][bfc-wiki]) + + [bfc-wiki]: https://en.wikipedia.org/wiki/Back-face_culling) + +Back-facing faces are stream compacted away. This improves the execution +warp coherency because all threads going through the scanline function are +guaranteed to draw to at least one pixel on the screen. + +![](renders/backface.gif) + +(In this example the back direction is fixed relative to the model in order to +demonstrate missing faces. In practice, backface culling would be invisible to +the viewer.) + +*Tessellation geometry shading*. A second geometry shader divides each triangle +into 4 smaller triangles (see left, below). Three new vertices are generated +from each existing triangle. The vertex transformation must be applied again to +each of these vertices, thus blurring the pipeline stages. (I considered moving +the entire vertex shader to within geometry shader, but made the optimization of +splitting the vertex shader out and transforming the original vertices once.) + +Below: the middle triangle of the 4 generated triangles is colored lightly to +show the pattern of tessellation. + +![](renders/tri-subdiv.png) +![](renders/suzanne-subdiv.png) + +### Color interpolation + +For every point, its normal is interpolated from its relative distance from the +3 vertices of its triangle. This is calculated using barycentric coordinates. +This normal is then used to calculate a Lambert (diffuse) shading (plus a small +amount of ambient lighting). + +Comparison of non-interpolated and interpolated normals: + +![](renders/suzanne-nosmooth.png) +![](renders/suzanne-smooth.png) + +Animation of a light moving across the screen: + +![](renders/light.gif) + +### Antialiasing + +Four fragments are generated for every pixel, spaced evenly within the pixel. +The parallelization for this process varies between stages. In some (fragment +shader), a thread is launched for each fragment; however, in others (scanline), +a single thread will handle four fragments in succession. Future work might be +to do analysis on methods of parallelizing this multi-fragmented approach. + +At the very end of the pipeline, as fragments are translated into colors for the +frame buffer, the four pixels associated with a frame are averaged together. + +### Scissor test + +Clipping optimization. Define a `glm::vec4(xmin, xmax, ymin, ymax)` window in +which to render to the screen. When performing scanline rasterization algorithm, +this test discards data outside of this window. + +![](renders/suzanne-clipped.png) + +## Performance + +### Breakdown by Stage + +![](data/percent-stacked.png) + +By far the longest stage is the rasterization/scanline function. Many of the +other stages are completely inconsequential in comparison, as expected -- very +little computational work is done in the primitive assembly (mostly memory +access) or vertex shader step. It surprised me that the fragment shader is the +second largest stage and by that margin. + +A future work possibility is to use a more optimized scanline function or use a +different rasterization technique altogether. + +### Backface Culling + +Data in this case taken *with* triangle subdivision active. + +File | Triangles Orig | Triangles after BFC | % Removed | Time Orig | Time AFter | % Speedup +--------|----------------|---------------------|-----------|-----------|------------|---------- +Cow | 23216 | 9352 | 59.7% | 13.21 | 12.94 | 2.02% +Suzanne | 3862 | 2576 | 33.3% | 22.2 | 20.83 | 6.17% + +I'm surprised that backface culling doesn't provide a better result.G + +(There was no difference at all in flower.obj, so it's left out of these +results.) + +Note to self: should have kept the image rotation on while taking this data for +better variety. + +## Internals + +![](renders/suzanne-normals.png) + +## Bloopers + +![](renders/cow-oops1.png) + +First cow render: wasn't using indices to assemble primitives. + +![](renders/cow-oops2.png) + +Not sure what was going on: bad interpolation? Only one vertex in each triangle +has color. + +![](renders/cow-oops3.png) + +Lots of race conditions: imagine this but with flickering on most triangles. It +was hard to look at. + +![](renders/suzanne-wat.png) + +A somewhat terrifying mistake from when I started doing triangle subdivision. diff --git a/data/aggregate.csv b/data/aggregate.csv new file mode 100644 index 0000000..0522f00 --- /dev/null +++ b/data/aggregate.csv @@ -0,0 +1,6 @@ +file, vertex shader, assemble primitives, geometry shader, scanline, fragment shader +cow.txt, 0.09513088, 0.152462336, 0.2157648, 8.98044288, 3.499964032 +cow_nobfc.txt, 0.08912416, 0.142252992, 0.450094592, 9.017903488, 3.514585152 +suzanne.txt, 0.022475968, 0.03150624, 0.063839936, 16.55485335, 4.152908032 +suzanne_nobfc.txt, 0.02208192, 0.03105344, 0.081809152, 17.909788102, 4.178921536 +flower.txt, 0.01738368, 0.023185152, 0.035760704, 43.651649022, 3.331216896 diff --git a/data/cow.txt b/data/cow.txt new file mode 100644 index 0000000..d267d67 --- /dev/null +++ b/data/cow.txt @@ -0,0 +1,500 @@ +0.097824 0.159712 0.227744 9.414880 3.603072 +0.097600 0.155392 0.224576 9.402560 3.554976 +0.098144 0.156032 0.223104 9.527328 3.510176 +0.098176 0.159104 0.220928 9.429504 3.535936 +0.097568 0.155968 0.221664 9.057216 3.515584 +0.097408 0.158592 0.220512 9.619808 3.541632 +0.097888 0.158592 0.222016 9.138144 3.538144 +0.097600 0.155520 0.225792 9.787520 3.551648 +0.094752 0.151680 0.217312 9.042848 3.532128 +0.095008 0.151776 0.218016 9.045312 3.521280 +0.095040 0.152640 0.220448 9.037536 3.501056 +0.095488 0.155488 0.219680 9.024512 3.527648 +0.095456 0.153888 0.219456 8.771840 3.527008 +0.095328 0.152160 0.214176 8.831840 3.536320 +0.095040 0.154528 0.218496 8.628704 3.496896 +0.095520 0.152160 0.219168 9.245600 3.505088 +0.095104 0.154432 0.220672 9.154656 3.540544 +0.095008 0.152960 0.222624 8.920192 3.530112 +0.100576 0.157280 0.216736 10.084224 3.516320 +0.094944 0.154208 0.214304 9.050240 3.519616 +0.095296 0.154336 0.216928 8.875232 3.510976 +0.094880 0.150112 0.215232 8.861824 3.506336 +0.094880 0.154752 0.221888 8.853536 3.508960 +0.094752 0.153536 0.219616 9.008832 3.515296 +0.094944 0.154400 0.216832 8.910656 3.505120 +0.094720 0.150592 0.220992 9.077792 3.518304 +0.097088 0.152608 0.218880 9.127392 3.499136 +0.096160 0.154272 0.224992 9.231040 3.506880 +0.095776 0.154560 0.217728 9.093472 3.511456 +0.096000 0.155296 0.216928 9.169440 3.509056 +0.095712 0.154720 0.215328 9.065472 3.536512 +0.096064 0.152160 0.219648 8.885792 3.499424 +0.096128 0.153472 0.219456 9.237248 3.504928 +0.096256 0.155680 0.223872 9.164576 3.519904 +0.096192 0.153888 0.216096 9.184576 3.507456 +0.096352 0.154368 0.219520 9.295936 3.509600 +0.095776 0.152160 0.219744 9.030432 3.510400 +0.096320 0.151392 0.218848 8.859040 3.522656 +0.096160 0.155680 0.215488 9.427104 3.518688 +0.096352 0.154592 0.217152 9.282368 3.512736 +0.096032 0.156768 0.214688 9.351200 3.529472 +0.095936 0.155200 0.219744 8.993536 3.496512 +0.095968 0.152352 0.217152 9.007648 3.495584 +0.096288 0.153600 0.220192 9.128160 3.537568 +0.095584 0.153472 0.221504 9.231200 3.513856 +0.096032 0.151936 0.216192 8.745248 3.526016 +0.096416 0.156224 0.218720 9.224992 3.516896 +0.096224 0.153216 0.221120 8.963904 3.525376 +0.103104 0.158656 0.217312 9.796448 3.540064 +0.095936 0.153888 0.223648 9.323104 3.530848 +0.095936 0.153536 0.220832 9.190656 3.519776 +0.096224 0.153728 0.214880 8.974496 3.504896 +0.096512 0.158784 0.224032 9.131392 3.509216 +0.096192 0.153536 0.213440 8.626208 3.519424 +0.096000 0.156512 0.221920 8.937856 3.515168 +0.095904 0.153504 0.220320 8.826528 3.502656 +0.096064 0.155584 0.219328 9.246912 3.514432 +0.095968 0.155488 0.213248 9.242016 3.519488 +0.096416 0.155520 0.221984 8.950720 3.515008 +0.096128 0.151360 0.216352 9.240640 3.512608 +0.096128 0.152480 0.221312 9.130272 3.485952 +0.096608 0.156384 0.218464 9.124128 3.508544 +0.096704 0.153664 0.218656 9.366304 3.520576 +0.097120 0.155008 0.217504 9.281280 3.506848 +0.096192 0.154464 0.219616 8.765888 3.501888 +0.095776 0.152256 0.214848 9.107232 3.497888 +0.095680 0.156928 0.221248 9.110336 3.508928 +0.095584 0.153216 0.217312 9.375392 3.500896 +0.096224 0.153056 0.219136 9.091584 3.508608 +0.096608 0.155392 0.218496 9.122432 3.507168 +0.095712 0.153056 0.216832 8.942464 3.523104 +0.096320 0.151584 0.219968 9.172448 3.510880 +0.096128 0.154304 0.214624 9.155136 3.529088 +0.096128 0.155296 0.215616 8.921376 3.509536 +0.095712 0.156960 0.218048 9.129984 3.527360 +0.095680 0.154784 0.212256 8.883968 3.507616 +0.096256 0.153792 0.221952 8.913696 3.528640 +0.096352 0.155456 0.219520 9.234368 3.523424 +0.103200 0.159232 0.217920 10.161088 3.508192 +0.096352 0.156512 0.217216 9.153056 3.516000 +0.096224 0.154528 0.220576 9.154656 3.501856 +0.095904 0.152224 0.220640 9.161152 3.514400 +0.095936 0.154304 0.222080 8.973920 3.507488 +0.096160 0.154304 0.217216 8.951776 3.506528 +0.096032 0.151520 0.219008 8.636416 3.501408 +0.096288 0.153792 0.220224 8.851264 3.507008 +0.096256 0.156192 0.219680 8.633216 3.493184 +0.096288 0.153888 0.214560 9.134048 3.496320 +0.097280 0.155456 0.217760 9.007360 3.499872 +0.096032 0.154720 0.221088 9.209824 3.517472 +0.096256 0.152480 0.216928 9.091808 3.538912 +0.095648 0.155040 0.223520 9.170336 3.506720 +0.096096 0.154368 0.222848 9.116544 3.512224 +0.096704 0.154048 0.216928 8.958816 3.524800 +0.096768 0.176224 0.221920 9.172992 3.528512 +0.096320 0.152768 0.213440 8.998208 3.518016 +0.096448 0.154656 0.217472 8.815616 3.525184 +0.096160 0.152256 0.214720 9.240512 3.513184 +0.096224 0.154848 0.217952 8.868608 3.510464 +0.095904 0.152576 0.218656 9.133984 3.498752 +0.096064 0.154496 0.216512 9.079488 3.510304 +0.096192 0.152896 0.218656 9.353408 3.521696 +0.096480 0.153056 0.220544 9.181504 3.503680 +0.096480 0.156160 0.218848 8.965664 3.499552 +0.096448 0.155424 0.217728 8.609344 3.484384 +0.096480 0.153632 0.216544 9.232096 3.529344 +0.096096 0.156544 0.219648 8.613248 3.491520 +0.095776 0.154048 0.217952 8.754560 3.515744 +0.102528 0.160480 0.218560 10.009728 3.522464 +0.096832 0.155616 0.217760 9.141824 3.521376 +0.095968 0.155008 0.219168 9.227520 3.514784 +0.095968 0.153504 0.218080 9.276768 3.522528 +0.095936 0.154208 0.219232 9.192192 3.501408 +0.096160 0.153984 0.212736 9.451776 3.518752 +0.095872 0.153056 0.220992 9.075776 3.506080 +0.096448 0.154496 0.213984 8.845824 3.517760 +0.096288 0.151744 0.219200 9.071072 3.515264 +0.095712 0.153952 0.220928 8.732128 3.491328 +0.096000 0.153856 0.224032 9.052128 3.513248 +0.095840 0.154208 0.215296 9.178560 3.514304 +0.096352 0.156416 0.212064 8.596544 3.501760 +0.096000 0.152192 0.223264 8.784576 3.520928 +0.095872 0.156000 0.218720 8.700416 3.487328 +0.096864 0.154816 0.216000 9.093696 3.503552 +0.096448 0.154016 0.217024 8.914592 3.501888 +0.095872 0.156320 0.221024 8.886656 3.502944 +0.095872 0.154624 0.220288 9.323136 3.524096 +0.096096 0.156352 0.217344 8.743840 3.494816 +0.096320 0.155744 0.219392 9.264448 3.533280 +0.096032 0.154048 0.216480 8.635616 3.508000 +0.096096 0.158080 0.215424 9.196864 3.511808 +0.095456 0.155744 0.213856 8.636384 3.501056 +0.095776 0.153888 0.213568 8.754976 3.491424 +0.095840 0.152192 0.220736 9.075584 3.520256 +0.095872 0.158336 0.218816 9.243872 3.492384 +0.096160 0.151936 0.220032 9.089984 3.502144 +0.095936 0.155168 0.218048 9.224192 3.542496 +0.096032 0.155680 0.220096 9.144992 3.529344 +0.102816 0.160736 0.215136 9.709440 3.519520 +0.096416 0.153056 0.218400 8.642400 3.498432 +0.095552 0.155360 0.214272 9.009664 3.505312 +0.096160 0.151712 0.218336 8.699360 3.513248 +0.096256 0.155744 0.221376 9.264704 3.510656 +0.095904 0.154976 0.219904 9.145632 3.521664 +0.096192 0.157760 0.218176 8.754272 3.513280 +0.095424 0.155456 0.223584 8.763200 3.520960 +0.095904 0.155232 0.218176 8.624032 3.505952 +0.095904 0.156288 0.216928 9.078528 3.526272 +0.096480 0.151744 0.220896 8.720544 3.508960 +0.095968 0.152640 0.211968 9.026656 3.496160 +0.096256 0.152064 0.214816 8.595232 3.505088 +0.095520 0.154528 0.216800 9.303488 3.509056 +0.096448 0.155776 0.224864 9.109888 3.517376 +0.096704 0.152544 0.212928 8.810464 3.515552 +0.096608 0.154624 0.214848 9.249824 3.490656 +0.095744 0.152608 0.218816 9.416832 3.522400 +0.095872 0.152704 0.228544 8.867008 3.490976 +0.095904 0.153600 0.217120 9.041024 3.499200 +0.096224 0.155712 0.217312 9.148800 3.483456 +0.095872 0.155200 0.217408 9.041536 3.514816 +0.095776 0.154208 0.218176 8.639936 3.491104 +0.095872 0.151904 0.217120 9.230368 3.501344 +0.095968 0.156480 0.228288 8.959456 3.521344 +0.096576 0.153952 0.218528 9.302496 3.526720 +0.096544 0.158048 0.218432 9.206464 3.526784 +0.096672 0.152672 0.217120 9.165024 3.510784 +0.095776 0.155328 0.216704 9.406336 3.521984 +0.096064 0.153760 0.215168 9.352768 3.530816 +0.104256 0.162304 0.225152 10.209248 3.535104 +0.096320 0.157120 0.222016 8.904032 3.507552 +0.095904 0.154176 0.217344 9.229056 3.528640 +0.096096 0.152960 0.216576 9.199616 3.528896 +0.095936 0.154368 0.219520 9.187392 3.542784 +0.096576 0.154368 0.228768 9.054784 3.510880 +0.096000 0.152032 0.216128 9.168096 3.540640 +0.096288 0.153888 0.212800 9.091776 3.485600 +0.096128 0.155744 0.215520 9.062208 3.510784 +0.096256 0.152448 0.220576 9.264384 3.528192 +0.096256 0.155872 0.217600 8.776928 3.531872 +0.096096 0.154944 0.221152 9.079936 3.518912 +0.096000 0.156768 0.224576 9.315616 3.518880 +0.095808 0.152256 0.220160 9.206080 3.487936 +0.095904 0.154400 0.218272 9.105728 3.526080 +0.096608 0.153984 0.216576 9.017472 3.537536 +0.095776 0.153632 0.210752 9.125056 3.506208 +0.096672 0.152608 0.216192 9.459616 3.514688 +0.095488 0.155392 0.216736 9.411232 3.529824 +0.095584 0.155232 0.215904 8.678080 3.479744 +0.096384 0.154944 0.219392 9.063520 3.506720 +0.095712 0.153632 0.220128 8.928704 3.520320 +0.095936 0.153088 0.221856 9.000480 3.521504 +0.096032 0.152256 0.216512 9.261984 3.529088 +0.096544 0.154656 0.219648 9.392704 3.510592 +0.097184 0.154624 0.215616 9.101824 3.510656 +0.095808 0.155232 0.217472 9.174176 3.487776 +0.096064 0.154016 0.218752 8.961280 3.513504 +0.096448 0.154880 0.214976 8.965760 3.517664 +0.095520 0.152896 0.214464 9.115968 3.507328 +0.103296 0.163392 0.217408 10.125760 3.529952 +0.095968 0.153344 0.221824 9.090304 3.511104 +0.096000 0.154848 0.214112 9.167616 3.516800 +0.095968 0.152992 0.219392 9.096672 3.517152 +0.096224 0.154912 0.221600 8.698208 3.492352 +0.096608 0.153568 0.221376 9.239552 3.511712 +0.095808 0.152352 0.219712 9.074560 3.516032 +0.095552 0.154432 0.220096 9.123936 3.513728 +0.096704 0.158528 0.215520 8.817568 3.513600 +0.096544 0.152896 0.227360 8.996416 3.514112 +0.096128 0.153312 0.218208 9.117824 3.522304 +0.096448 0.152640 0.222976 9.067520 3.504096 +0.096416 0.156960 0.218592 9.128704 3.521600 +0.095488 0.152672 0.219040 8.869184 3.511424 +0.096064 0.153216 0.213920 9.128128 3.493696 +0.096736 0.153888 0.221856 9.036416 3.519808 +0.096064 0.153888 0.216352 9.308064 3.507904 +0.096160 0.152864 0.224416 9.172224 3.519040 +0.095744 0.156128 0.224160 9.100416 3.514432 +0.095712 0.155680 0.217504 9.266528 3.495968 +0.096576 0.156576 0.216192 9.125792 3.516800 +0.095776 0.154432 0.214272 8.990816 3.531072 +0.096256 0.151968 0.218112 8.918464 3.520928 +0.096224 0.151904 0.224512 9.023776 3.520352 +0.096544 0.152192 0.215904 9.033280 3.502080 +0.096480 0.157120 0.213312 9.003296 3.520640 +0.096032 0.153472 0.222688 9.200544 3.519584 +0.095808 0.153984 0.220928 8.724128 3.501472 +0.095328 0.151776 0.216576 8.868096 3.521920 +0.096384 0.152608 0.215520 9.033440 3.516096 +0.102560 0.161440 0.221536 10.790080 3.552896 +0.096352 0.152832 0.222240 9.062400 3.500512 +0.096064 0.155936 0.217920 9.036832 3.504416 +0.095776 0.154432 0.222048 9.019008 3.498496 +0.095904 0.153760 0.217216 9.205440 3.526848 +0.095936 0.152544 0.217024 8.735712 3.460512 +0.093984 0.148864 0.217056 9.150720 3.498496 +0.093696 0.149888 0.211424 8.973408 3.522496 +0.093696 0.149056 0.212224 8.987648 3.494432 +0.093600 0.150368 0.209536 8.991520 3.486048 +0.093792 0.149184 0.218624 8.618752 3.488768 +0.093920 0.149664 0.213792 8.459392 3.470912 +0.093824 0.151136 0.215136 8.742656 3.453184 +0.093632 0.149952 0.208512 9.143392 3.495168 +0.093728 0.150752 0.208832 8.442944 3.481920 +0.094240 0.150720 0.212576 8.360736 3.490496 +0.093088 0.150944 0.211840 9.154784 3.499968 +0.094016 0.151968 0.213472 8.980288 3.490272 +0.093152 0.150848 0.212896 8.704096 3.476512 +0.093760 0.149344 0.211264 8.367168 3.487680 +0.093440 0.150560 0.213696 9.132416 3.495360 +0.093248 0.150464 0.212864 9.028480 3.494688 +0.093920 0.151200 0.210208 8.687296 3.481152 +0.093824 0.149120 0.213792 9.167744 3.474912 +0.094176 0.148960 0.207680 9.110496 3.498688 +0.093600 0.148896 0.213248 8.988736 3.503040 +0.094816 0.150304 0.210976 8.669472 3.474144 +0.093376 0.149024 0.212320 8.965376 3.494016 +0.093696 0.152160 0.209952 8.604320 3.481216 +0.093760 0.150880 0.214944 8.884032 3.503776 +0.099936 0.156608 0.214784 9.647520 3.508928 +0.095008 0.148608 0.209696 8.486144 3.491104 +0.093280 0.148416 0.212800 8.871648 3.501600 +0.093888 0.150400 0.209888 9.022912 3.484736 +0.093632 0.151360 0.218368 8.361856 3.490688 +0.093824 0.148864 0.208640 8.848384 3.448832 +0.093760 0.150720 0.214848 8.989952 3.489504 +0.094112 0.149568 0.223808 8.984608 3.495360 +0.093088 0.151712 0.215264 8.647200 3.479584 +0.093952 0.150880 0.215072 9.013024 3.502112 +0.093248 0.149856 0.210272 8.943808 3.494400 +0.094112 0.152640 0.210112 8.602240 3.469120 +0.093952 0.149376 0.221184 8.770656 3.472960 +0.094240 0.152640 0.213344 8.932384 3.504960 +0.093824 0.150144 0.211264 9.021824 3.493472 +0.094752 0.148736 0.212672 8.929632 3.491488 +0.093984 0.149696 0.215936 9.010112 3.498624 +0.093952 0.149824 0.211264 8.748032 3.454848 +0.093536 0.151968 0.216160 8.834784 3.497792 +0.094304 0.149632 0.208832 8.924288 3.483712 +0.093536 0.151488 0.212704 9.043360 3.503808 +0.094112 0.149440 0.212448 8.710848 3.479680 +0.093792 0.151200 0.212000 8.667776 3.479264 +0.093376 0.153248 0.213088 8.947328 3.492576 +0.093408 0.150176 0.211040 8.828864 3.466624 +0.093888 0.171648 0.213920 8.619936 3.466752 +0.093408 0.148896 0.217824 8.390624 3.486304 +0.093440 0.149184 0.212672 9.069280 3.498816 +0.093536 0.150336 0.213280 8.567968 3.467936 +0.094144 0.150080 0.214880 8.551232 3.488064 +0.100960 0.157472 0.210464 9.802528 3.494016 +0.094272 0.149632 0.217792 8.953696 3.498112 +0.093472 0.148992 0.214848 8.809056 3.487264 +0.093888 0.150304 0.215296 8.734528 3.481088 +0.094208 0.148896 0.213056 8.722144 3.469472 +0.093632 0.148704 0.213440 8.932896 3.474048 +0.093568 0.148416 0.215008 8.510976 3.458880 +0.094112 0.148512 0.208800 8.926144 3.495520 +0.094336 0.149440 0.213216 8.831936 3.512096 +0.093408 0.148960 0.209856 8.284032 3.469792 +0.094080 0.150368 0.216160 8.919392 3.505536 +0.093504 0.149696 0.212480 8.822656 3.489824 +0.094688 0.149856 0.214112 8.642816 3.477792 +0.093152 0.149856 0.213184 8.906784 3.492832 +0.094432 0.150528 0.214432 8.878592 3.465536 +0.093888 0.152800 0.220064 8.524160 3.481280 +0.093632 0.150976 0.208288 8.886944 3.485248 +0.094176 0.150784 0.215744 8.973824 3.490784 +0.093888 0.150304 0.216416 8.748928 3.479104 +0.094208 0.148448 0.208960 8.579104 3.486048 +0.093952 0.149984 0.212320 8.910592 3.524768 +0.094176 0.149760 0.209248 8.728160 3.471616 +0.093952 0.150304 0.217696 8.728064 3.479360 +0.093856 0.149856 0.209600 8.445664 3.476672 +0.093568 0.148832 0.208832 8.730944 3.478592 +0.093344 0.149472 0.217856 9.054848 3.485472 +0.093344 0.153120 0.210848 9.159328 3.509152 +0.094080 0.150240 0.206656 9.203648 3.496640 +0.094496 0.150208 0.214048 8.913760 3.491328 +0.093888 0.152096 0.216576 8.496960 3.483904 +0.099424 0.155840 0.215328 9.911488 3.514432 +0.094048 0.151008 0.216768 8.812064 3.482240 +0.093856 0.150080 0.214560 8.596544 3.470720 +0.094240 0.150368 0.210048 8.712000 3.471616 +0.093696 0.148704 0.211520 9.010560 3.491296 +0.093920 0.150816 0.209952 8.869952 3.469888 +0.093792 0.148608 0.211616 8.886592 3.508224 +0.093600 0.150208 0.212608 8.830624 3.507904 +0.094144 0.149824 0.215456 8.507648 3.479712 +0.093856 0.150336 0.218336 8.837344 3.477536 +0.093408 0.150624 0.212608 8.927968 3.501504 +0.093984 0.149792 0.211456 8.958368 3.492480 +0.093152 0.149824 0.216768 8.757216 3.475904 +0.093856 0.149312 0.210720 8.842016 3.479584 +0.094016 0.151264 0.209088 8.822688 3.481984 +0.094080 0.151520 0.211232 9.020992 3.492896 +0.093376 0.151008 0.211808 9.027936 3.481088 +0.094080 0.149376 0.214912 9.030304 3.480224 +0.093344 0.149824 0.216352 8.723456 3.467616 +0.093824 0.151488 0.212384 8.950752 3.498176 +0.094368 0.149536 0.212992 8.965632 3.514848 +0.093952 0.150240 0.211296 8.810688 3.468256 +0.093376 0.149568 0.210976 8.912480 3.491904 +0.094016 0.149024 0.212192 8.726112 3.482816 +0.093632 0.149088 0.211552 8.571168 3.471328 +0.093568 0.149280 0.213984 8.739456 3.483328 +0.094304 0.149248 0.210304 8.938368 3.480352 +0.093728 0.149152 0.212608 8.897504 3.491584 +0.093728 0.150848 0.216672 9.040928 3.487680 +0.093856 0.148640 0.214464 8.931968 3.498560 +0.099872 0.158304 0.210240 9.860448 3.502240 +0.093952 0.149344 0.217792 8.807712 3.463392 +0.094080 0.150240 0.213504 8.883232 3.480896 +0.093024 0.151456 0.216032 8.972928 3.493824 +0.094144 0.149984 0.213856 8.850848 3.502080 +0.093600 0.148960 0.212224 9.088160 3.496480 +0.093600 0.151360 0.207424 8.712864 3.475680 +0.093728 0.150368 0.214176 9.022560 3.493152 +0.094112 0.150880 0.209664 8.823104 3.469376 +0.093696 0.150976 0.214560 8.969952 3.472320 +0.093344 0.151424 0.216768 8.793984 3.518784 +0.093632 0.150880 0.212256 8.697888 3.492672 +0.093568 0.149760 0.217056 8.649888 3.488800 +0.093472 0.150720 0.214752 9.031328 3.491584 +0.093568 0.149248 0.208640 8.849280 3.461696 +0.094208 0.151328 0.209184 8.717376 3.449216 +0.093792 0.153088 0.208928 8.698400 3.488064 +0.093952 0.149344 0.214336 8.805824 3.500448 +0.093984 0.150944 0.213888 8.733696 3.487008 +0.093856 0.149024 0.210432 8.772896 3.501888 +0.093504 0.150304 0.207680 8.803872 3.473120 +0.093824 0.149216 0.211872 8.934880 3.490176 +0.093984 0.147840 0.215616 8.611264 3.484064 +0.093920 0.151104 0.212544 8.923872 3.487520 +0.093984 0.152736 0.217120 9.066080 3.498144 +0.093600 0.153280 0.211456 8.821472 3.465184 +0.093728 0.149504 0.210784 9.068512 3.487328 +0.093824 0.149536 0.217408 8.934784 3.499552 +0.093920 0.149056 0.211008 9.023424 3.479200 +0.093824 0.149600 0.214784 8.645376 3.481760 +0.100160 0.157312 0.212576 10.118432 3.526304 +0.094624 0.151104 0.213056 8.867808 3.496096 +0.093952 0.149408 0.212832 9.074464 3.487712 +0.093632 0.151520 0.215104 8.973312 3.518880 +0.093824 0.149184 0.213632 9.056416 3.481504 +0.093856 0.149984 0.212384 8.518976 3.489536 +0.093632 0.149856 0.211840 9.001728 3.496064 +0.093408 0.150592 0.212032 9.196800 3.489056 +0.093696 0.150496 0.219232 8.963040 3.504704 +0.094784 0.156224 0.212832 8.840448 3.465856 +0.093920 0.148224 0.212608 9.077504 3.519776 +0.093568 0.150176 0.211776 8.870368 3.479072 +0.093760 0.150272 0.213440 8.508224 3.476672 +0.093376 0.151040 0.209184 8.947808 3.496896 +0.093568 0.149664 0.215072 8.582400 3.471392 +0.094208 0.148512 0.207264 8.943456 3.474592 +0.093472 0.150656 0.215648 8.958528 3.498464 +0.094400 0.149952 0.209920 8.739968 3.462144 +0.094112 0.148768 0.215968 8.855680 3.485152 +0.094240 0.148992 0.215584 8.845568 3.485632 +0.093696 0.149408 0.208992 8.809824 3.470016 +0.093536 0.149248 0.214496 8.901760 3.497824 +0.093600 0.149600 0.213504 8.674752 3.485664 +0.093664 0.148800 0.212032 8.719648 3.476928 +0.094112 0.148864 0.211296 8.715616 3.477344 +0.093856 0.149376 0.212128 8.530752 3.482432 +0.093728 0.149376 0.222560 8.931296 3.472384 +0.093696 0.149248 0.213056 9.023936 3.490464 +0.093600 0.149920 0.211360 8.870784 3.507904 +0.093920 0.149120 0.214336 8.872128 3.476512 +0.107776 0.154304 0.212992 10.508160 3.519808 +0.093984 0.150592 0.213760 8.905056 3.493952 +0.093760 0.149280 0.211648 8.878880 3.489952 +0.093696 0.149152 0.216160 8.394400 3.470272 +0.094016 0.153632 0.210976 8.782208 3.518976 +0.094560 0.148928 0.214880 8.731552 3.497888 +0.093600 0.150784 0.211488 9.025280 3.480352 +0.093600 0.149792 0.217856 8.857216 3.507328 +0.094144 0.153696 0.212384 8.819136 3.493632 +0.093952 0.149344 0.217472 8.585088 3.482752 +0.095008 0.148640 0.209408 8.775360 3.467936 +0.094048 0.149952 0.216480 8.946368 3.512544 +0.094176 0.149216 0.216192 9.026208 3.484096 +0.093728 0.149056 0.214016 9.215136 3.496928 +0.093472 0.150112 0.210752 8.985056 3.496736 +0.093632 0.151232 0.207136 8.579232 3.478176 +0.093216 0.151744 0.214976 8.737984 3.467648 +0.094016 0.148704 0.212064 9.140288 3.491488 +0.094368 0.147904 0.217760 8.530112 3.474720 +0.093600 0.150720 0.214880 8.916544 3.488640 +0.093920 0.148736 0.215680 8.631008 3.481824 +0.093824 0.148448 0.212256 8.528640 3.506464 +0.093856 0.152640 0.214112 8.804096 3.458112 +0.093824 0.148256 0.208864 8.734720 3.477472 +0.094368 0.150240 0.214944 8.728832 3.483488 +0.093600 0.151296 0.212384 8.918528 3.477312 +0.094048 0.151808 0.213408 8.911392 3.487552 +0.093792 0.149344 0.210688 8.978528 3.505088 +0.093728 0.150528 0.215968 8.703264 3.474816 +0.093664 0.152896 0.217568 9.131200 3.520544 +0.101216 0.156864 0.213568 10.414432 3.501376 +0.094080 0.150240 0.219200 8.923072 3.501056 +0.093472 0.150496 0.221472 8.750784 3.469184 +0.093824 0.150880 0.210400 8.973568 3.487520 +0.093952 0.152000 0.211584 8.809216 3.461664 +0.093504 0.148384 0.208288 8.926592 3.502816 +0.094496 0.150304 0.215360 8.987744 3.495168 +0.094176 0.150208 0.214144 8.865856 3.494720 +0.093632 0.153376 0.212928 8.828992 3.451712 +0.093568 0.151264 0.211840 8.866784 3.484704 +0.093504 0.150368 0.211296 8.803296 3.502784 +0.093632 0.149792 0.217344 8.731488 3.483648 +0.093568 0.150688 0.214880 8.733120 3.467584 +0.093632 0.151584 0.219104 9.147584 3.500064 +0.093760 0.150976 0.210240 8.816768 3.494336 +0.094400 0.148672 0.212224 8.749472 3.479328 +0.093536 0.150400 0.213408 8.690272 3.472128 +0.094496 0.149536 0.212128 8.993856 3.495232 +0.093856 0.150240 0.214048 8.605376 3.470912 +0.094240 0.149312 0.215680 8.918400 3.492800 +0.094016 0.149920 0.212000 8.955072 3.495392 +0.093696 0.148704 0.209440 9.087392 3.510784 +0.093632 0.151680 0.210112 8.758688 3.491104 +0.093728 0.149856 0.214944 8.672896 3.503072 +0.093568 0.148864 0.214176 8.526112 3.477824 +0.093632 0.149088 0.212000 9.020768 3.477600 +0.093408 0.149344 0.209088 8.903104 3.482432 +0.094304 0.148640 0.217696 8.751616 3.470464 +0.093248 0.149632 0.208704 8.850592 3.474112 +0.094528 0.151008 0.210976 8.817152 3.490656 +0.100288 0.158752 0.211360 9.603424 3.516992 +0.094400 0.151328 0.212224 8.927360 3.496480 +0.094144 0.152704 0.219008 9.091136 3.488160 +0.094304 0.150144 0.211104 8.284384 3.470560 +0.093888 0.172128 0.213504 8.840448 3.473472 +0.093408 0.153376 0.212096 8.638720 3.480256 +0.093696 0.148768 0.208736 8.853024 3.462272 +0.093824 0.151584 0.215968 8.996864 3.482976 +0.093824 0.148512 0.217760 9.126368 3.516224 +0.093792 0.152224 0.210912 8.926080 3.486528 +0.093696 0.151360 0.210400 8.893888 3.469728 +0.093568 0.148320 0.212064 9.002912 3.503296 +0.093760 0.153632 0.206848 8.902848 3.489280 +0.093376 0.149984 0.210976 8.685120 3.475712 +0.094112 0.149280 0.220192 8.881504 3.512608 +0.094240 0.150400 0.209216 8.891008 3.503008 +0.093120 0.150944 0.211328 8.540064 3.467584 +0.094176 0.148576 0.214176 8.804064 3.475552 +0.093472 0.152960 0.214336 9.015456 3.491616 +0.093408 0.150880 0.215008 8.893408 3.522688 +0.094112 0.149216 0.212032 8.785952 3.501088 +0.094144 0.148320 0.213248 8.983680 3.516448 +0.093184 0.149888 0.211936 8.629568 3.485056 +0.093760 0.150304 0.212352 8.951616 3.501856 +0.093504 0.149888 0.213152 9.072832 3.493056 +0.093824 0.149760 0.213760 8.994720 3.475040 +0.093696 0.150784 0.210656 8.917120 3.471776 +0.093280 0.152320 0.220640 9.068288 3.476608 +0.094048 0.150688 0.214944 8.333984 3.482752 +0.093856 0.150848 0.214400 8.868480 3.500000 +0.099328 0.158400 0.212576 10.329152 3.502144 +0.094048 0.149920 0.217312 9.030720 3.495904 diff --git a/data/cow_nobfc.txt b/data/cow_nobfc.txt new file mode 100644 index 0000000..940cbc1 --- /dev/null +++ b/data/cow_nobfc.txt @@ -0,0 +1,500 @@ +0.097952 0.157664 0.500032 10.272800 3.609824 +0.108384 0.167808 0.496256 10.405216 3.904512 +0.101120 0.166944 0.511072 10.076800 3.561952 +0.099264 0.158240 0.508480 9.973088 3.567904 +0.098528 0.160032 0.501600 9.988768 3.537408 +0.096672 0.154368 0.487008 9.815520 3.549408 +0.096192 0.153248 0.479392 10.007328 3.553376 +0.095968 0.154656 0.488160 9.838112 3.572096 +0.098080 0.155904 0.486624 9.845792 3.564064 +0.096448 0.155776 0.486528 9.211776 3.521856 +0.090080 0.143296 0.459296 9.294144 3.507616 +0.090144 0.143904 0.460384 9.267776 3.529344 +0.090048 0.147840 0.456800 9.157024 3.502368 +0.089824 0.142816 0.447712 9.063360 3.512320 +0.090176 0.143872 0.457312 9.165088 3.512864 +0.088736 0.141568 0.452928 8.942048 3.487360 +0.089216 0.140640 0.447616 9.068096 3.517248 +0.089184 0.143360 0.444256 9.002720 3.516160 +0.089632 0.142112 0.444576 8.739424 3.513440 +0.088224 0.141472 0.451648 9.204576 3.488032 +0.088640 0.139392 0.450336 8.879360 3.493536 +0.088736 0.141824 0.443744 9.043040 3.507680 +0.088352 0.139872 0.451648 9.065056 3.496448 +0.088288 0.140576 0.454112 8.922304 3.495744 +0.088992 0.140608 0.453024 8.925024 3.494496 +0.088064 0.141632 0.445824 8.857696 3.521376 +0.088608 0.139840 0.445696 9.045760 3.516128 +0.089344 0.142240 0.444256 9.265440 3.505152 +0.088832 0.141120 0.447648 9.046848 3.503776 +0.088160 0.140576 0.454464 9.026944 3.502624 +0.088832 0.141792 0.451712 9.007424 3.515520 +0.097792 0.147712 0.454080 9.065568 3.798112 +0.089088 0.142528 0.452992 9.097152 3.505856 +0.088832 0.141024 0.451328 8.827552 3.523168 +0.088192 0.139776 0.450880 9.071424 3.502112 +0.088672 0.142528 0.447776 9.121984 3.519648 +0.088544 0.141600 0.454816 9.232256 3.516832 +0.088608 0.141152 0.453632 8.926624 3.500704 +0.088544 0.140608 0.451200 8.985504 3.516320 +0.088224 0.142304 0.447008 9.018912 3.486976 +0.088128 0.140544 0.453120 9.086976 3.494208 +0.088256 0.142912 0.449664 9.062816 3.508448 +0.088544 0.141056 0.447136 8.869856 3.516288 +0.088672 0.140384 0.449760 8.896608 3.505440 +0.088288 0.141536 0.452416 9.277024 3.507552 +0.088416 0.140960 0.452096 8.881056 3.507552 +0.088800 0.140480 0.449472 8.734176 3.489760 +0.089088 0.142432 0.440736 9.079488 3.522464 +0.089440 0.140896 0.453824 9.068160 3.493952 +0.088544 0.140416 0.450752 9.063680 3.507136 +0.089216 0.141184 0.446144 9.056544 3.492256 +0.088800 0.141472 0.453280 9.131904 3.495552 +0.088448 0.140320 0.446752 9.306368 3.508864 +0.088864 0.139424 0.452192 9.020768 3.501632 +0.089184 0.141056 0.445344 8.959104 3.504032 +0.088800 0.139712 0.447712 9.005216 3.478752 +0.088384 0.142880 0.451456 9.160768 3.504160 +0.089056 0.141280 0.445312 9.090464 3.508448 +0.088288 0.143712 0.446592 8.803776 3.500160 +0.088608 0.138944 0.448320 8.766880 3.472480 +0.089216 0.142592 0.452000 8.953536 3.504800 +0.096000 0.155008 0.460832 9.315648 3.790816 +0.088704 0.141056 0.450688 9.029216 3.488736 +0.088768 0.141216 0.445920 9.094528 3.501056 +0.088800 0.140672 0.447584 9.143424 3.520544 +0.088096 0.140672 0.450784 8.850528 3.519232 +0.088640 0.142016 0.445440 8.644288 3.490432 +0.088480 0.141792 0.438752 8.988352 3.501824 +0.088512 0.142112 0.449344 8.899008 3.520256 +0.088544 0.140800 0.452128 8.650944 3.494656 +0.089184 0.142176 0.453856 9.167328 3.510400 +0.088736 0.144288 0.445536 8.994720 3.492128 +0.088928 0.141984 0.450240 9.200704 3.511648 +0.088352 0.140224 0.449248 8.874816 3.490368 +0.088064 0.141248 0.446592 9.139168 3.508608 +0.088672 0.140352 0.449696 8.836128 3.504096 +0.089024 0.141248 0.445632 8.566880 3.491232 +0.089440 0.140992 0.451840 8.857408 3.504640 +0.088960 0.141472 0.449984 9.044064 3.532096 +0.088256 0.142912 0.447616 8.742240 3.510304 +0.088416 0.140160 0.453408 9.087712 3.491872 +0.089248 0.139488 0.447648 8.992384 3.510304 +0.088640 0.145120 0.453344 9.138496 3.510656 +0.088896 0.142432 0.448640 8.950752 3.515296 +0.088544 0.141056 0.446976 8.958752 3.509824 +0.088128 0.139648 0.445280 9.311328 3.531456 +0.088320 0.144128 0.447904 8.969280 3.499232 +0.088832 0.140480 0.449216 8.877888 3.485568 +0.088224 0.141984 0.452032 9.024800 3.498368 +0.088192 0.145248 0.453344 9.128288 3.512672 +0.088672 0.141856 0.441664 9.096320 3.493696 +0.095968 0.148416 0.449088 9.031680 3.783136 +0.089120 0.141440 0.449408 9.032480 3.537344 +0.088768 0.140992 0.449536 8.921984 3.532288 +0.087904 0.165344 0.446464 9.052096 3.496192 +0.088608 0.140000 0.454880 8.878112 3.496288 +0.088928 0.143936 0.450816 9.103456 3.529984 +0.088608 0.139904 0.454496 9.016256 3.499872 +0.088576 0.140800 0.453152 8.989152 3.469728 +0.088896 0.146208 0.455200 8.835296 3.507584 +0.089120 0.142240 0.446656 8.832896 3.502720 +0.087936 0.141600 0.450880 8.758336 3.489440 +0.089408 0.141696 0.450912 9.147744 3.534912 +0.088640 0.140960 0.452000 8.879328 3.501856 +0.088352 0.141760 0.446880 8.976032 3.523168 +0.088320 0.141280 0.446464 9.081024 3.513504 +0.088320 0.142912 0.453824 9.021504 3.495936 +0.088992 0.142176 0.450592 8.548160 3.503744 +0.089056 0.139840 0.446912 8.768896 3.507712 +0.087968 0.141184 0.449984 9.031136 3.481696 +0.088384 0.140544 0.448448 9.184608 3.499744 +0.088864 0.141280 0.450912 8.987840 3.521728 +0.088288 0.140768 0.447360 9.193312 3.500576 +0.088256 0.140640 0.455904 8.735584 3.496736 +0.088576 0.140928 0.455552 8.913952 3.499616 +0.088640 0.140928 0.451488 9.204992 3.488896 +0.088448 0.141920 0.448672 8.832608 3.494976 +0.088352 0.140992 0.454720 9.271808 3.504608 +0.087808 0.142528 0.447520 8.879328 3.525184 +0.088032 0.141312 0.454752 8.723968 3.494816 +0.088864 0.144416 0.447712 8.883488 3.502016 +0.097248 0.148640 0.444736 8.844640 3.773088 +0.088288 0.141696 0.445728 9.105728 3.507680 +0.088768 0.141248 0.451392 8.971552 3.517280 +0.088608 0.143168 0.448416 8.997856 3.510656 +0.088736 0.141024 0.453696 8.977184 3.519424 +0.089344 0.143040 0.451104 9.251392 3.513248 +0.088448 0.141888 0.454208 8.804768 3.489184 +0.089024 0.141376 0.455520 9.184896 3.506176 +0.088992 0.142272 0.455296 8.815104 3.529664 +0.088864 0.140288 0.446688 9.044192 3.503584 +0.088576 0.139488 0.428768 8.960128 3.466816 +0.088992 0.141120 0.447616 9.103840 3.512800 +0.088000 0.142560 0.443712 8.891648 3.508896 +0.088512 0.141344 0.449696 9.068416 3.503392 +0.088928 0.143872 0.446528 9.411104 3.491104 +0.089216 0.143968 0.450976 9.433504 3.496448 +0.088832 0.141472 0.442400 8.987584 3.506080 +0.088928 0.146336 0.445056 9.154848 3.485408 +0.089056 0.140352 0.453984 9.131456 3.500864 +0.088384 0.141984 0.453856 8.997792 3.503040 +0.088832 0.141792 0.447872 8.894688 3.503488 +0.088352 0.140224 0.454336 8.896896 3.501472 +0.088544 0.140192 0.446176 8.990464 3.514656 +0.088288 0.140832 0.446080 9.209824 3.509664 +0.088352 0.141824 0.453568 8.968384 3.516128 +0.087936 0.141312 0.445376 9.014592 3.511616 +0.088896 0.140640 0.447520 9.107136 3.522496 +0.088448 0.143296 0.447200 9.331904 3.523328 +0.088416 0.140416 0.448960 8.725824 3.491552 +0.088640 0.140608 0.456192 9.173184 3.493696 +0.095168 0.152864 0.447008 9.048928 3.771072 +0.088416 0.143584 0.450304 9.115264 3.487392 +0.089152 0.144352 0.454048 9.346304 3.509024 +0.088288 0.139616 0.447424 9.084064 3.504544 +0.088256 0.139744 0.452544 9.040032 3.511776 +0.088352 0.142176 0.453728 9.088928 3.515104 +0.088896 0.140384 0.439264 9.142304 3.496448 +0.088512 0.142208 0.447648 8.820672 3.512448 +0.088992 0.142112 0.454880 8.846528 3.492960 +0.088416 0.142272 0.437120 8.847136 3.496768 +0.088160 0.141248 0.453536 9.070304 3.528704 +0.088672 0.140800 0.446432 8.945920 3.514304 +0.089024 0.145280 0.452512 8.770880 3.496160 +0.088672 0.140800 0.453664 8.955616 3.491616 +0.088640 0.142528 0.446880 8.879232 3.496000 +0.088032 0.141120 0.448160 8.898944 3.516640 +0.088736 0.139360 0.443840 8.885728 3.516672 +0.088928 0.140832 0.446752 8.879648 3.486624 +0.088672 0.139712 0.449248 9.212704 3.517344 +0.088256 0.141632 0.444640 8.995040 3.506592 +0.089504 0.141568 0.450144 9.218720 3.506784 +0.088544 0.143328 0.446144 8.773088 3.508320 +0.088288 0.142720 0.436704 9.070656 3.487360 +0.088704 0.139584 0.456288 8.801792 3.486752 +0.088576 0.140032 0.444160 8.980288 3.516160 +0.088320 0.140640 0.451456 9.173696 3.511296 +0.088576 0.141536 0.449856 8.760032 3.524736 +0.088512 0.141344 0.451680 8.980864 3.510016 +0.088416 0.139936 0.454752 9.148352 3.491424 +0.088640 0.142464 0.441696 9.038112 3.487552 +0.105184 0.150080 0.448992 8.595744 3.745216 +0.091776 0.143232 0.453600 9.169696 3.493504 +0.088416 0.141728 0.440416 9.045088 3.508800 +0.088352 0.142944 0.451264 8.900192 3.481440 +0.088480 0.141536 0.445952 9.124192 3.509856 +0.088768 0.142080 0.448960 8.738048 3.515648 +0.089248 0.141248 0.446944 8.942464 3.526912 +0.088480 0.141472 0.452864 8.658656 3.490912 +0.088704 0.140928 0.449824 8.946336 3.507520 +0.089088 0.142080 0.449888 8.874048 3.494304 +0.089536 0.141984 0.448160 9.089056 3.512096 +0.090048 0.141888 0.446592 8.867904 3.484288 +0.088320 0.140864 0.454400 9.140160 3.494816 +0.088576 0.141280 0.448064 9.080672 3.506944 +0.088480 0.140000 0.453888 8.897088 3.480320 +0.088608 0.140896 0.444320 8.898240 3.509760 +0.089184 0.142560 0.452032 9.080512 3.513696 +0.088640 0.140448 0.438976 9.052896 3.519968 +0.088352 0.141696 0.444608 8.851424 3.522528 +0.088544 0.141664 0.453792 9.219776 3.493312 +0.088576 0.143616 0.431424 8.812960 3.498496 +0.088480 0.142496 0.432448 9.191872 3.500928 +0.088032 0.140736 0.447520 9.063872 3.490016 +0.089088 0.142912 0.451936 8.825792 3.514112 +0.088032 0.141888 0.447424 8.745984 3.497152 +0.088224 0.139936 0.424320 9.231712 3.507232 +0.088608 0.140800 0.437440 9.015456 3.495520 +0.088672 0.141280 0.451616 8.852704 3.471328 +0.088608 0.140256 0.453600 9.169504 3.524608 +0.088704 0.141472 0.440352 8.927968 3.510720 +0.100704 0.148928 0.446752 9.007872 3.793472 +0.088928 0.140576 0.454688 8.860032 3.491456 +0.088896 0.141440 0.448448 8.779296 3.482880 +0.089024 0.141344 0.453696 9.034784 3.498048 +0.088448 0.140704 0.453600 9.046560 3.498048 +0.089120 0.142304 0.451616 9.025344 3.504928 +0.088800 0.141472 0.453024 8.909216 3.512352 +0.088096 0.140256 0.445696 8.898208 3.514784 +0.088864 0.141952 0.449280 8.898720 3.511424 +0.088544 0.141760 0.453248 9.329248 3.502656 +0.088896 0.142368 0.442464 8.708544 3.496928 +0.088576 0.144192 0.453600 8.969728 3.514144 +0.088352 0.141344 0.449248 8.915104 3.505536 +0.088544 0.145792 0.448256 9.048032 3.496096 +0.089472 0.142144 0.452768 9.379296 3.509344 +0.088704 0.141152 0.444960 9.087552 3.505344 +0.088960 0.142304 0.450848 8.994464 3.503488 +0.088480 0.140320 0.454400 8.888160 3.499136 +0.088128 0.141408 0.454560 9.201568 3.480032 +0.088832 0.143232 0.446688 8.910272 3.524448 +0.088896 0.140512 0.448096 8.922400 3.515136 +0.088288 0.141760 0.454976 9.097824 3.489824 +0.088320 0.139488 0.453376 9.121760 3.501120 +0.088352 0.142080 0.450144 8.767872 3.499520 +0.088224 0.140992 0.452352 8.788832 3.486016 +0.089088 0.141056 0.453728 9.153728 3.511264 +0.088736 0.140928 0.447392 9.162688 3.486240 +0.088128 0.140384 0.448064 8.991008 3.503424 +0.088352 0.140256 0.448704 9.134496 3.498144 +0.088800 0.142656 0.438720 8.930336 3.517056 +0.094720 0.147424 0.440672 9.358688 3.818816 +0.089184 0.140960 0.455232 8.887296 3.509920 +0.089280 0.140416 0.432576 8.998432 3.496672 +0.088928 0.143008 0.448352 8.940896 3.489952 +0.087872 0.139456 0.453088 9.157376 3.494592 +0.088768 0.142336 0.452992 8.767552 3.487744 +0.088576 0.140736 0.446304 9.063840 3.502880 +0.088224 0.141408 0.449408 9.099424 3.484832 +0.089216 0.142592 0.450208 9.023072 3.511104 +0.088544 0.141248 0.436032 8.643936 3.495360 +0.088512 0.139680 0.453216 8.805408 3.518944 +0.088640 0.142176 0.444992 9.171744 3.522496 +0.088416 0.141344 0.450016 8.993824 3.499840 +0.088256 0.141344 0.455328 9.022144 3.513952 +0.088960 0.140992 0.449984 8.945568 3.509984 +0.088608 0.144544 0.455168 8.815328 3.502528 +0.089632 0.140096 0.455168 8.883840 3.480832 +0.089056 0.141952 0.453984 9.127520 3.502048 +0.088032 0.139712 0.445984 8.715456 3.526304 +0.088096 0.140000 0.447104 9.009984 3.504032 +0.088512 0.141248 0.446048 8.937248 3.502656 +0.088448 0.140000 0.452960 8.974304 3.482560 +0.088896 0.141088 0.453536 8.708800 3.483808 +0.088512 0.143008 0.453376 9.077408 3.495264 +0.087872 0.139712 0.453696 9.194048 3.508192 +0.088512 0.141408 0.443488 9.014848 3.499136 +0.089152 0.142432 0.454080 9.047680 3.506624 +0.088480 0.140544 0.448384 8.787680 3.485440 +0.088192 0.140672 0.445760 9.201536 3.487168 +0.089536 0.141024 0.445696 8.944576 3.504352 +0.096096 0.146464 0.446720 8.710944 3.782144 +0.089088 0.144320 0.446656 9.255104 3.509856 +0.088960 0.142880 0.444544 8.972256 3.486752 +0.088128 0.141696 0.451520 9.252352 3.499872 +0.088576 0.141984 0.442464 8.830592 3.503328 +0.088800 0.143040 0.449504 9.026528 3.520160 +0.089280 0.141312 0.446272 8.912992 3.524320 +0.089280 0.141760 0.433696 9.123776 3.488544 +0.089056 0.142624 0.448800 9.132928 3.481472 +0.088064 0.141984 0.444704 9.242848 3.512640 +0.088352 0.141824 0.449344 9.098368 3.489824 +0.088576 0.141216 0.452768 8.715904 3.480960 +0.088064 0.162688 0.450336 8.981216 3.507872 +0.088288 0.141408 0.449312 8.883744 3.491360 +0.088512 0.141760 0.446528 8.917632 3.501312 +0.088736 0.142400 0.451872 8.874912 3.499744 +0.088800 0.141152 0.450592 8.494112 3.524128 +0.089280 0.141248 0.451744 8.959360 3.501344 +0.088608 0.139424 0.453856 9.069408 3.494624 +0.088768 0.140320 0.454144 8.998272 3.499008 +0.088736 0.141536 0.444032 8.952608 3.499392 +0.088544 0.140480 0.454720 9.107648 3.497152 +0.088480 0.141024 0.449184 8.690592 3.508096 +0.088576 0.144800 0.446560 9.078976 3.489568 +0.088192 0.142336 0.445536 8.977824 3.516992 +0.088480 0.145312 0.444032 8.873120 3.509472 +0.088512 0.140704 0.453440 8.981184 3.498240 +0.088160 0.144256 0.453344 9.262912 3.499232 +0.088736 0.144896 0.455104 8.792736 3.492032 +0.088608 0.142016 0.448736 8.762080 3.509056 +0.096384 0.146624 0.455008 8.911328 3.847168 +0.088736 0.145632 0.454048 8.873408 3.498592 +0.088704 0.140160 0.447616 9.092864 3.506336 +0.088224 0.143328 0.444608 9.153536 3.499968 +0.088352 0.141472 0.441920 9.280416 3.493600 +0.088512 0.140928 0.448384 8.753312 3.501376 +0.088224 0.141280 0.453888 9.061696 3.506080 +0.088352 0.140352 0.453824 8.925280 3.504480 +0.088832 0.140224 0.450016 9.027520 3.493280 +0.088320 0.142784 0.437696 8.958848 3.525824 +0.088768 0.141792 0.448288 9.030912 3.517152 +0.089120 0.139776 0.452352 9.038016 3.502784 +0.088416 0.140992 0.450944 9.213408 3.523872 +0.088288 0.141472 0.448512 9.077888 3.512064 +0.088800 0.141152 0.454592 9.278176 3.488384 +0.088896 0.144064 0.446080 9.004864 3.502560 +0.088448 0.140224 0.450688 9.045760 3.509824 +0.088544 0.140320 0.431936 8.950720 3.478304 +0.088448 0.141440 0.452320 8.883936 3.491648 +0.088320 0.140128 0.454208 8.951168 3.498688 +0.089088 0.141728 0.434560 9.018784 3.491360 +0.088704 0.140288 0.454944 9.214368 3.497760 +0.088256 0.140992 0.447776 9.054016 3.495168 +0.088384 0.142592 0.449408 8.915392 3.525280 +0.088672 0.139200 0.449184 8.829312 3.506464 +0.088640 0.140608 0.448064 9.260448 3.504672 +0.088864 0.140064 0.437856 8.966592 3.511904 +0.088896 0.143392 0.444768 8.854656 3.509248 +0.088672 0.139712 0.444896 9.022752 3.510624 +0.088896 0.139840 0.445984 8.975648 3.491584 +0.095520 0.147264 0.447264 9.100416 3.786208 +0.088480 0.140064 0.454656 9.396800 3.515296 +0.088608 0.139072 0.454208 8.878336 3.467264 +0.088768 0.145888 0.442112 9.038816 3.491168 +0.088096 0.141248 0.442944 9.123008 3.486944 +0.088608 0.143680 0.446272 8.738784 3.496320 +0.088576 0.140992 0.455552 9.002368 3.489248 +0.088576 0.141792 0.454016 8.835872 3.477824 +0.088704 0.140288 0.448800 9.027584 3.486368 +0.088704 0.140608 0.445184 9.285632 3.520992 +0.088480 0.141120 0.444896 9.133248 3.495200 +0.088640 0.139776 0.448800 8.935808 3.507104 +0.088544 0.141312 0.449984 8.959648 3.502784 +0.088320 0.140192 0.452448 8.938528 3.502176 +0.088352 0.141408 0.450752 8.968416 3.513696 +0.088640 0.141760 0.446208 8.896288 3.502240 +0.088928 0.145824 0.446432 8.956096 3.493824 +0.088352 0.141440 0.451648 8.957152 3.516000 +0.088384 0.144352 0.455296 9.055552 3.511968 +0.088224 0.142880 0.454176 9.109568 3.495104 +0.088832 0.140288 0.449344 8.745728 3.510112 +0.088480 0.142016 0.452320 8.996096 3.507136 +0.087872 0.140320 0.455808 9.020320 3.498720 +0.089216 0.141344 0.448288 8.931584 3.507872 +0.088224 0.141344 0.446336 8.918560 3.526304 +0.088800 0.141888 0.452736 9.262304 3.527584 +0.088672 0.140800 0.451520 9.166976 3.493472 +0.088992 0.141376 0.440320 8.515040 3.500512 +0.088576 0.141184 0.446336 8.985920 3.496608 +0.088736 0.140864 0.455680 8.976128 3.487456 +0.095840 0.148960 0.456608 9.183520 3.810368 +0.088672 0.143616 0.448832 9.046688 3.499936 +0.089248 0.141952 0.455136 8.884352 3.515520 +0.088352 0.141376 0.446208 8.953856 3.495584 +0.088768 0.140960 0.454752 9.063712 3.494400 +0.088928 0.140640 0.445120 9.179264 3.495712 +0.088256 0.139936 0.447424 9.110240 3.503520 +0.088096 0.142464 0.450272 9.059360 3.503680 +0.088576 0.141280 0.448224 9.118976 3.509632 +0.088064 0.142112 0.439616 9.087264 3.495488 +0.089280 0.141536 0.444992 8.950944 3.508928 +0.088800 0.143136 0.451456 8.881408 3.508992 +0.088416 0.140192 0.435328 8.888352 3.502688 +0.088672 0.140128 0.456288 9.062688 3.517280 +0.088864 0.141408 0.451648 9.104384 3.489216 +0.089056 0.142176 0.438976 8.809792 3.501344 +0.089408 0.142368 0.447712 8.995520 3.483328 +0.088896 0.141344 0.428032 9.011200 3.521024 +0.089568 0.141664 0.452416 9.110336 3.505568 +0.088704 0.144704 0.454496 9.093248 3.528384 +0.088832 0.143168 0.446304 9.023872 3.508800 +0.088576 0.143552 0.446112 8.993248 3.507776 +0.088608 0.142112 0.453440 9.043488 3.523904 +0.088480 0.142656 0.450816 9.064288 3.519200 +0.088544 0.141408 0.454688 9.124448 3.498016 +0.088224 0.141024 0.450240 9.069408 3.487072 +0.089056 0.140544 0.447488 8.726944 3.497952 +0.088576 0.146848 0.446272 9.106816 3.510816 +0.088288 0.141760 0.441248 8.906848 3.490880 +0.089344 0.142432 0.452320 8.809312 3.496800 +0.095456 0.150528 0.450688 8.906240 3.798240 +0.088160 0.141824 0.453248 8.847360 3.513472 +0.088864 0.142432 0.451808 8.754944 3.500960 +0.088256 0.140192 0.442432 8.921120 3.517120 +0.088864 0.141728 0.446816 9.051936 3.511360 +0.088640 0.143360 0.450528 8.782944 3.498880 +0.088416 0.141408 0.448608 8.685600 3.473760 +0.089088 0.140640 0.452736 9.153760 3.517408 +0.089056 0.140640 0.454272 8.753920 3.473216 +0.088416 0.141792 0.447840 9.058272 3.498912 +0.088416 0.140320 0.454272 9.124608 3.526048 +0.088832 0.142624 0.449824 8.889248 3.504384 +0.088352 0.140480 0.453632 9.414400 3.498144 +0.088352 0.139808 0.446016 9.154560 3.515200 +0.088960 0.140960 0.453152 9.352352 3.509568 +0.089248 0.141216 0.446208 8.856608 3.468960 +0.088864 0.140096 0.453344 9.144896 3.521984 +0.088608 0.142592 0.454112 8.999552 3.533568 +0.088128 0.140640 0.444608 9.237600 3.495712 +0.088544 0.140480 0.451136 9.107232 3.491520 +0.089280 0.140128 0.452704 8.921024 3.490912 +0.088928 0.139904 0.449184 8.923648 3.491840 +0.088672 0.139968 0.449376 9.102848 3.497792 +0.088384 0.141248 0.453184 9.019808 3.509632 +0.088448 0.140512 0.452192 9.025760 3.487008 +0.088672 0.140640 0.453056 9.144064 3.506112 +0.088928 0.143360 0.449664 8.855392 3.498976 +0.088640 0.140800 0.447328 8.922368 3.499808 +0.088992 0.140032 0.448000 8.934464 3.484224 +0.088960 0.140864 0.452768 9.160832 3.518976 +0.096032 0.148064 0.451936 9.229568 3.804256 +0.088768 0.140800 0.453600 9.009664 3.521888 +0.088512 0.142272 0.446784 8.940352 3.519200 +0.088224 0.140704 0.447680 8.763872 3.495872 +0.087776 0.140608 0.448512 8.754272 3.507008 +0.088640 0.141600 0.446144 8.939520 3.512768 +0.088352 0.141696 0.449728 9.076128 3.479424 +0.088832 0.141504 0.450144 8.941312 3.499264 +0.088928 0.141440 0.449312 8.883072 3.474208 +0.088480 0.141888 0.454240 9.173408 3.513472 +0.087936 0.142560 0.452928 8.985088 3.516000 +0.089344 0.141504 0.445600 8.717600 3.525600 +0.087776 0.142688 0.449600 9.071904 3.495360 +0.088608 0.139488 0.450496 8.959488 3.492384 +0.088416 0.142592 0.443968 9.065664 3.513248 +0.088640 0.140960 0.453536 9.121664 3.499008 +0.088640 0.141696 0.454432 9.068000 3.509184 +0.088640 0.141120 0.446496 8.897632 3.493920 +0.088384 0.140448 0.447392 9.285152 3.502272 +0.088448 0.144992 0.448384 8.976896 3.509760 +0.088448 0.140544 0.453312 8.970208 3.514720 +0.088192 0.139680 0.445856 8.953216 3.511680 +0.088672 0.140384 0.442368 8.741312 3.496032 +0.088928 0.141504 0.454816 8.912288 3.505312 +0.087872 0.141280 0.455616 9.153952 3.510400 +0.088192 0.140800 0.451616 8.999872 3.495520 +0.088864 0.145568 0.453920 8.993024 3.495200 +0.088000 0.143360 0.451648 8.904608 3.519424 +0.088192 0.142784 0.452096 9.235488 3.514400 +0.088992 0.139968 0.447712 8.922208 3.518368 +0.096320 0.148032 0.446848 9.232064 3.779552 +0.089824 0.140352 0.448832 9.165920 3.497632 +0.088512 0.141376 0.452768 9.048160 3.503520 +0.088288 0.142976 0.445280 9.042496 3.509760 +0.088672 0.146208 0.443808 8.836800 3.491840 +0.088800 0.142400 0.451552 8.938080 3.510656 +0.088448 0.140736 0.452256 9.166752 3.499776 +0.088032 0.142848 0.452800 9.063904 3.491296 +0.088640 0.140384 0.450976 8.954688 3.502976 +0.088800 0.140576 0.453504 9.207968 3.508704 +0.088448 0.140096 0.446080 8.950240 3.506112 +0.089024 0.141536 0.449728 8.890272 3.500416 +0.088224 0.140672 0.451008 8.858368 3.511072 +0.088320 0.139520 0.440416 9.021824 3.510752 +0.088544 0.140864 0.447936 8.921984 3.515552 +0.088672 0.141856 0.448768 8.700736 3.530752 +0.088512 0.141120 0.455104 8.691552 3.497344 +0.088544 0.139424 0.452832 9.056512 3.510240 +0.088192 0.142272 0.452576 8.850496 3.506656 +0.088736 0.141856 0.449632 8.994176 3.506112 +0.089248 0.141824 0.454720 9.079488 3.477856 +0.088288 0.161408 0.449632 8.674528 3.481600 +0.089216 0.140384 0.451648 9.148352 3.488864 +0.088768 0.140352 0.453504 9.056864 3.500928 +0.088672 0.140672 0.446080 9.003648 3.486976 +0.088544 0.140640 0.451040 9.129216 3.499136 +0.089152 0.141504 0.447488 9.332416 3.534944 +0.089120 0.141760 0.445440 9.052928 3.497824 +0.088768 0.139648 0.446240 8.894592 3.499648 +0.088384 0.143712 0.447776 9.028352 3.513216 +0.095456 0.145728 0.440288 8.758688 3.817696 +0.088512 0.142016 0.449152 9.047456 3.503040 +0.088960 0.140320 0.451776 8.815040 3.503680 +0.088960 0.140384 0.451296 9.140256 3.499104 +0.088768 0.140672 0.454944 8.716576 3.508224 +0.088960 0.140864 0.449024 9.126368 3.512896 +0.088576 0.140640 0.446688 9.015808 3.525856 +0.088640 0.140480 0.445344 9.060224 3.505664 +0.088928 0.142336 0.455104 9.153920 3.505248 +0.088640 0.140544 0.446464 8.838336 3.492384 +0.088480 0.141952 0.446496 9.044832 3.500288 +0.088384 0.142400 0.441792 9.195008 3.508096 +0.088352 0.141760 0.454144 9.043392 3.510752 +0.088544 0.143328 0.453664 9.100128 3.499872 +0.088320 0.141952 0.448096 8.868160 3.489440 +0.088608 0.140800 0.445632 9.109216 3.501472 +0.089088 0.142208 0.454560 8.928480 3.515776 +0.088960 0.143136 0.452928 9.130624 3.489376 +0.088800 0.142080 0.450496 9.232096 3.516192 diff --git a/data/cube_aa.txt b/data/cube_aa.txt new file mode 100644 index 0000000..d3fdeb9 --- /dev/null +++ b/data/cube_aa.txt @@ -0,0 +1,50 @@ +0.007968 0.007424 114.774849 3.387616 +0.008192 0.007488 105.377213 3.345952 +0.008000 0.006720 103.672157 3.381248 +0.007520 0.007680 103.008286 3.412320 +0.007456 0.006720 102.928093 3.434080 +0.007616 0.006912 102.997375 3.404864 +0.007744 0.006848 103.007484 3.428736 +0.007616 0.007360 102.928322 3.381888 +0.007456 0.006432 102.924835 3.412320 +0.007616 0.006976 103.012924 3.405344 +0.007584 0.006912 103.185600 3.410144 +0.007552 0.007712 103.002174 3.408768 +0.007680 0.006752 102.928192 3.404416 +0.007520 0.006496 102.912704 3.421248 +0.007520 0.007104 102.923233 3.414080 +0.007584 0.006848 102.928413 3.392800 +0.007584 0.006496 102.934143 3.420416 +0.007488 0.006496 102.929855 3.387904 +0.007904 0.006528 103.188675 3.380640 +0.007584 0.007552 103.006332 3.419776 +0.007776 0.006592 103.009857 3.443520 +0.007456 0.006656 103.012383 3.405920 +0.007392 0.007200 103.009628 3.411584 +0.007488 0.006912 102.998627 3.402816 +0.007488 0.006496 102.931938 3.410784 +0.007584 0.007232 103.006653 3.435488 +0.007616 0.005760 102.924995 3.412160 +0.007808 0.007200 103.019836 3.383584 +0.007424 0.006848 102.928223 3.419904 +0.007456 0.006624 102.999069 3.415488 +0.007552 0.006880 102.998466 3.402432 +0.007648 0.007040 102.932671 3.413824 +0.007520 0.006496 102.925186 3.392384 +0.007456 0.006528 102.931549 3.399360 +0.007616 0.010528 102.925308 3.413792 +0.007456 0.007104 103.012802 3.399936 +0.007552 0.006720 102.996193 3.428032 +0.007584 0.006368 103.004799 3.404288 +0.007456 0.006912 103.007454 3.400640 +0.007616 0.006848 103.003326 3.426336 +0.007680 0.006720 102.932259 3.407360 +0.007456 0.007104 103.197250 3.374592 +0.007584 0.007072 102.927170 3.404704 +0.007584 0.006976 103.001343 3.395168 +0.007520 0.006720 102.928703 3.450688 +0.007552 0.006976 103.005890 3.398176 +0.007648 0.006528 102.920830 3.424000 +0.007488 0.006912 102.920479 3.416896 +0.007488 0.007360 102.924797 3.418560 +0.007808 0.006880 103.188194 3.379040 diff --git a/data/flower.txt b/data/flower.txt new file mode 100644 index 0000000..14e1c7e --- /dev/null +++ b/data/flower.txt @@ -0,0 +1,500 @@ +0.016960 0.023616 0.036192 43.232800 3.345536 +0.017408 0.023360 0.036064 44.358814 3.344096 +0.017536 0.022848 0.035520 43.445377 3.332640 +0.017280 0.023264 0.036480 43.434944 3.341792 +0.017472 0.022848 0.035424 43.354782 3.323488 +0.017248 0.023232 0.036000 44.298271 3.354976 +0.017280 0.022848 0.035616 44.363808 3.330176 +0.017440 0.023008 0.035808 43.765022 3.302304 +0.017120 0.022944 0.035424 43.640991 3.324544 +0.017152 0.023296 0.036192 43.352448 3.320896 +0.017216 0.022816 0.035648 43.593121 3.310592 +0.017248 0.022976 0.035776 43.775646 3.328288 +0.017504 0.022816 0.035424 43.762718 3.318816 +0.017312 0.023168 0.035872 43.825184 3.338400 +0.017248 0.022944 0.035872 43.573536 3.319936 +0.023808 0.028416 0.036288 43.546242 3.311520 +0.017312 0.023104 0.036128 44.426079 3.329120 +0.017600 0.023136 0.035968 43.779137 3.342944 +0.017568 0.022624 0.035904 43.733311 3.328032 +0.017440 0.022976 0.035968 43.297600 3.298816 +0.017216 0.023040 0.035520 44.391682 3.344800 +0.017216 0.022784 0.035680 43.757183 3.310624 +0.017696 0.022624 0.035136 43.828831 3.325536 +0.017376 0.022880 0.035776 43.614464 3.361024 +0.017344 0.023424 0.036416 43.667233 3.325248 +0.017312 0.023168 0.036320 43.661953 3.348768 +0.018208 0.023424 0.036576 43.561504 3.345408 +0.017216 0.023040 0.035680 43.759838 3.328192 +0.017536 0.022880 0.035648 42.994270 3.312224 +0.017120 0.023008 0.035744 43.784191 3.311616 +0.017248 0.023488 0.035744 44.283264 3.358016 +0.017280 0.022848 0.035648 43.589569 3.316992 +0.017472 0.023136 0.035680 43.514656 3.314400 +0.017280 0.023104 0.035840 43.285568 3.353472 +0.017312 0.023840 0.035872 42.549568 3.320000 +0.017184 0.023008 0.035680 43.630783 3.348704 +0.017344 0.022816 0.035584 43.751904 3.319104 +0.017152 0.023456 0.035808 43.652321 3.324512 +0.017280 0.022976 0.035680 44.050816 3.345568 +0.017344 0.023424 0.036256 42.794144 3.314464 +0.017280 0.022656 0.035872 43.015007 3.310592 +0.017184 0.022656 0.035904 43.289886 3.344096 +0.017280 0.022976 0.035520 43.197151 3.348032 +0.017248 0.022848 0.036096 44.442242 3.343392 +0.017248 0.022880 0.035200 43.430977 3.320032 +0.017152 0.022784 0.036096 43.548927 3.331808 +0.017312 0.022752 0.035296 44.306946 3.335520 +0.017376 0.023168 0.036160 43.801792 3.351840 +0.017120 0.022784 0.035712 44.470242 3.330368 +0.017728 0.023040 0.035872 43.802208 3.327840 +0.017408 0.022816 0.036000 43.614880 3.332224 +0.017664 0.022912 0.035584 44.471073 3.324896 +0.017376 0.023072 0.035168 43.799137 3.321184 +0.017248 0.023136 0.035936 44.029984 3.318688 +0.017568 0.023296 0.036224 43.740608 3.333664 +0.017312 0.022944 0.035904 43.459583 3.327680 +0.017120 0.022848 0.035264 43.201378 3.317152 +0.017216 0.023168 0.035616 43.715904 3.327904 +0.017216 0.022816 0.035392 44.163681 3.334848 +0.017312 0.023008 0.035840 43.366463 3.326816 +0.017344 0.022912 0.035520 43.717823 3.352096 +0.017344 0.023200 0.035712 42.874046 3.327040 +0.017216 0.023104 0.035552 43.392223 3.298944 +0.017344 0.022944 0.035616 42.896736 3.332512 +0.017504 0.023072 0.035296 44.096672 3.313056 +0.020960 0.026144 0.044224 43.703522 3.329024 +0.017472 0.022912 0.035392 44.903774 3.340864 +0.017280 0.023072 0.036224 42.657150 3.306400 +0.017504 0.022944 0.035296 43.881855 3.351936 +0.017440 0.023808 0.036704 43.583969 3.333824 +0.017376 0.023200 0.036032 43.745697 3.338784 +0.017312 0.023008 0.035840 42.748062 3.341632 +0.017216 0.022848 0.035616 43.906624 3.330048 +0.017184 0.022880 0.035936 43.455807 3.305376 +0.017376 0.023072 0.035680 43.631489 3.320416 +0.017216 0.023008 0.035744 43.238655 3.315360 +0.017280 0.022688 0.035264 44.259071 3.349696 +0.017984 0.023200 0.036832 43.654911 3.337152 +0.017344 0.022976 0.036128 43.305634 3.330144 +0.017280 0.022848 0.035936 43.731136 3.328512 +0.017280 0.022720 0.035680 44.494209 3.329536 +0.017344 0.022944 0.035808 43.535007 3.323488 +0.017504 0.022848 0.035744 43.773441 3.334848 +0.017504 0.023360 0.035424 43.566593 3.342592 +0.017472 0.023520 0.035872 43.096001 3.338784 +0.017280 0.022912 0.035712 42.740032 3.308064 +0.017440 0.022688 0.036032 43.703007 3.366944 +0.017248 0.022816 0.035872 43.704609 3.341856 +0.017248 0.022720 0.035520 43.827263 3.343264 +0.017344 0.023104 0.035680 43.557663 3.350624 +0.017248 0.022784 0.035008 43.740578 3.340416 +0.017504 0.023648 0.035552 43.671040 3.313216 +0.017120 0.022848 0.035360 44.082497 3.359072 +0.017536 0.022848 0.035648 44.169762 3.336160 +0.017216 0.022976 0.035968 43.777313 3.337408 +0.017280 0.022944 0.035872 42.726143 3.317344 +0.017216 0.022976 0.035904 43.734207 3.319424 +0.017216 0.022816 0.035776 44.322079 3.357824 +0.017440 0.022592 0.035424 43.862816 3.346016 +0.017184 0.024352 0.036448 43.749825 3.324000 +0.017248 0.022784 0.035072 43.229694 3.335200 +0.017312 0.023168 0.035424 44.437950 3.342912 +0.017984 0.023616 0.036960 43.727966 3.352768 +0.017344 0.022880 0.035616 43.725601 3.333888 +0.017088 0.022656 0.035200 44.345310 3.327008 +0.017312 0.023072 0.035616 44.133568 3.319296 +0.017216 0.023040 0.035328 43.412704 3.325984 +0.017344 0.023488 0.035904 44.423935 3.335104 +0.017376 0.023008 0.035360 42.810593 3.290624 +0.017536 0.022880 0.035904 43.800991 3.352384 +0.017152 0.022752 0.035904 44.381950 3.336064 +0.017376 0.023072 0.035616 44.943233 3.344288 +0.017376 0.022880 0.035552 43.303425 3.332768 +0.017088 0.022944 0.035744 43.760639 3.331296 +0.017344 0.023200 0.036128 43.694401 3.327808 +0.017344 0.023392 0.035872 43.662273 3.330944 +0.017440 0.023008 0.035264 43.108318 3.327840 +0.017504 0.022624 0.035776 43.610943 3.320544 +0.017472 0.022880 0.035552 43.702881 3.329472 +0.017280 0.022880 0.035904 43.507648 3.342912 +0.017344 0.022624 0.035520 43.729343 3.336704 +0.017184 0.023360 0.035936 44.810944 3.330592 +0.017152 0.022816 0.035424 44.088001 3.362176 +0.017216 0.023392 0.036000 43.392159 3.321024 +0.017344 0.022848 0.035424 44.264160 3.334240 +0.017536 0.022912 0.035488 43.714657 3.334304 +0.017312 0.023136 0.036032 43.408482 3.343904 +0.017088 0.022720 0.035552 43.763489 3.340544 +0.017440 0.023264 0.035456 43.942913 3.341728 +0.017216 0.023584 0.037120 44.481216 3.334272 +0.017440 0.022912 0.035104 44.523998 3.344768 +0.017280 0.023424 0.036096 43.396065 3.325824 +0.017088 0.022880 0.035424 44.503807 3.327936 +0.017248 0.023200 0.035712 44.181503 3.324128 +0.017248 0.022656 0.036064 43.026016 3.336736 +0.017344 0.022816 0.035808 43.615646 3.324576 +0.017408 0.022976 0.035296 43.653473 3.332672 +0.017248 0.044960 0.035968 43.751713 3.343552 +0.017216 0.023104 0.035712 42.786209 3.344960 +0.017312 0.023168 0.035968 44.441566 3.339424 +0.017248 0.022752 0.035488 43.043522 3.298880 +0.017504 0.022976 0.036064 43.351231 3.323104 +0.017184 0.022656 0.036320 43.297024 3.312160 +0.017440 0.023104 0.035424 43.867039 3.312416 +0.017312 0.023520 0.036672 42.712513 3.305056 +0.017312 0.022976 0.036096 43.631584 3.330688 +0.017248 0.022720 0.035808 44.394241 3.318688 +0.017312 0.023328 0.035840 43.441601 3.306656 +0.017280 0.022976 0.035680 42.887104 3.313120 +0.017216 0.022752 0.035776 42.713249 3.341440 +0.017472 0.022944 0.036064 44.059135 3.338816 +0.017408 0.023168 0.035520 42.680607 3.321440 +0.017216 0.023136 0.035456 44.529793 3.361664 +0.017504 0.023168 0.035648 43.776737 3.356800 +0.017376 0.022720 0.035712 43.744385 3.330048 +0.017280 0.023488 0.035936 44.515839 3.355936 +0.017120 0.022816 0.035744 44.486401 3.361760 +0.017312 0.022720 0.035616 44.337120 3.308832 +0.017472 0.022912 0.036320 43.667263 3.337760 +0.017376 0.023360 0.036032 43.473183 3.337056 +0.017312 0.023104 0.035296 43.740002 3.355552 +0.017312 0.022976 0.035904 43.402306 3.317312 +0.017440 0.022784 0.035200 44.511391 3.332416 +0.017184 0.023360 0.035776 43.783615 3.359872 +0.017216 0.022656 0.035712 44.968063 3.343488 +0.017440 0.023200 0.035552 43.459713 3.311776 +0.017280 0.022688 0.035936 43.219070 3.334016 +0.017440 0.022944 0.035680 43.435776 3.333632 +0.017248 0.022752 0.036000 43.186878 3.347904 +0.017312 0.022880 0.035712 43.260033 3.325152 +0.017376 0.023168 0.035392 44.398079 3.358240 +0.017408 0.023520 0.035648 43.465408 3.313664 +0.017280 0.022496 0.035712 43.830849 3.311008 +0.017216 0.023104 0.036032 43.747391 3.335968 +0.017344 0.023520 0.036768 43.328480 3.330624 +0.017344 0.023008 0.035520 43.440159 3.319840 +0.017344 0.022720 0.035680 43.041889 3.318688 +0.017312 0.023168 0.035488 44.091969 3.326880 +0.017312 0.022752 0.035552 43.778080 3.353568 +0.017056 0.023328 0.035552 42.774494 3.320320 +0.017216 0.022944 0.035392 43.742271 3.344896 +0.017440 0.023200 0.035776 43.194912 3.348448 +0.017664 0.022752 0.036224 43.458881 3.342944 +0.017376 0.022944 0.036064 44.360001 3.349824 +0.017440 0.022848 0.035584 44.484993 3.363104 +0.017216 0.023232 0.035616 43.299072 3.335744 +0.017408 0.022720 0.035648 43.443455 3.330240 +0.017344 0.023520 0.035904 44.492962 3.348672 +0.017376 0.022784 0.035552 43.661182 3.337056 +0.017536 0.023168 0.036128 42.774719 3.319808 +0.017248 0.023168 0.036128 43.377792 3.325024 +0.017408 0.023200 0.035968 42.803520 3.328832 +0.017216 0.022848 0.035584 43.966560 3.321696 +0.017344 0.022816 0.035936 43.129761 3.312224 +0.017408 0.022880 0.035616 44.428738 3.348352 +0.017280 0.023424 0.035776 42.692959 3.316064 +0.017504 0.022784 0.035584 43.509472 3.336064 +0.017536 0.023104 0.035744 43.850079 3.325184 +0.017248 0.022752 0.035968 43.390785 3.299936 +0.017504 0.022720 0.036032 44.343487 3.350528 +0.017568 0.022784 0.035680 43.696609 3.349952 +0.017280 0.022912 0.035520 43.537857 3.317856 +0.017184 0.023168 0.035424 43.758305 3.304096 +0.017312 0.023424 0.035712 43.066784 3.328640 +0.017344 0.023296 0.036000 43.640766 3.339072 +0.017280 0.022848 0.035968 43.708286 3.363168 +0.017184 0.022752 0.035904 43.301697 3.309376 +0.017152 0.022976 0.035776 43.831390 3.334880 +0.017408 0.022816 0.035872 43.709343 3.344864 +0.017216 0.022944 0.035904 43.806049 3.323392 +0.026784 0.031552 0.043008 43.394402 3.317600 +0.017440 0.023936 0.035744 43.405697 3.333248 +0.017120 0.023104 0.035104 43.366112 3.324704 +0.017248 0.022816 0.035808 43.675743 3.354752 +0.017440 0.023072 0.035840 43.883362 3.315936 +0.017312 0.023232 0.035904 43.439297 3.330848 +0.017440 0.022752 0.035360 43.983681 3.335072 +0.017280 0.023264 0.035744 43.703041 3.325248 +0.017216 0.022848 0.035776 43.398495 3.332864 +0.017504 0.024224 0.035968 44.002434 3.345664 +0.023360 0.027936 0.036288 43.512417 3.340160 +0.017280 0.022976 0.035872 42.732384 3.324384 +0.017504 0.022944 0.035744 43.749985 3.330560 +0.017376 0.022944 0.035648 44.177345 3.336992 +0.017248 0.023168 0.035488 44.318367 3.347264 +0.017344 0.022944 0.035552 43.431839 3.297952 +0.017504 0.022848 0.035392 43.786049 3.306208 +0.017248 0.023360 0.035872 43.422337 3.349024 +0.017440 0.022816 0.036032 43.466976 3.308544 +0.017184 0.023168 0.035968 44.383423 3.345856 +0.017216 0.022720 0.036192 43.381279 3.308896 +0.017312 0.022880 0.035808 43.065727 3.318880 +0.017280 0.022656 0.036032 44.151871 3.359136 +0.017568 0.022848 0.035968 44.745186 3.356320 +0.017248 0.023584 0.035584 43.810558 3.332672 +0.017312 0.023264 0.035584 43.360767 3.314080 +0.017312 0.022656 0.035520 43.809601 3.332000 +0.017248 0.022816 0.035680 43.528065 3.314176 +0.017472 0.023072 0.035936 43.997345 3.350560 +0.017312 0.023040 0.035712 43.371071 3.338848 +0.017248 0.022784 0.035328 44.026978 3.339296 +0.017408 0.023168 0.035424 43.680481 3.311648 +0.017344 0.022752 0.034976 43.699905 3.335744 +0.017152 0.023424 0.036096 43.758305 3.320544 +0.017344 0.022752 0.035616 43.611233 3.324288 +0.017248 0.022976 0.035584 43.583935 3.300512 +0.017216 0.022912 0.036032 44.346207 3.357184 +0.017408 0.022912 0.035584 43.719551 3.350592 +0.017216 0.023008 0.035488 43.939808 3.329504 +0.017440 0.023392 0.036352 43.110722 3.306752 +0.017440 0.022912 0.035520 43.371647 3.320256 +0.017280 0.023488 0.035936 43.279232 3.330400 +0.017280 0.022656 0.036032 43.413921 3.312928 +0.017344 0.023008 0.035616 42.675617 3.345376 +0.017344 0.022656 0.035776 43.261055 3.336736 +0.017120 0.022944 0.035712 43.755615 3.380160 +0.017408 0.023008 0.035424 44.141762 3.343712 +0.017280 0.022944 0.035744 43.128895 3.312128 +0.017632 0.023008 0.035616 43.608704 3.331808 +0.017632 0.023520 0.035936 43.342304 3.326400 +0.017120 0.022848 0.035712 44.471680 3.340320 +0.017088 0.023200 0.035904 43.843647 3.321600 +0.017568 0.022912 0.035872 43.514080 3.325824 +0.017600 0.023008 0.035584 44.098591 3.349440 +0.017376 0.023328 0.036256 43.497471 3.303040 +0.017344 0.023168 0.035872 44.153824 3.348800 +0.017280 0.022688 0.035744 43.687935 3.342592 +0.017312 0.023552 0.036128 43.720928 3.344096 +0.017408 0.022816 0.035552 43.791103 3.349568 +0.017280 0.022816 0.035776 43.456512 3.318080 +0.017376 0.022752 0.035936 42.830753 3.323104 +0.017568 0.023616 0.036288 43.559841 3.331040 +0.017248 0.022976 0.035232 43.784702 3.340896 +0.017280 0.022848 0.035744 43.766464 3.328960 +0.017312 0.022784 0.035456 43.367615 3.308320 +0.017312 0.023584 0.035840 43.768703 3.321024 +0.017280 0.022752 0.035648 43.691200 3.320320 +0.017184 0.023072 0.035776 44.368065 3.311744 +0.017216 0.022816 0.035872 43.702145 3.324768 +0.017280 0.023424 0.035808 43.716320 3.348000 +0.017440 0.023040 0.035840 43.506432 3.318592 +0.017088 0.023104 0.035872 43.588352 3.312800 +0.017408 0.022848 0.035392 44.282303 3.338624 +0.017312 0.023296 0.035584 43.836639 3.335168 +0.017280 0.022816 0.035584 43.958496 3.310656 +0.017312 0.023040 0.035616 43.472130 3.332160 +0.017504 0.022752 0.036064 43.676800 3.321984 +0.017344 0.023200 0.035776 43.352577 3.326080 +0.017312 0.022848 0.035296 43.783775 3.325632 +0.017376 0.022976 0.035616 44.063328 3.329376 +0.017248 0.022752 0.035552 43.594177 3.324640 +0.017376 0.023520 0.035968 43.340706 3.330688 +0.017216 0.023072 0.035104 43.522400 3.342528 +0.017408 0.022816 0.035552 43.827553 3.345024 +0.017568 0.045056 0.036256 43.376801 3.304640 +0.017344 0.023040 0.035680 43.592609 3.331168 +0.017280 0.022944 0.035424 43.488159 3.361312 +0.017248 0.022816 0.035424 43.839134 3.328640 +0.017344 0.022848 0.035232 43.466431 3.320064 +0.017216 0.023360 0.035456 43.271553 3.322720 +0.017408 0.023008 0.035392 43.626305 3.330592 +0.017536 0.023008 0.035872 43.351841 3.329760 +0.017312 0.023008 0.035968 43.498913 3.320352 +0.017376 0.022976 0.035712 42.810303 3.301216 +0.017440 0.022848 0.035552 42.876415 3.301248 +0.017280 0.023040 0.035904 44.169983 3.339168 +0.017280 0.022976 0.035552 44.135521 3.346240 +0.017440 0.023424 0.035776 43.997887 3.321024 +0.017248 0.022848 0.035136 43.805794 3.308640 +0.017568 0.023488 0.036352 43.800640 3.359232 +0.017376 0.022784 0.035808 43.603039 3.341152 +0.017120 0.022848 0.035840 43.111423 3.314080 +0.017216 0.022720 0.035552 43.800770 3.356000 +0.017024 0.022976 0.036032 43.747585 3.321504 +0.017184 0.022816 0.035424 43.212608 3.318144 +0.017376 0.023520 0.035744 44.445698 3.342528 +0.017344 0.022752 0.035072 44.418785 3.358752 +0.017280 0.022944 0.035616 43.826782 3.359552 +0.017376 0.022816 0.036288 43.201694 3.337440 +0.017248 0.022848 0.035648 43.341919 3.331904 +0.017216 0.022912 0.035616 43.725151 3.356896 +0.017312 0.023040 0.035520 43.604351 3.325088 +0.017312 0.022688 0.035584 43.797440 3.324640 +0.017472 0.023360 0.035648 44.607937 3.368608 +0.017248 0.023456 0.035968 44.899010 3.343104 +0.017440 0.022944 0.035776 44.321857 3.342304 +0.017184 0.022784 0.036032 43.784767 3.314304 +0.017600 0.023104 0.035584 43.954208 3.325920 +0.017376 0.022816 0.035584 43.457825 3.334816 +0.017152 0.022880 0.035840 43.269630 3.327680 +0.017376 0.022656 0.035520 43.773407 3.335968 +0.017280 0.023968 0.035840 43.422016 3.307776 +0.017312 0.022752 0.035520 43.363327 3.338528 +0.017184 0.022944 0.035488 42.766655 3.334144 +0.017248 0.022784 0.036000 43.523872 3.340064 +0.017216 0.023072 0.035744 43.740002 3.330592 +0.017280 0.022784 0.035328 43.750977 3.329184 +0.017312 0.022880 0.035680 43.547199 3.336928 +0.017440 0.022848 0.035552 44.182400 3.347808 +0.017504 0.024512 0.036224 43.027935 3.296448 +0.017376 0.022816 0.035296 43.048321 3.331744 +0.017280 0.023040 0.035648 43.757278 3.348288 +0.017152 0.022784 0.035744 43.761280 3.321472 +0.017088 0.022784 0.036000 44.044064 3.335936 +0.017344 0.022784 0.035104 43.575775 3.319872 +0.017216 0.023040 0.035936 43.367199 3.332320 +0.017504 0.022912 0.035488 44.115105 3.350208 +0.017280 0.023488 0.035584 44.278240 3.345056 +0.017344 0.022784 0.035424 42.710560 3.331872 +0.017248 0.022976 0.035552 44.229568 3.341792 +0.017280 0.022752 0.035552 43.280128 3.331872 +0.017216 0.023072 0.035744 43.405602 3.336864 +0.017248 0.022816 0.035264 44.324833 3.348672 +0.017472 0.022912 0.035904 44.688129 3.328992 +0.017664 0.023424 0.036160 43.730015 3.322272 +0.017152 0.023648 0.035680 43.304897 3.315648 +0.017312 0.023104 0.035200 43.255455 3.334432 +0.017312 0.022880 0.035520 43.713665 3.343360 +0.017312 0.022784 0.035776 43.457314 3.333152 +0.017184 0.022816 0.035616 43.527199 3.333344 +0.017536 0.022784 0.035264 43.721985 3.320672 +0.017472 0.023264 0.036064 43.779488 3.322400 +0.017344 0.022784 0.035456 43.813438 3.307456 +0.017280 0.023392 0.035520 43.646400 3.336000 +0.017568 0.022912 0.035712 44.126530 3.345408 +0.017312 0.022976 0.036192 43.725822 3.324672 +0.017440 0.023040 0.035488 43.708862 3.334496 +0.017440 0.022880 0.035712 43.777634 3.328736 +0.017184 0.022656 0.035680 44.053440 3.338400 +0.017248 0.023584 0.036416 43.786785 3.347392 +0.017376 0.022944 0.035680 43.569248 3.312736 +0.017280 0.023168 0.035648 43.259071 3.332512 +0.017376 0.022752 0.035584 43.477310 3.365088 +0.017056 0.022848 0.035648 43.320866 3.322848 +0.017440 0.022880 0.035680 43.272766 3.316000 +0.017216 0.023040 0.035936 43.377312 3.309376 +0.017280 0.022944 0.035328 43.641567 3.340672 +0.017472 0.022848 0.035680 43.853760 3.346400 +0.017440 0.023168 0.035360 43.705601 3.327200 +0.017376 0.023584 0.035840 43.256161 3.323072 +0.017344 0.022880 0.035296 44.390270 3.334720 +0.017440 0.022848 0.035840 43.315296 3.316032 +0.017184 0.022848 0.035872 43.639198 3.338976 +0.017376 0.023232 0.035936 44.682690 3.331168 +0.017472 0.023680 0.036672 43.591263 3.305568 +0.017280 0.022880 0.036000 43.435074 3.332544 +0.017344 0.022752 0.035328 43.395969 3.322688 +0.017312 0.023328 0.035584 42.869408 3.289728 +0.017568 0.022592 0.035392 43.298145 3.334720 +0.017376 0.022816 0.035872 43.614719 3.331200 +0.017344 0.022912 0.036032 43.454754 3.337056 +0.017504 0.023168 0.035872 44.493538 3.342336 +0.017312 0.023008 0.035552 43.884384 3.324416 +0.017568 0.023008 0.035904 43.454754 3.315840 +0.017408 0.022720 0.035264 44.340096 3.359904 +0.017280 0.023392 0.035488 42.696480 3.330432 +0.017504 0.022912 0.035424 43.754814 3.331808 +0.017248 0.022976 0.035616 43.414783 3.331360 +0.017440 0.022912 0.036160 44.706818 3.369664 +0.017248 0.023552 0.036256 42.804958 3.310432 +0.017184 0.022720 0.035360 43.550079 3.328224 +0.017280 0.023104 0.035904 42.703041 3.322752 +0.017312 0.022752 0.035392 43.744831 3.341600 +0.017216 0.023424 0.035712 43.613888 3.341440 +0.017344 0.022592 0.035424 43.469696 3.341024 +0.017536 0.022816 0.035680 43.445057 3.326976 +0.017216 0.022688 0.036000 43.359966 3.321728 +0.017184 0.022848 0.035744 43.480610 3.314688 +0.017408 0.022720 0.035456 43.554302 3.341376 +0.017280 0.023008 0.035680 44.184353 3.328992 +0.017440 0.022944 0.035584 43.776287 3.326016 +0.017344 0.023488 0.035360 43.489025 3.314176 +0.017248 0.022880 0.035360 42.704575 3.330784 +0.017248 0.022688 0.035680 43.692383 3.328704 +0.017120 0.023168 0.036800 44.240353 3.343936 +0.017408 0.023072 0.035616 43.821602 3.328320 +0.017248 0.023072 0.035392 44.502304 3.331360 +0.017120 0.023040 0.035872 43.478882 3.332704 +0.017536 0.022688 0.035296 42.734241 3.339520 +0.017312 0.023616 0.035712 43.534081 3.327776 +0.017344 0.022432 0.035232 42.948994 3.305184 +0.017408 0.023296 0.035424 43.176033 3.329216 +0.017184 0.022624 0.036096 43.436768 3.338144 +0.017312 0.022944 0.035712 43.576321 3.329792 +0.017408 0.022912 0.035296 43.482079 3.323552 +0.017152 0.022848 0.035808 43.767647 3.332000 +0.017280 0.022880 0.035328 43.337250 3.313888 +0.017248 0.023200 0.035520 42.731937 3.318144 +0.017280 0.022880 0.034816 43.588512 3.326368 +0.017088 0.023296 0.036384 44.026207 3.317696 +0.017280 0.022816 0.036032 43.799553 3.324640 +0.017248 0.022880 0.035712 43.512608 3.311168 +0.018464 0.023424 0.036288 43.650974 3.335040 +0.017312 0.022912 0.035872 43.274624 3.306048 +0.017184 0.022848 0.035424 43.408321 3.302944 +0.017280 0.023552 0.036000 43.792480 3.341088 +0.017248 0.022816 0.035712 43.384735 3.334720 +0.017376 0.023040 0.035808 44.055614 3.336288 +0.017248 0.022688 0.035840 42.766815 3.313568 +0.017408 0.022752 0.035424 43.453888 3.322464 +0.017280 0.022880 0.035232 43.470303 3.332000 +0.017408 0.023168 0.035520 42.817249 3.332416 +0.017312 0.023168 0.035424 43.278111 3.346720 +0.017600 0.023424 0.035808 43.841728 3.354144 +0.017536 0.023360 0.035936 43.642143 3.325536 +0.017312 0.022944 0.035552 44.358082 3.333216 +0.017408 0.022624 0.035552 43.576385 3.347808 +0.017152 0.022816 0.035936 44.374687 3.348224 +0.017472 0.023008 0.035520 43.737408 3.360096 +0.017440 0.023008 0.035936 42.733921 3.318848 +0.017472 0.022912 0.035520 44.108513 3.354432 +0.017216 0.045024 0.036000 43.745312 3.325952 +0.017440 0.022944 0.035200 43.436577 3.310560 +0.017280 0.022752 0.035104 43.668480 3.325344 +0.017088 0.022880 0.036192 44.138527 3.296544 +0.017312 0.022944 0.035584 43.201118 3.316096 +0.017152 0.022848 0.035296 43.564705 3.323840 +0.017440 0.023072 0.035872 43.559361 3.360640 +0.017280 0.022560 0.035328 43.566143 3.341344 +0.017312 0.024384 0.036416 44.473953 3.367968 +0.017248 0.022688 0.035232 43.042686 3.331392 +0.017248 0.022912 0.035712 43.003807 3.310304 +0.017408 0.022752 0.035840 44.469406 3.328928 +0.017184 0.022944 0.035616 42.665314 3.306848 +0.017152 0.022784 0.035360 43.702721 3.331872 +0.017440 0.022880 0.036192 43.420448 3.325280 +0.017216 0.023040 0.035264 43.783550 3.325568 +0.017472 0.023424 0.035680 43.807522 3.315200 +0.017280 0.022720 0.035744 43.460609 3.331040 +0.017408 0.022848 0.036320 45.202080 3.390336 +0.017408 0.022752 0.035968 44.322529 3.351968 +0.017184 0.022784 0.035744 44.104385 3.331712 +0.017184 0.022720 0.035520 43.733791 3.343520 +0.017248 0.022784 0.035616 43.062305 3.318976 +0.017312 0.023360 0.035872 42.788319 3.320160 +0.017600 0.023328 0.035584 42.801186 3.286944 +0.017248 0.022752 0.035424 43.685986 3.348864 +0.017504 0.022752 0.035744 42.792030 3.333472 +0.017408 0.022656 0.035808 43.736446 3.339264 +0.017440 0.022752 0.035584 43.501438 3.353728 +0.017376 0.022688 0.035424 44.036449 3.365856 +0.017152 0.023040 0.036064 42.968319 3.331424 +0.017280 0.022944 0.035616 44.015102 3.354112 +0.017248 0.023424 0.035648 43.102753 3.332192 +0.017088 0.022464 0.035392 43.434559 3.301056 +0.017312 0.022944 0.035456 44.282848 3.340704 +0.017248 0.022912 0.035776 43.743519 3.327072 +0.017248 0.022784 0.035520 43.213921 3.318880 +0.017216 0.022976 0.035392 44.708160 3.325632 +0.017280 0.023296 0.036608 43.793728 3.325952 +0.017248 0.022880 0.035520 43.754688 3.314848 +0.017408 0.023424 0.035968 42.733887 3.321024 +0.017664 0.022944 0.035776 43.438370 3.323808 +0.017504 0.022912 0.036096 43.588928 3.320896 +0.017216 0.022912 0.035776 43.385441 3.355584 +0.017280 0.022848 0.035680 44.550720 3.326336 +0.017504 0.022752 0.035168 43.712479 3.353824 +0.017408 0.022880 0.035424 42.625057 3.328288 +0.017280 0.022880 0.035392 42.719906 3.321728 +0.017216 0.023424 0.035744 42.947006 3.327808 diff --git a/data/flower_nobfc.txt b/data/flower_nobfc.txt new file mode 100644 index 0000000..b13d0db --- /dev/null +++ b/data/flower_nobfc.txt @@ -0,0 +1,500 @@ +0.018496 0.026016 0.066528 50.163776 3.372288 +0.020000 0.026080 0.065568 48.904770 3.347744 +0.018112 0.024064 0.061216 46.539425 3.365248 +0.017760 0.024032 0.061664 46.398624 3.361184 +0.018016 0.023840 0.061184 44.906689 3.361664 +0.017344 0.023168 0.058656 44.432865 3.324416 +0.017344 0.022656 0.058368 44.125473 3.342976 +0.017568 0.023136 0.059040 44.856319 3.372800 +0.017376 0.022880 0.058432 44.810242 3.348288 +0.017408 0.023168 0.058624 44.225887 3.355264 +0.017376 0.023040 0.058400 45.187168 3.347040 +0.017280 0.023104 0.058496 43.996990 3.333920 +0.017536 0.022912 0.058432 44.853790 3.347328 +0.017248 0.022848 0.058816 44.018047 3.364064 +0.017472 0.023328 0.059200 44.736641 3.351232 +0.017216 0.023168 0.058688 43.870785 3.343264 +0.017504 0.022912 0.058304 44.229473 3.364288 +0.017120 0.022944 0.058880 44.360321 3.337536 +0.017152 0.022976 0.058592 44.163456 3.322976 +0.017536 0.022912 0.058368 44.816257 3.385920 +0.017216 0.022912 0.058400 43.648033 3.308256 +0.017152 0.022848 0.059168 43.770145 3.336448 +0.017344 0.023040 0.058272 44.810974 3.352704 +0.017312 0.022912 0.058848 44.170815 3.316864 +0.017280 0.023232 0.058336 44.693665 3.342176 +0.017216 0.022944 0.058720 44.787903 3.331648 +0.019040 0.024416 0.059232 44.209599 3.343968 +0.018336 0.024480 0.058592 43.934464 3.354720 +0.018816 0.024256 0.058816 45.136192 3.371328 +0.018592 0.024160 0.059168 45.131454 3.345504 +0.018432 0.023840 0.058688 43.820030 3.303360 +0.018688 0.024192 0.058528 44.744671 3.352384 +0.018336 0.024096 0.058368 43.964127 3.361920 +0.018304 0.024160 0.058944 44.782658 3.322048 +0.018528 0.024288 0.058592 44.792255 3.363552 +0.018400 0.024064 0.059072 43.936768 3.350368 +0.018592 0.024224 0.058400 43.923649 3.302880 +0.018624 0.024672 0.058720 44.392639 3.347168 +0.018336 0.023808 0.058880 44.026943 3.328064 +0.018368 0.024032 0.058720 44.168545 3.334304 +0.018624 0.024192 0.058784 44.156128 3.327840 +0.018240 0.024064 0.058848 43.737537 3.326592 +0.018240 0.023904 0.058656 44.698814 3.358560 +0.018656 0.024192 0.058592 44.081440 3.315552 +0.018304 0.024032 0.059008 43.867134 3.320256 +0.018240 0.024160 0.058752 45.283710 3.366912 +0.018688 0.024096 0.058688 44.173599 3.332736 +0.018656 0.024384 0.058816 44.154049 3.315616 +0.018304 0.023776 0.058784 47.470016 3.355744 +0.018592 0.024320 0.058912 43.852352 3.355328 +0.018112 0.023744 0.058560 44.911007 3.366752 +0.018560 0.024224 0.058784 44.153217 3.333408 +0.018656 0.024416 0.058528 44.383488 3.364064 +0.018240 0.024064 0.058688 44.501568 3.318496 +0.018336 0.023872 0.058496 44.130177 3.333920 +0.018912 0.024320 0.058912 44.200127 3.321376 +0.018144 0.023680 0.058304 44.804352 3.367584 +0.018336 0.023968 0.058720 44.216480 3.338976 +0.018720 0.024096 0.058944 44.230751 3.350368 +0.018304 0.024512 0.059712 43.718754 3.345664 +0.018400 0.023776 0.058720 43.525566 3.330496 +0.018688 0.024096 0.058528 43.889599 3.346496 +0.018336 0.023808 0.058944 43.745472 3.311616 +0.018368 0.024032 0.058816 43.834400 3.347872 +0.018656 0.024032 0.058272 46.296864 3.368832 +0.018112 0.024000 0.059104 44.236862 3.335104 +0.018656 0.024000 0.058592 44.769119 3.357920 +0.018560 0.024288 0.059008 45.244225 3.370560 +0.018208 0.024160 0.058112 44.788769 3.353696 +0.018176 0.023904 0.058720 44.851170 3.367648 +0.018688 0.024224 0.059168 43.710625 3.318016 +0.018176 0.024096 0.058592 44.817825 3.349792 +0.018336 0.023712 0.058912 43.870369 3.337920 +0.018784 0.024224 0.058528 44.384895 3.349024 +0.018400 0.024608 0.059040 43.806305 3.336800 +0.018336 0.024064 0.058720 45.019169 3.337376 +0.019456 0.024576 0.058528 44.439777 3.323200 +0.019136 0.024320 0.059744 47.569504 3.355808 +0.018336 0.023872 0.059008 45.493023 3.361856 +0.018496 0.024416 0.058400 44.718178 3.339616 +0.018304 0.023808 0.058368 43.778912 3.331776 +0.018592 0.024032 0.058656 45.158463 3.359488 +0.018784 0.024256 0.058688 44.838593 3.357248 +0.018784 0.025024 0.058464 44.240734 3.323296 +0.018208 0.023968 0.058080 43.754559 3.339904 +0.018656 0.024352 0.058784 44.043648 3.359296 +0.018304 0.023776 0.058944 45.652542 3.356704 +0.018304 0.023744 0.059040 43.921345 3.315648 +0.018816 0.024000 0.058240 47.217918 3.365952 +0.018368 0.024320 0.059776 44.203167 3.348928 +0.018176 0.023744 0.058496 44.609856 3.334912 +0.018784 0.024832 0.058752 43.926239 3.330080 +0.018080 0.023680 0.058560 44.622623 3.344992 +0.018368 0.023904 0.058688 43.476318 3.324960 +0.018464 0.023840 0.059040 43.749058 3.330656 +0.018784 0.023904 0.058784 43.742271 3.331456 +0.018816 0.024416 0.058432 44.280609 3.339360 +0.018688 0.024416 0.058624 44.716766 3.349088 +0.018272 0.023680 0.058208 44.213535 3.342144 +0.018368 0.024800 0.059200 44.916672 3.339488 +0.018656 0.024128 0.058336 43.978943 3.306528 +0.018272 0.024288 0.058816 44.121506 3.354912 +0.019200 0.024288 0.060416 43.765087 3.331264 +0.018624 0.024512 0.058848 44.512321 3.341792 +0.018368 0.024192 0.059648 44.173504 3.333088 +0.018240 0.024096 0.058848 43.875103 3.324448 +0.018496 0.024352 0.058464 44.803265 3.357952 +0.018560 0.024544 0.058592 44.747646 3.351040 +0.018464 0.023808 0.058656 44.064415 3.351936 +0.018656 0.024160 0.058784 44.185471 3.344576 +0.019328 0.024928 0.060000 47.537567 3.330016 +0.018400 0.023968 0.059104 44.220322 3.344704 +0.018528 0.024160 0.058240 45.376926 3.383136 +0.018336 0.023968 0.058816 43.975967 3.320192 +0.018112 0.023904 0.058752 43.657761 3.332256 +0.018688 0.025056 0.058848 44.161663 3.349824 +0.018368 0.023904 0.058496 43.882847 3.304832 +0.018208 0.024064 0.058720 43.798016 3.323488 +0.019040 0.024320 0.059232 44.033825 3.374816 +0.018336 0.024128 0.059296 44.739777 3.344800 +0.018816 0.024192 0.058688 44.162079 3.355232 +0.019328 0.025216 0.058880 43.860352 3.333696 +0.018912 0.024640 0.058624 44.007137 3.339520 +0.018176 0.024800 0.058880 45.645824 3.344768 +0.018624 0.024288 0.058880 44.111008 3.347232 +0.018304 0.023904 0.058560 44.158047 3.340352 +0.018592 0.024064 0.058816 44.174686 3.347040 +0.018688 0.024512 0.058624 46.238880 3.360704 +0.018304 0.024224 0.058496 44.095169 3.324960 +0.018336 0.023680 0.058976 44.912514 3.344768 +0.018688 0.024000 0.058304 43.965569 3.344992 +0.018816 0.024896 0.058880 44.260609 3.337792 +0.018080 0.023680 0.058560 43.991585 3.340896 +0.018784 0.024256 0.058848 45.040993 3.365568 +0.018560 0.024064 0.060096 44.978848 3.358112 +0.018336 0.024032 0.058752 43.768162 3.325568 +0.020096 0.025280 0.059072 43.634590 3.334336 +0.018272 0.046016 0.058720 44.206337 3.329856 +0.018336 0.023968 0.058400 44.107742 3.339840 +0.018784 0.024768 0.058752 44.250080 3.333760 +0.018240 0.023680 0.058688 44.169186 3.330848 +0.018848 0.024288 0.059136 43.976768 3.330368 +0.018976 0.024384 0.058816 43.728001 3.316448 +0.018400 0.024352 0.058592 43.741215 3.334112 +0.018400 0.023808 0.058464 44.020897 3.346848 +0.018528 0.024128 0.058528 43.899071 3.342016 +0.018464 0.023680 0.058624 45.242622 3.362368 +0.018208 0.024288 0.058784 43.730911 3.325696 +0.018464 0.024352 0.058400 44.182655 3.336640 +0.018176 0.024288 0.059136 44.737183 3.354816 +0.018240 0.024064 0.059136 43.685600 3.324768 +0.018624 0.024416 0.058848 43.163200 3.287744 +0.019296 0.024640 0.058656 44.215393 3.320480 +0.018432 0.024032 0.058624 44.203777 3.355552 +0.019040 0.024192 0.058464 44.149345 3.323712 +0.018432 0.024608 0.059008 44.043167 3.350016 +0.018656 0.023904 0.058432 43.921726 3.312448 +0.018592 0.024192 0.058528 43.783489 3.338688 +0.018144 0.023744 0.059008 44.195358 3.345312 +0.018432 0.024160 0.058656 43.850399 3.325056 +0.018752 0.024448 0.058752 45.265152 3.355904 +0.018208 0.023904 0.059072 44.905151 3.353504 +0.018112 0.023968 0.058464 44.097439 3.326784 +0.018624 0.024768 0.058848 45.108158 3.354432 +0.018336 0.024064 0.059072 44.192833 3.332928 +0.018208 0.024192 0.058560 45.809120 3.379616 +0.018496 0.024288 0.059328 43.821632 3.331680 +0.018528 0.024032 0.059104 43.722721 3.320256 +0.018176 0.023712 0.058624 43.727169 3.337024 +0.018752 0.024192 0.058720 44.233536 3.350400 +0.021696 0.027936 0.059072 44.200642 3.345088 +0.018720 0.024608 0.058912 44.792130 3.322368 +0.018464 0.024096 0.058336 43.544319 3.338848 +0.018400 0.023904 0.058752 44.775711 3.361824 +0.018336 0.023808 0.058976 43.882526 3.359200 +0.018688 0.024480 0.058848 44.873215 3.367328 +0.018144 0.023808 0.058624 44.121727 3.354176 +0.018432 0.023520 0.059008 44.868031 3.334400 +0.018784 0.024736 0.058880 44.486336 3.369472 +0.018688 0.025088 0.059488 43.908066 3.348000 +0.018336 0.023936 0.058432 47.564384 3.329472 +0.018688 0.024160 0.058688 44.061474 3.360704 +0.018272 0.023680 0.058976 43.334721 3.333760 +0.018208 0.023936 0.058976 43.760513 3.336352 +0.018592 0.024128 0.058528 44.100033 3.366496 +0.018144 0.023968 0.058592 45.299007 3.373856 +0.018560 0.024064 0.058368 43.503071 3.334688 +0.018656 0.025088 0.059008 45.126881 3.352800 +0.018272 0.023584 0.058688 44.160446 3.339776 +0.018240 0.024000 0.058688 43.668831 3.340576 +0.018464 0.024096 0.059456 43.738785 3.339680 +0.018112 0.024032 0.058720 45.217857 3.363360 +0.018240 0.024064 0.058208 44.175392 3.347584 +0.018496 0.024096 0.058656 44.244865 3.329696 +0.018400 0.024608 0.059040 45.426880 3.374720 +0.018176 0.024416 0.059232 44.288258 3.344256 +0.018592 0.024064 0.058976 44.102367 3.314432 +0.018144 0.024128 0.058816 45.218945 3.357440 +0.018400 0.023872 0.059168 45.283520 3.386080 +0.018496 0.024224 0.058688 43.958176 3.351392 +0.018528 0.023776 0.058432 43.763870 3.320192 +0.018272 0.024224 0.058624 43.896896 3.330944 +0.018816 0.024448 0.058112 43.490528 3.333984 +0.018368 0.024160 0.058624 44.183071 3.327776 +0.018368 0.023840 0.058528 44.275551 3.338976 +0.018752 0.024224 0.058688 43.918369 3.334944 +0.018336 0.023968 0.058592 44.234848 3.357504 +0.019072 0.024736 0.058528 44.861954 3.351200 +0.019136 0.024096 0.058592 45.014687 3.356032 +0.018240 0.024128 0.059136 43.933086 3.366976 +0.018240 0.023712 0.058368 43.951233 3.332768 +0.018720 0.024768 0.058560 44.851360 3.363104 +0.018848 0.024512 0.058592 44.897728 3.345216 +0.018240 0.024128 0.058688 43.992863 3.341088 +0.021056 0.041920 0.058912 43.484127 3.319200 +0.018048 0.023808 0.059040 43.740448 3.340640 +0.018624 0.023936 0.058432 43.941982 3.353600 +0.019136 0.024736 0.059072 44.210720 3.318592 +0.018144 0.023744 0.058368 45.025600 3.361824 +0.018560 0.025184 0.058720 43.776958 3.337760 +0.018656 0.023936 0.058528 44.152096 3.334880 +0.018272 0.024032 0.058656 44.148159 3.351488 +0.019040 0.024160 0.058976 44.060127 3.356512 +0.018816 0.024320 0.058784 47.837345 3.351680 +0.018208 0.024416 0.059104 45.206978 3.367328 +0.018208 0.023808 0.059008 44.194847 3.363968 +0.019008 0.024128 0.058240 45.283394 3.362784 +0.018560 0.024608 0.058880 43.772575 3.314912 +0.018944 0.024704 0.058656 44.828289 3.337440 +0.018720 0.024352 0.058880 44.940895 3.354816 +0.018592 0.024000 0.059392 43.713120 3.351424 +0.018976 0.024128 0.058944 45.458782 3.359744 +0.018592 0.024192 0.058528 43.709087 3.329600 +0.018656 0.024096 0.058656 43.833344 3.337120 +0.018240 0.024160 0.058208 43.874496 3.302592 +0.018624 0.024928 0.058752 44.839870 3.352000 +0.018304 0.023936 0.058688 44.261986 3.358624 +0.018176 0.023808 0.058368 43.924736 3.352032 +0.018720 0.024384 0.058816 44.625278 3.345440 +0.018336 0.024288 0.059744 44.220383 3.339456 +0.018624 0.024064 0.058464 43.782974 3.323168 +0.018752 0.024608 0.058816 43.723297 3.333088 +0.018144 0.024000 0.058752 44.658272 3.342112 +0.018304 0.024384 0.058464 43.895775 3.326656 +0.018560 0.023904 0.058688 43.729279 3.334144 +0.018016 0.023968 0.058432 43.908897 3.349280 +0.018400 0.023808 0.058784 43.874847 3.354112 +0.018880 0.024064 0.059072 44.174110 3.327168 +0.018112 0.023648 0.058272 43.878784 3.325824 +0.018368 0.024320 0.058560 45.184063 3.361184 +0.018496 0.024160 0.058464 43.942783 3.335808 +0.018368 0.024768 0.058784 44.252224 3.327392 +0.018272 0.024128 0.058400 43.971615 3.341376 +0.018624 0.024352 0.058976 45.087711 3.360544 +0.018528 0.024096 0.059424 44.852383 3.372416 +0.018592 0.023936 0.058656 44.877472 3.328832 +0.018720 0.024160 0.058400 45.548286 3.371968 +0.018368 0.023680 0.058720 43.828671 3.361568 +0.018368 0.023712 0.058336 43.983967 3.341344 +0.018528 0.024800 0.058656 43.636543 3.311936 +0.018176 0.023776 0.058784 45.890465 3.370624 +0.018432 0.023840 0.058880 44.812351 3.350016 +0.018752 0.023904 0.058912 44.142815 3.359552 +0.018048 0.023968 0.058752 44.178783 3.344864 +0.018944 0.024352 0.058336 43.739326 3.324704 +0.018624 0.024448 0.058848 44.133953 3.350432 +0.018144 0.023744 0.058560 44.209953 3.303712 +0.018784 0.024864 0.058816 47.551105 3.324832 +0.018560 0.024192 0.058560 44.506016 3.361440 +0.018464 0.024096 0.059232 45.260479 3.373792 +0.018208 0.023904 0.058816 43.520126 3.306464 +0.018912 0.024160 0.059136 44.894241 3.359168 +0.018176 0.023904 0.058560 43.937408 3.346144 +0.018272 0.023776 0.058624 45.763039 3.372704 +0.018624 0.023936 0.058208 44.033825 3.359872 +0.018528 0.024128 0.058816 44.764416 3.352896 +0.019168 0.024512 0.058368 46.291233 3.365920 +0.018592 0.024544 0.059008 43.742527 3.327968 +0.018112 0.023904 0.058688 44.356544 3.326688 +0.018080 0.023904 0.058656 45.442142 3.355072 +0.019168 0.024352 0.058336 44.255074 3.350048 +0.018240 0.024000 0.058720 44.161697 3.338656 +0.018240 0.023808 0.058528 44.145729 3.315744 +0.018720 0.024928 0.058560 45.072544 3.371008 +0.018080 0.023904 0.058816 43.702370 3.341888 +0.018368 0.023808 0.058816 43.575970 3.299296 +0.018688 0.024320 0.059296 43.717793 3.333248 +0.018496 0.024064 0.058848 43.947041 3.335840 +0.018368 0.024000 0.058144 43.712158 3.331872 +0.018432 0.024320 0.058656 44.220703 3.337888 +0.018336 0.023904 0.058176 44.825920 3.374944 +0.018528 0.024704 0.058976 44.140385 3.363008 +0.018816 0.024224 0.058400 45.405281 3.317472 +0.018336 0.023744 0.058976 44.312416 3.355776 +0.018112 0.045568 0.058848 44.755680 3.354752 +0.018656 0.024320 0.058752 44.192768 3.348256 +0.018176 0.024096 0.059200 45.754112 3.372000 +0.018080 0.023968 0.058720 46.946369 3.353312 +0.018432 0.024128 0.058528 44.438110 3.337728 +0.018496 0.024960 0.059072 43.898624 3.321408 +0.018368 0.023840 0.058272 43.752384 3.323872 +0.018592 0.024736 0.058752 44.201023 3.337536 +0.018464 0.023648 0.058848 43.677055 3.335360 +0.018208 0.024160 0.058688 43.618881 3.310912 +0.018752 0.024064 0.058240 44.926559 3.359040 +0.018528 0.023872 0.058944 43.743008 3.331584 +0.018720 0.024384 0.058784 43.801025 3.323424 +0.018496 0.024736 0.058784 44.012032 3.327872 +0.018272 0.023808 0.058688 44.386433 3.330432 +0.018752 0.024640 0.058848 44.205727 3.349312 +0.018208 0.023872 0.059008 44.826015 3.309536 +0.018176 0.023680 0.058816 45.208160 3.354272 +0.018816 0.024192 0.058496 44.493855 3.317248 +0.018496 0.024512 0.059328 43.948223 3.349600 +0.018240 0.023872 0.058464 44.428608 3.343808 +0.018560 0.024704 0.058624 43.890369 3.312288 +0.018240 0.023712 0.058240 43.805569 3.323296 +0.018400 0.023872 0.059008 45.787106 3.371136 +0.018752 0.024128 0.058848 43.840672 3.348352 +0.018432 0.023776 0.058848 44.164192 3.357088 +0.018880 0.023968 0.058112 44.347168 3.354688 +0.018432 0.024192 0.058720 44.216129 3.324736 +0.018272 0.023776 0.058720 44.190559 3.354336 +0.018432 0.024352 0.058688 43.711872 3.323712 +0.018624 0.024128 0.058432 45.393345 3.375840 +0.018304 0.023712 0.058592 44.782017 3.349088 +0.018336 0.023840 0.058688 43.736416 3.334432 +0.018656 0.024256 0.058400 45.058880 3.363744 +0.018368 0.024160 0.059264 43.723167 3.337056 +0.018368 0.023872 0.058752 43.919647 3.339904 +0.018880 0.024288 0.058624 43.884129 3.313088 +0.018368 0.024512 0.058784 44.874561 3.347008 +0.018240 0.023680 0.058560 44.016670 3.309280 +0.018528 0.024128 0.058688 45.110783 3.339264 +0.018272 0.023840 0.059040 44.218018 3.344768 +0.018528 0.024224 0.059232 44.826431 3.361856 +0.018688 0.024032 0.058208 44.290207 3.334208 +0.018112 0.024064 0.058752 44.820992 3.353408 +0.018432 0.023616 0.058176 44.788063 3.336896 +0.018880 0.024928 0.058528 44.210590 3.343072 +0.018400 0.023904 0.058432 43.780704 3.321920 +0.018368 0.024000 0.058656 43.483200 3.346272 +0.018944 0.024160 0.059168 44.709824 3.362208 +0.018560 0.024320 0.059424 43.876450 3.347648 +0.018144 0.023936 0.058368 43.988384 3.327712 +0.018592 0.024320 0.059168 45.215263 3.333856 +0.018848 0.023936 0.058528 44.235489 3.352256 +0.018400 0.024512 0.058688 44.457375 3.345408 +0.018784 0.024256 0.058528 43.682114 3.296320 +0.018240 0.023968 0.058752 45.466785 3.381056 +0.018528 0.023680 0.058976 43.931423 3.320448 +0.018528 0.024448 0.058816 45.373886 3.363360 +0.018304 0.023840 0.058336 44.727585 3.359648 +0.018432 0.023808 0.058688 43.775841 3.320832 +0.018592 0.024224 0.058496 44.202847 3.342688 +0.018240 0.024608 0.058560 44.205120 3.340928 +0.018240 0.024192 0.058400 44.778336 3.356864 +0.018656 0.024320 0.058784 45.641727 3.383360 +0.018528 0.024128 0.059680 43.601280 3.315552 +0.018144 0.023936 0.058464 43.578945 3.317344 +0.018656 0.024224 0.058848 45.397408 3.347936 +0.018400 0.023968 0.058528 44.231487 3.319264 +0.018336 0.023776 0.058560 44.848511 3.342784 +0.018528 0.024768 0.058848 43.756447 3.347232 +0.018336 0.023648 0.058336 44.226753 3.323552 +0.018656 0.024192 0.058816 43.834976 3.317536 +0.018560 0.024000 0.059104 44.106209 3.321056 +0.018144 0.023808 0.058592 46.839615 3.333024 +0.018400 0.023936 0.058368 43.928478 3.332544 +0.018784 0.024384 0.058528 44.846336 3.334464 +0.018336 0.023840 0.058528 44.211681 3.346112 +0.018336 0.024448 0.058432 43.727745 3.328864 +0.018592 0.024064 0.058720 44.218334 3.358240 +0.018656 0.024416 0.059424 43.898560 3.351168 +0.018400 0.023744 0.059264 44.766048 3.361984 +0.018464 0.024256 0.058624 43.958591 3.328128 +0.018432 0.023776 0.058496 44.757118 3.332352 +0.018560 0.024000 0.058816 46.913666 3.356032 +0.018944 0.024288 0.058720 44.154495 3.332288 +0.018176 0.024256 0.059072 44.142593 3.351296 +0.018656 0.024352 0.058304 44.089344 3.339776 +0.018688 0.024320 0.058752 44.336864 3.361472 +0.018432 0.023872 0.058976 44.179905 3.340864 +0.018240 0.023776 0.058752 44.227390 3.326560 +0.018752 0.024128 0.058080 44.755169 3.372928 +0.018464 0.023872 0.059008 44.301792 3.344000 +0.018496 0.024000 0.058304 44.244926 3.340448 +0.018688 0.024672 0.058656 45.508640 3.382208 +0.018496 0.024224 0.059264 44.766434 3.339904 +0.018432 0.024000 0.058496 43.891457 3.344512 +0.018560 0.024000 0.058720 43.753311 3.330976 +0.018112 0.023712 0.058624 45.392864 3.345024 +0.018304 0.023680 0.058432 43.545120 3.328928 +0.018752 0.024192 0.058528 43.649506 3.328160 +0.018144 0.023744 0.058496 43.661793 3.340928 +0.018656 0.024672 0.058880 44.105087 3.361920 +0.018432 0.023936 0.058176 43.770561 3.323136 +0.018272 0.024032 0.058976 44.903744 3.350336 +0.018592 0.024000 0.058944 43.873535 3.337920 +0.026624 0.030880 0.059904 44.125183 3.348960 +0.018336 0.023808 0.058368 44.161823 3.346080 +0.018272 0.024096 0.058848 45.090240 3.359232 +0.018816 0.024192 0.058304 44.167934 3.325024 +0.018656 0.025856 0.059424 44.202721 3.336800 +0.018208 0.023872 0.058816 44.787743 3.342080 +0.018752 0.024160 0.058656 44.195103 3.338304 +0.018560 0.024128 0.059360 43.809441 3.335392 +0.018144 0.023776 0.058816 44.153599 3.331328 +0.018848 0.024160 0.058432 44.023296 3.323584 +0.018400 0.024096 0.058656 43.689026 3.322528 +0.018528 0.024032 0.058688 43.890144 3.334272 +0.018784 0.024832 0.058752 43.480766 3.324704 +0.018176 0.023840 0.058368 43.783104 3.347328 +0.018336 0.023712 0.058432 43.871265 3.317888 +0.018656 0.023872 0.059200 44.450302 3.336448 +0.018144 0.023904 0.058496 43.756542 3.340480 +0.018432 0.023872 0.058560 43.979969 3.330464 +0.018432 0.024288 0.059104 45.398560 3.350688 +0.018624 0.024128 0.059104 44.991615 3.391040 +0.018336 0.024480 0.058752 44.101311 3.337248 +0.018496 0.024192 0.058336 44.001503 3.330912 +0.018240 0.023904 0.058720 44.452095 3.346272 +0.018240 0.023744 0.058848 44.463551 3.340192 +0.018720 0.024320 0.058464 43.696609 3.314528 +0.018208 0.023680 0.058080 44.492928 3.336768 +0.018592 0.024032 0.058464 43.900223 3.310656 +0.018720 0.024160 0.058656 44.859074 3.360224 +0.018304 0.024160 0.058752 43.826561 3.320704 +0.018144 0.023744 0.058560 44.197376 3.329376 +0.018752 0.024160 0.058752 44.088799 3.335488 +0.018304 0.023936 0.058592 44.202370 3.368704 +0.018496 0.023840 0.058720 44.712193 3.339040 +0.019392 0.024512 0.059072 44.171009 3.332800 +0.018496 0.024288 0.059552 44.023842 3.323296 +0.018240 0.023776 0.058176 44.138016 3.350592 +0.018720 0.024672 0.058496 43.915585 3.339840 +0.018400 0.023648 0.058432 44.268353 3.351648 +0.018176 0.024096 0.059008 44.240673 3.323616 +0.018560 0.024000 0.058944 44.751938 3.368096 +0.018624 0.023616 0.058720 45.439102 3.353440 +0.018272 0.023712 0.058592 43.846687 3.340256 +0.018816 0.024352 0.058560 44.111359 3.343488 +0.018400 0.023648 0.058400 44.817410 3.340736 +0.018272 0.024576 0.058464 43.709888 3.325568 +0.018496 0.024224 0.058048 44.256802 3.344608 +0.018368 0.023936 0.058752 43.989376 3.332352 +0.018624 0.023968 0.060000 44.784737 3.321632 +0.018944 0.024352 0.059328 45.130718 3.350176 +0.018464 0.024064 0.059232 44.154114 3.338496 +0.018080 0.024192 0.059296 44.793568 3.338144 +0.018656 0.023872 0.058656 43.707008 3.320576 +0.018496 0.045600 0.058560 44.835873 3.345952 +0.018464 0.024192 0.059040 45.166046 3.350624 +0.018560 0.024288 0.058464 44.125889 3.344672 +0.018688 0.023840 0.058560 44.903458 3.327744 +0.018432 0.024160 0.058976 45.122528 3.375328 +0.019456 0.024832 0.058368 43.551006 3.353760 +0.018304 0.023840 0.058880 43.957695 3.349824 +0.018176 0.023776 0.058496 45.320290 3.368544 +0.018752 0.024992 0.058944 44.812065 3.327200 +0.018400 0.023744 0.058464 44.687744 3.356800 +0.018144 0.024096 0.058688 44.169376 3.342176 +0.018816 0.023936 0.058944 45.222656 3.362400 +0.018368 0.024160 0.059232 44.039169 3.341120 +0.018240 0.023840 0.058400 44.717442 3.341952 +0.019168 0.024672 0.058784 44.227745 3.333440 +0.018624 0.024256 0.058624 44.199230 3.355488 +0.018080 0.024512 0.059008 46.892097 3.339776 +0.018560 0.024000 0.058112 44.823616 3.370944 +0.018208 0.024000 0.059008 43.879681 3.320352 +0.018560 0.023936 0.059136 43.960510 3.329344 +0.018880 0.024512 0.058720 44.755009 3.354944 +0.017952 0.023808 0.058592 44.148064 3.344608 +0.018496 0.024384 0.059584 44.812286 3.336896 +0.018656 0.024192 0.058464 44.801472 3.363360 +0.018336 0.024512 0.059040 45.386082 3.355008 +0.018272 0.023680 0.058208 43.948479 3.353728 +0.018560 0.024224 0.058592 43.978306 3.338208 +0.018432 0.024256 0.059808 43.916672 3.327296 +0.018144 0.024224 0.058752 44.205120 3.324384 +0.019040 0.024832 0.059040 44.897121 3.349632 +0.018336 0.023904 0.058656 44.252735 3.365472 +0.018176 0.023840 0.058624 44.187359 3.334656 +0.018816 0.024672 0.058816 43.802624 3.352832 +0.018432 0.023872 0.058944 43.712734 3.329408 +0.018848 0.024224 0.058848 44.763969 3.335680 +0.018688 0.024544 0.059328 44.854527 3.346688 +0.018336 0.024064 0.058784 44.393761 3.349792 +0.017952 0.023840 0.058272 44.195358 3.327168 +0.018880 0.024128 0.058688 46.295135 3.354080 +0.018272 0.023776 0.058592 44.041248 3.344608 +0.018368 0.024480 0.059008 44.177185 3.346752 +0.018432 0.023904 0.058208 44.467903 3.348096 +0.018464 0.024384 0.059232 44.164894 3.354016 +0.018208 0.023744 0.059104 44.778942 3.356832 +0.018688 0.024224 0.058752 44.187614 3.347936 +0.018080 0.023776 0.058848 43.846943 3.325248 +0.018304 0.023872 0.058656 44.218754 3.336224 +0.018624 0.024384 0.058208 44.264320 3.312768 +0.018592 0.024384 0.058976 44.013950 3.339456 diff --git a/data/parse.py b/data/parse.py new file mode 100755 index 0000000..af7f2f2 --- /dev/null +++ b/data/parse.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python2 + +from sys import argv + +def avg_one_file(filename): + txt = open(filename) + + line = txt.readline().split() + + maxdepth = len(line) + totals = [0.0] * maxdepth + iters = 0 + + while len(line) > 0: + for i, val in enumerate(line): + totals[i] += float(val) + iters += 1 + + line = txt.readline().split() + + avgs = [ x / iters for x in totals ] + print filename + ',', + print ', '.join([ str(x) for x in avgs ]) + +if __name__ == '__main__': + print("file, vertex shader, assemble primitives, geometry shader, scanline, fragment shader") + + for filename in argv[1:]: + avg_one_file(filename) diff --git a/data/percent-stacked.png b/data/percent-stacked.png new file mode 100644 index 0000000..3421dff Binary files /dev/null and b/data/percent-stacked.png differ diff --git a/data/suzanne.txt b/data/suzanne.txt new file mode 100644 index 0000000..728ae47 --- /dev/null +++ b/data/suzanne.txt @@ -0,0 +1,500 @@ +0.026208 0.036704 0.071424 18.866465 4.188480 +0.024480 0.033984 0.071104 18.520351 4.239072 +0.023840 0.033664 0.070624 18.445185 4.251360 +0.023968 0.034144 0.071328 18.279648 4.240960 +0.023968 0.033792 0.070304 17.973215 4.229856 +0.022336 0.031008 0.064448 16.863297 4.165888 +0.021920 0.030944 0.064128 16.337280 4.168064 +0.021888 0.030976 0.064320 16.583521 4.178144 +0.021728 0.030976 0.064448 16.621664 4.185152 +0.022112 0.031200 0.064416 16.632864 4.163232 +0.022016 0.030816 0.063360 16.629696 4.165184 +0.022176 0.031200 0.063712 16.689888 4.177632 +0.021824 0.030688 0.063392 16.783009 4.172800 +0.021760 0.030784 0.063648 16.461376 4.167328 +0.022208 0.030592 0.063200 16.776129 4.157568 +0.021856 0.031040 0.063840 16.816223 4.167936 +0.021920 0.030528 0.063360 16.478848 4.127104 +0.022080 0.030752 0.063712 17.110657 4.172576 +0.021728 0.030720 0.063616 16.472321 4.142048 +0.022016 0.030848 0.063680 16.262943 4.143648 +0.021824 0.030816 0.063552 16.196417 4.133248 +0.021792 0.030880 0.063712 16.998079 4.166016 +0.022048 0.030496 0.063456 16.223072 4.163008 +0.021568 0.030912 0.063936 16.913792 4.134496 +0.021952 0.030720 0.063520 16.324192 4.163744 +0.021888 0.031008 0.063808 16.610945 4.148512 +0.024384 0.032192 0.064032 16.188576 4.151456 +0.022976 0.032000 0.063872 16.700577 4.154272 +0.023264 0.032224 0.063488 16.551680 4.198720 +0.022688 0.032032 0.064096 16.372831 4.193408 +0.027168 0.035072 0.064384 21.414816 4.114496 +0.022944 0.032000 0.064448 16.750401 4.168576 +0.022624 0.032160 0.063648 16.987328 4.162720 +0.023264 0.031776 0.064096 16.361153 4.132800 +0.023168 0.032128 0.063488 16.876480 4.155424 +0.022816 0.031840 0.064000 16.101536 4.137856 +0.023008 0.031744 0.063520 16.456736 4.165536 +0.023168 0.032416 0.063680 16.314720 4.128384 +0.022816 0.031712 0.063744 16.597504 4.147744 +0.022976 0.032192 0.063744 16.819073 4.183712 +0.023520 0.032224 0.063776 16.130016 4.139424 +0.023200 0.031808 0.063712 16.746592 4.153760 +0.023296 0.032160 0.063680 16.349407 4.159264 +0.022976 0.031872 0.064224 16.225920 4.139488 +0.023072 0.031776 0.063456 16.228544 4.142144 +0.023168 0.031936 0.064160 16.254528 4.129856 +0.023136 0.032192 0.063552 16.108929 4.140544 +0.022784 0.032128 0.064000 16.108225 4.127328 +0.022720 0.031616 0.063424 16.506048 4.147328 +0.023776 0.032448 0.063968 16.406368 4.159200 +0.022848 0.031904 0.063776 16.422976 4.140512 +0.022848 0.032096 0.063616 16.401440 4.138144 +0.022912 0.032320 0.063456 16.257215 4.124288 +0.022912 0.031968 0.063936 16.154272 4.105344 +0.022976 0.031584 0.063456 16.159584 4.127200 +0.023392 0.032320 0.063744 16.759359 4.156768 +0.023008 0.031840 0.063360 17.003839 4.148704 +0.023584 0.031936 0.063616 16.384480 4.149632 +0.023360 0.031968 0.063424 16.565504 4.170976 +0.023072 0.031872 0.063872 16.178944 4.138528 +0.026304 0.034048 0.064800 22.275488 4.130272 +0.023200 0.032480 0.064320 17.076000 4.194624 +0.022976 0.032064 0.063584 16.619425 4.169984 +0.022848 0.032128 0.063840 16.876961 4.163040 +0.022880 0.031872 0.063584 17.196672 4.180800 +0.023072 0.032064 0.063840 16.433760 4.157952 +0.022848 0.031936 0.063456 16.702463 4.167872 +0.023488 0.032320 0.063904 16.726015 4.154176 +0.022624 0.031904 0.063328 16.533152 4.162048 +0.023552 0.032416 0.063776 17.088448 4.151584 +0.022624 0.031584 0.063808 16.180864 4.144768 +0.023200 0.031744 0.063680 16.696672 4.161760 +0.022912 0.031872 0.063808 16.502592 4.151648 +0.023040 0.032064 0.064192 16.928160 4.178176 +0.022720 0.031776 0.063808 16.187967 4.168736 +0.023008 0.032032 0.063872 16.597952 4.141536 +0.022976 0.031776 0.063456 15.901344 4.149536 +0.023904 0.032064 0.064416 16.723648 4.176032 +0.022880 0.031616 0.064128 16.610975 4.167264 +0.023712 0.032960 0.064096 16.608383 4.131648 +0.022624 0.031648 0.063264 16.616385 4.170688 +0.023168 0.031872 0.064192 16.368576 4.153984 +0.022688 0.031680 0.063840 16.593792 4.143328 +0.023200 0.032384 0.063264 17.235680 4.154592 +0.022752 0.031840 0.063392 16.564768 4.126464 +0.023936 0.032128 0.063936 16.359264 4.161408 +0.022880 0.031680 0.064096 16.521761 4.155264 +0.022912 0.031936 0.063712 17.032703 4.162912 +0.022656 0.031776 0.063552 16.269472 4.126080 +0.029664 0.038752 0.064736 17.114431 4.187360 +0.023264 0.032416 0.064128 16.778080 4.166496 +0.023136 0.032960 0.064032 16.941631 4.161472 +0.023008 0.031808 0.063904 17.393280 4.174848 +0.022496 0.031840 0.063648 16.236576 4.146272 +0.023040 0.031744 0.063872 16.611551 4.173024 +0.023776 0.032032 0.063808 16.719105 4.167776 +0.023072 0.031872 0.063520 16.208799 4.158016 +0.023136 0.032128 0.063904 16.313280 4.128192 +0.022784 0.031840 0.063392 17.223167 4.180224 +0.022816 0.032640 0.063712 16.663839 4.171232 +0.023072 0.031776 0.063456 16.304129 4.139552 +0.022784 0.032320 0.063616 16.891745 4.146048 +0.023488 0.031904 0.064928 16.079489 4.128000 +0.023136 0.032096 0.063520 16.763872 4.156032 +0.023072 0.031840 0.063456 16.741983 4.158752 +0.022624 0.031840 0.063776 16.475744 4.139232 +0.022816 0.031744 0.063360 16.117825 4.130400 +0.023168 0.032288 0.064032 16.355007 4.157600 +0.022880 0.031840 0.063328 16.889441 4.165600 +0.023168 0.032192 0.064064 16.612831 4.157440 +0.022912 0.032096 0.064192 16.995169 4.139520 +0.022880 0.032160 0.063808 15.995104 4.138784 +0.022624 0.031648 0.063616 16.427135 4.133312 +0.023232 0.032128 0.063776 16.565344 4.175488 +0.023104 0.031776 0.063712 16.045120 4.140384 +0.023104 0.032736 0.063904 16.233568 4.137440 +0.023040 0.031936 0.063264 16.314465 4.131552 +0.022976 0.031808 0.063616 16.203199 4.146208 +0.022848 0.031968 0.063776 16.174273 4.138080 +0.030720 0.038752 0.065408 16.756992 4.166112 +0.023296 0.032480 0.063840 16.826817 4.142784 +0.023392 0.032384 0.064128 16.322399 4.151744 +0.023232 0.031744 0.063488 16.238527 4.142848 +0.022912 0.032736 0.063712 16.688768 4.146560 +0.022848 0.031904 0.063392 16.199808 4.134848 +0.023008 0.031872 0.063840 16.499168 4.163424 +0.022944 0.031840 0.064032 16.281343 4.132480 +0.023424 0.032032 0.063712 16.172256 4.135680 +0.023232 0.032096 0.063616 16.287136 4.121056 +0.022752 0.031872 0.064064 16.932768 4.179040 +0.022656 0.031744 0.063840 16.875360 4.160000 +0.023072 0.032608 0.063712 16.779873 4.150976 +0.023008 0.031520 0.063200 16.047487 4.145312 +0.023264 0.032320 0.063616 16.754335 4.161792 +0.022720 0.031584 0.064096 16.746241 4.157888 +0.022752 0.032064 0.063680 16.813663 4.152896 +0.022944 0.031712 0.063456 16.239552 4.122272 +0.023200 0.053824 0.063776 16.227137 4.145952 +0.022848 0.031712 0.063392 16.519297 4.137632 +0.023296 0.032832 0.063840 16.459583 4.156960 +0.022848 0.031776 0.063296 16.190592 4.141152 +0.023392 0.031968 0.064064 16.290688 4.130720 +0.022624 0.031776 0.064192 16.519680 4.158976 +0.023168 0.032160 0.063968 16.208736 4.127328 +0.022752 0.032128 0.063488 16.542015 4.169664 +0.023552 0.032096 0.063712 16.399103 4.168672 +0.023488 0.032384 0.063808 16.463520 4.146144 +0.025600 0.034560 0.063936 16.392672 4.167232 +0.021984 0.031072 0.063488 16.186176 4.129536 +0.026720 0.035840 0.064384 16.822784 4.148224 +0.021856 0.030880 0.064608 16.627041 4.153536 +0.022240 0.030880 0.063936 16.468737 4.172672 +0.022368 0.030560 0.063296 16.157888 4.132576 +0.022176 0.030816 0.063616 16.404385 4.150656 +0.021760 0.030816 0.063392 16.526592 4.158080 +0.021696 0.031552 0.063776 16.399872 4.157408 +0.021888 0.030944 0.063456 16.130688 4.154080 +0.022016 0.030720 0.063520 16.791649 4.156640 +0.022016 0.031008 0.063872 16.443935 4.145792 +0.022272 0.030752 0.063552 16.337664 4.158624 +0.021920 0.030912 0.063296 16.132256 4.113408 +0.021920 0.030720 0.063840 16.397760 4.147584 +0.021824 0.031008 0.063232 16.079201 4.153280 +0.021920 0.031200 0.063936 16.244064 4.127360 +0.022944 0.031168 0.063264 16.312897 4.164192 +0.021888 0.030848 0.063744 16.152512 4.120768 +0.022144 0.030432 0.064256 16.386368 4.129664 +0.021952 0.030848 0.063648 16.433760 4.136768 +0.021888 0.030592 0.063520 16.840511 4.160576 +0.021824 0.030848 0.063680 17.002625 4.156416 +0.022016 0.030656 0.063520 16.684000 4.165248 +0.021632 0.031424 0.063968 16.088928 4.144096 +0.021728 0.030496 0.063232 16.810976 4.146912 +0.021984 0.030880 0.063936 16.094015 4.115136 +0.021952 0.030848 0.063776 16.099104 4.111840 +0.022080 0.031104 0.063776 16.379520 4.166496 +0.021856 0.030848 0.063392 16.351744 4.164320 +0.022080 0.030848 0.063680 16.727936 4.168064 +0.021856 0.030624 0.063712 16.491199 4.174400 +0.027456 0.037504 0.064352 17.079168 4.162464 +0.022048 0.031104 0.064000 16.432096 4.136928 +0.022144 0.030720 0.064160 16.400543 4.137408 +0.022112 0.030496 0.063744 15.989824 4.153824 +0.021856 0.030720 0.063680 16.222719 4.132416 +0.022176 0.030688 0.063392 16.770817 4.146656 +0.021856 0.030944 0.063808 16.137407 4.146080 +0.021824 0.030432 0.063328 16.737152 4.150720 +0.021920 0.031456 0.063776 16.392256 4.172576 +0.021664 0.030528 0.063424 16.257601 4.125280 +0.022272 0.031072 0.063520 16.431007 4.167168 +0.021760 0.030656 0.063392 16.450111 4.172224 +0.021984 0.030784 0.063456 16.719200 4.138624 +0.021760 0.030720 0.063392 17.002687 4.201056 +0.022048 0.030720 0.063808 16.470816 4.166976 +0.022560 0.030912 0.063968 16.650976 4.129632 +0.021888 0.031232 0.063968 17.223328 4.152288 +0.022144 0.030624 0.063296 16.165407 4.143232 +0.022368 0.031072 0.063584 16.134497 4.110240 +0.022432 0.030688 0.063936 16.873632 4.149600 +0.021792 0.030720 0.063616 17.021376 4.181920 +0.022016 0.030624 0.063392 16.532961 4.144128 +0.022048 0.030912 0.063648 17.069311 4.151456 +0.021728 0.030688 0.063488 16.038113 4.124640 +0.022272 0.031264 0.063648 16.235905 4.154688 +0.021984 0.030464 0.063520 16.056065 4.143360 +0.021728 0.030624 0.064064 16.771872 4.168032 +0.022304 0.030400 0.063520 16.005056 4.139104 +0.021824 0.030848 0.063680 16.113760 4.154272 +0.022016 0.030560 0.063424 16.649471 4.155936 +0.028256 0.036352 0.064736 16.944193 4.157024 +0.022368 0.031392 0.064256 16.354080 4.164768 +0.021888 0.031616 0.063872 16.243616 4.145792 +0.022528 0.031072 0.063712 16.438816 4.143328 +0.021888 0.031072 0.063392 16.033632 4.133824 +0.022176 0.030720 0.063776 16.054337 4.134080 +0.022400 0.030880 0.063648 16.271521 4.144640 +0.022272 0.030560 0.063168 16.205824 4.120320 +0.022400 0.031008 0.063712 16.271072 4.134208 +0.022496 0.030592 0.063232 16.375105 4.167776 +0.021728 0.031424 0.063328 16.568192 4.170496 +0.022016 0.030560 0.063584 16.084385 4.134496 +0.022176 0.030752 0.063648 16.149408 4.117536 +0.021984 0.030592 0.063680 16.900961 4.164000 +0.021888 0.030688 0.063616 16.421633 4.173952 +0.022176 0.031264 0.063200 16.062944 4.133824 +0.022048 0.030688 0.063840 16.325312 4.141888 +0.022112 0.030496 0.063488 16.984833 4.157280 +0.021696 0.031392 0.063680 16.659937 4.170464 +0.022272 0.030400 0.063200 17.023872 4.163296 +0.021952 0.030976 0.063520 17.009567 4.155264 +0.022176 0.030496 0.064032 16.254368 4.168640 +0.021856 0.030656 0.063776 16.292480 4.165568 +0.022752 0.030816 0.063744 16.101791 4.115072 +0.022304 0.030880 0.063744 16.488096 4.134944 +0.021824 0.030816 0.063264 16.662111 4.174944 +0.022112 0.031168 0.063456 16.409248 4.159744 +0.021856 0.030752 0.063424 16.439137 4.143712 +0.021920 0.030688 0.063488 16.391359 4.147552 +0.022016 0.030496 0.063648 16.554655 4.154112 +0.027840 0.036608 0.064736 17.010368 4.164448 +0.022336 0.031456 0.063808 15.996768 4.142624 +0.021984 0.031072 0.063744 16.906816 4.184800 +0.021920 0.030880 0.063616 16.634657 4.164416 +0.021920 0.031456 0.063904 16.296896 4.136864 +0.021856 0.030880 0.063232 16.646976 4.146496 +0.021920 0.030752 0.063904 16.218719 4.157920 +0.022080 0.030720 0.063712 16.606239 4.147712 +0.021568 0.030880 0.063840 16.322720 4.166688 +0.021696 0.030592 0.063200 16.625696 4.134688 +0.021888 0.030720 0.063968 16.996799 4.153184 +0.021984 0.030624 0.063264 16.231552 4.155392 +0.022208 0.031392 0.063648 16.350080 4.170912 +0.022080 0.030400 0.063424 16.844704 4.146240 +0.021984 0.030720 0.063360 16.327711 4.145056 +0.021824 0.030560 0.063680 16.102848 4.110208 +0.021664 0.030816 0.063616 16.078527 4.138944 +0.022048 0.030784 0.063264 16.489536 4.128448 +0.022240 0.030752 0.063840 16.475872 4.132480 +0.021760 0.030592 0.063424 17.257183 4.168224 +0.022208 0.031200 0.063456 16.406784 4.150592 +0.022112 0.030656 0.063072 16.668159 4.167456 +0.022112 0.030848 0.063616 16.247583 4.135872 +0.022304 0.030336 0.063616 16.081633 4.142208 +0.021664 0.030656 0.063520 16.351072 4.148704 +0.021984 0.030752 0.063264 16.449793 4.162496 +0.022048 0.030784 0.063936 16.300287 4.162976 +0.021888 0.030624 0.063136 16.163200 4.157728 +0.021984 0.031296 0.063872 16.566048 4.162560 +0.022432 0.030592 0.063296 16.640415 4.160224 +0.027168 0.036224 0.064704 17.213217 4.171936 +0.021952 0.031552 0.065312 16.945473 4.142368 +0.021920 0.030976 0.063840 17.042751 4.170400 +0.022048 0.030688 0.063424 16.249599 4.143584 +0.021920 0.031072 0.063520 16.507040 4.140544 +0.021760 0.030848 0.063488 16.619713 4.161248 +0.021888 0.031072 0.063552 16.013344 4.111840 +0.021792 0.030272 0.063040 16.646303 4.180160 +0.021728 0.030464 0.063520 16.320320 4.153504 +0.021824 0.030432 0.063872 16.139488 4.148000 +0.022208 0.030656 0.063456 16.697056 4.149600 +0.021888 0.030624 0.063392 16.185823 4.140096 +0.022048 0.030688 0.063648 16.592607 4.181632 +0.021632 0.030464 0.063264 16.168608 4.154432 +0.022112 0.031136 0.063648 16.898081 4.183584 +0.021856 0.030432 0.063232 16.913376 4.142880 +0.022304 0.030656 0.063552 16.442400 4.173120 +0.022304 0.030880 0.064064 16.246048 4.136384 +0.022176 0.030656 0.063584 16.700447 4.149408 +0.021792 0.030720 0.063360 16.443487 4.161536 +0.022048 0.031136 0.063712 17.162848 4.163904 +0.022208 0.030464 0.063264 16.643808 4.148352 +0.021984 0.031360 0.063648 16.545919 4.146816 +0.022208 0.030592 0.063360 16.036736 4.140032 +0.021792 0.030752 0.063776 16.363552 4.146528 +0.022240 0.051424 0.063776 16.496449 4.145152 +0.022208 0.030880 0.063840 16.290752 4.149472 +0.021920 0.030752 0.063328 16.965759 4.164512 +0.022272 0.030912 0.063712 16.057760 4.126496 +0.021760 0.030848 0.063296 16.429792 4.150912 +0.026624 0.037184 0.064608 16.728960 4.165728 +0.022304 0.031360 0.063936 16.433472 4.151680 +0.021696 0.031104 0.063776 16.904160 4.189888 +0.021792 0.030848 0.064064 16.207905 4.150944 +0.022048 0.030944 0.063936 16.289345 4.141952 +0.021728 0.030496 0.063392 16.763456 4.164544 +0.021856 0.030912 0.063840 16.175903 4.156288 +0.021696 0.030560 0.063232 15.980576 4.130688 +0.021952 0.031008 0.063680 16.344225 4.154144 +0.022048 0.030592 0.063168 16.657120 4.140192 +0.021888 0.030912 0.063616 16.959553 4.163808 +0.022080 0.030752 0.064000 16.378080 4.152960 +0.021920 0.030784 0.063776 16.244480 4.148096 +0.021824 0.030880 0.063296 16.504480 4.163904 +0.021664 0.030880 0.063712 16.451296 4.151168 +0.022272 0.030976 0.063264 17.227648 4.162176 +0.021760 0.031168 0.063456 16.160513 4.125568 +0.021984 0.030560 0.063360 16.971424 4.163904 +0.022112 0.030688 0.063584 16.282751 4.141440 +0.021824 0.030656 0.063776 16.944511 4.144192 +0.021920 0.030816 0.063904 17.185856 4.161664 +0.021856 0.030816 0.063360 16.098080 4.144608 +0.021952 0.030720 0.063712 16.832319 4.178432 +0.021824 0.030592 0.063744 16.172447 4.126880 +0.021888 0.031328 0.063616 16.018976 4.131744 +0.021888 0.030528 0.063456 16.196447 4.140416 +0.021760 0.030912 0.063616 16.611679 4.124160 +0.021920 0.030496 0.063840 16.379744 4.153824 +0.022784 0.031008 0.063392 16.150080 4.137472 +0.022368 0.030816 0.063456 16.778208 4.175936 +0.027648 0.036928 0.065120 16.268000 4.153216 +0.022080 0.031456 0.074400 16.350241 4.140160 +0.021824 0.031520 0.063776 16.370081 4.138176 +0.021920 0.030528 0.063264 16.341791 4.155744 +0.022048 0.030880 0.063936 16.393215 4.141152 +0.021920 0.030592 0.063808 16.958336 4.156544 +0.022144 0.030752 0.063648 16.664864 4.179648 +0.021920 0.030944 0.063232 16.410400 4.147136 +0.021888 0.030592 0.063584 16.451168 4.156992 +0.022208 0.030528 0.063168 16.576128 4.150208 +0.022208 0.031264 0.065248 16.249249 4.124320 +0.022176 0.030816 0.063488 16.939392 4.162496 +0.022016 0.030944 0.063712 16.883615 4.169280 +0.022080 0.030592 0.063744 16.100351 4.108384 +0.022240 0.031008 0.063584 16.386080 4.131008 +0.021600 0.030688 0.063264 16.660000 4.153760 +0.021920 0.030624 0.063712 16.688608 4.152992 +0.021984 0.030944 0.063392 16.007200 4.132512 +0.021856 0.031424 0.063872 16.884800 4.166912 +0.022176 0.030560 0.063264 16.875105 4.152096 +0.022304 0.030528 0.063744 16.393824 4.148320 +0.022528 0.030752 0.064224 16.770975 4.161024 +0.022048 0.030944 0.063840 16.028095 4.096064 +0.021824 0.030912 0.063392 16.017696 4.125984 +0.022080 0.030880 0.064128 16.656448 4.155328 +0.022336 0.030528 0.063424 15.746560 4.121952 +0.021856 0.031296 0.063616 17.201599 4.168224 +0.021984 0.030720 0.063328 16.717407 4.151552 +0.021600 0.031008 0.063616 17.005056 4.162720 +0.021856 0.030720 0.063808 16.736160 4.164672 +0.026304 0.036160 0.074112 16.989120 4.164096 +0.022272 0.031264 0.065024 16.217119 4.168544 +0.021984 0.031136 0.064288 17.143167 4.172384 +0.021984 0.030560 0.063648 16.367777 4.156992 +0.021536 0.031264 0.065344 16.212353 4.138240 +0.021600 0.030624 0.063392 16.646561 4.171712 +0.022112 0.030880 0.063840 16.367905 4.149728 +0.021536 0.030464 0.063744 16.386848 4.137280 +0.021984 0.030848 0.063840 16.829184 4.167584 +0.022208 0.030528 0.063296 16.970913 4.152768 +0.021632 0.030880 0.063936 16.785152 4.158464 +0.022240 0.030592 0.063296 16.676001 4.176032 +0.022144 0.031424 0.064000 16.361313 4.172640 +0.021728 0.030592 0.063392 16.720736 4.169504 +0.021792 0.030688 0.063968 16.488512 4.140608 +0.022048 0.030528 0.064000 16.521473 4.185600 +0.021952 0.030656 0.063712 16.790976 4.152896 +0.022240 0.030816 0.063232 16.873823 4.175200 +0.022048 0.030976 0.063616 16.407648 4.169280 +0.021792 0.030624 0.063488 16.618208 4.175936 +0.022016 0.031296 0.063648 16.258465 4.133728 +0.022080 0.030592 0.063776 16.426144 4.167904 +0.021984 0.030912 0.063904 17.293633 4.181728 +0.022240 0.030688 0.065088 16.478687 4.153184 +0.022240 0.030720 0.063712 16.762880 4.165440 +0.021920 0.030592 0.063488 17.121183 4.150208 +0.021824 0.030976 0.063712 16.509600 4.146112 +0.021568 0.030720 0.063520 16.127104 4.132928 +0.021728 0.031232 0.064032 16.471775 4.159072 +0.021824 0.030656 0.063424 16.062912 4.139808 +0.027008 0.046592 0.065344 16.785376 4.164160 +0.022816 0.031392 0.071072 16.378271 4.150048 +0.021728 0.031040 0.063712 16.469280 4.163360 +0.021760 0.031648 0.063584 16.216160 4.146848 +0.021888 0.030816 0.063552 16.257792 4.112736 +0.022112 0.030624 0.063616 16.718945 4.142144 +0.022080 0.031168 0.063744 16.809696 4.158272 +0.022144 0.030592 0.063232 15.742880 4.115104 +0.022272 0.031136 0.063616 16.523232 4.135424 +0.022048 0.030656 0.063744 16.370239 4.163360 +0.021952 0.030816 0.063616 16.522881 4.162880 +0.022176 0.030752 0.063360 16.493343 4.139808 +0.022016 0.030976 0.063776 16.223969 4.150944 +0.021792 0.030880 0.063424 16.585440 4.165760 +0.022016 0.031200 0.064928 16.540319 4.147776 +0.021824 0.030720 0.063520 16.848320 4.158944 +0.021600 0.030944 0.063776 16.575840 4.166112 +0.022176 0.030592 0.063936 17.040895 4.151424 +0.021952 0.030752 0.063776 16.439457 4.154048 +0.021760 0.030656 0.063424 16.493504 4.146688 +0.022240 0.030848 0.063616 17.042463 4.180576 +0.021792 0.030880 0.063200 16.474848 4.155840 +0.021696 0.031456 0.063776 17.134081 4.184448 +0.022144 0.030592 0.063360 16.812511 4.173024 +0.022016 0.030528 0.063680 16.142015 4.142624 +0.022656 0.030816 0.063840 16.419489 4.177536 +0.021888 0.030816 0.063648 16.456961 4.155168 +0.021856 0.030656 0.063264 16.217344 4.153216 +0.021920 0.032096 0.063808 16.132223 4.129920 +0.022112 0.030784 0.063776 16.550177 4.168000 +0.026464 0.041024 0.064992 16.305408 4.142176 +0.022368 0.031392 0.064384 16.444288 4.158272 +0.022080 0.031168 0.064064 16.004831 4.138656 +0.021760 0.030720 0.064000 16.643072 4.167328 +0.021952 0.030816 0.063680 16.411360 4.154752 +0.021920 0.030528 0.063072 16.651808 4.162240 +0.022208 0.030816 0.063936 16.301249 4.143008 +0.023200 0.030816 0.063392 16.216991 4.141504 +0.021952 0.031616 0.064032 16.492704 4.144224 +0.022304 0.031840 0.063424 16.266880 4.143328 +0.021888 0.031072 0.063744 16.813057 4.142880 +0.021792 0.030528 0.064192 16.305696 4.164704 +0.022112 0.030784 0.063552 16.389631 4.166144 +0.022592 0.031520 0.064000 16.574080 4.153824 +0.022400 0.030624 0.063616 16.732096 4.155392 +0.022080 0.030880 0.063360 15.682144 4.124736 +0.021760 0.031296 0.063552 16.716127 4.153184 +0.021984 0.030752 0.063296 16.611135 4.157120 +0.022656 0.031008 0.063552 16.987968 4.177248 +0.021792 0.030528 0.063776 16.975136 4.150944 +0.021952 0.030880 0.063616 16.383039 4.144704 +0.021824 0.030592 0.063328 16.464161 4.147456 +0.021888 0.030816 0.063104 16.161217 4.147232 +0.022016 0.030560 0.063456 16.514624 4.166144 +0.022048 0.031296 0.063168 15.896096 4.125184 +0.021888 0.030848 0.063040 16.963648 4.142912 +0.022144 0.030880 0.063616 16.159168 4.143744 +0.021856 0.030752 0.063776 17.251232 4.161088 +0.021888 0.030592 0.063456 16.450624 4.168128 +0.022592 0.030528 0.063232 16.229343 4.116256 +0.035456 0.036992 0.065696 16.340609 4.176000 +0.022496 0.031584 0.064256 16.719200 4.151840 +0.021920 0.053472 0.063936 16.952671 4.177664 +0.021920 0.030560 0.063552 17.159584 4.162336 +0.021856 0.030976 0.063680 16.957664 4.156064 +0.022048 0.030752 0.063968 16.697599 4.152320 +0.021728 0.030720 0.063648 16.822464 4.133888 +0.021888 0.030592 0.063168 16.608576 4.162656 +0.021792 0.030720 0.063264 16.411104 4.169088 +0.022176 0.030496 0.063360 16.775841 4.159200 +0.022016 0.031456 0.063648 16.460608 4.166496 +0.021952 0.030656 0.062880 16.488480 4.138752 +0.021824 0.031040 0.063488 16.164255 4.121536 +0.021664 0.030560 0.063840 16.665537 4.142496 +0.021792 0.030656 0.063392 16.379711 4.161600 +0.022336 0.030624 0.063264 16.845505 4.157248 +0.021984 0.030848 0.064064 17.081535 4.129024 +0.021728 0.030400 0.063296 16.946720 4.180672 +0.021920 0.031104 0.064000 16.455904 4.137504 +0.021920 0.030624 0.063520 16.279232 4.137568 +0.021920 0.030784 0.063552 16.302784 4.132128 +0.021952 0.030752 0.063712 16.126720 4.151232 +0.022048 0.030880 0.063680 15.999136 4.127712 +0.022016 0.030656 0.063488 17.039072 4.166464 +0.021888 0.030528 0.063808 16.771872 4.173504 +0.022048 0.030624 0.063488 16.821056 4.178784 +0.021952 0.031488 0.063712 16.546656 4.173568 +0.021952 0.031008 0.063296 17.034689 4.161248 +0.021952 0.030624 0.063296 17.078049 4.148128 +0.021984 0.030656 0.063936 16.228992 4.145792 +0.027264 0.036416 0.064672 16.842720 4.174144 +0.022400 0.031392 0.064064 16.147264 4.132384 +0.021856 0.030816 0.064096 16.793983 4.166336 +0.022304 0.030464 0.063360 16.191936 4.140960 +0.021952 0.031104 0.063648 16.448959 4.166112 +0.022208 0.030592 0.063072 16.748159 4.188640 +0.022016 0.030976 0.063552 16.765312 4.152064 +0.022240 0.030528 0.063648 16.699297 4.167200 +0.022336 0.030720 0.063840 16.101984 4.140928 +0.022304 0.030688 0.063584 16.510559 4.152896 +0.021760 0.030784 0.063712 16.693727 4.133984 +0.021952 0.030592 0.063360 16.119936 4.147808 +0.021696 0.031200 0.063840 16.596992 4.164608 +0.022080 0.030432 0.063360 16.828705 4.166880 +0.022016 0.030688 0.063552 16.368959 4.146240 +0.021856 0.031040 0.064000 16.194752 4.158784 +0.021760 0.030816 0.063232 16.290752 4.163552 +0.021792 0.030720 0.063264 16.544001 4.140864 +0.021952 0.030848 0.063552 16.555201 4.133920 +0.022336 0.030752 0.063520 16.432032 4.164896 +0.021920 0.031232 0.063744 16.216225 4.132960 diff --git a/data/suzanne_aa.txt b/data/suzanne_aa.txt new file mode 100644 index 0000000..28a5383 --- /dev/null +++ b/data/suzanne_aa.txt @@ -0,0 +1,53 @@ +0.026016 0.031936 40.062336 5.095584 +0.025984 0.031232 40.063873 5.163296 +0.025632 0.031680 39.768959 5.168896 +0.026048 0.031296 39.131519 5.154560 +0.023872 0.028768 35.964417 5.111264 +0.023424 0.028448 35.922913 5.088576 +0.023424 0.028768 35.541729 5.101280 +0.023840 0.028448 35.805695 5.079904 +0.023936 0.028480 35.846146 5.103616 +0.023200 0.028608 35.881088 5.118144 +0.023328 0.028192 36.054623 5.123808 +0.023552 0.028960 35.589695 5.076512 +0.023872 0.028448 35.803650 5.120896 +0.023328 0.028192 35.786015 5.088000 +0.023392 0.028608 35.582848 5.085984 +0.023680 0.028416 35.814945 5.080864 +0.023648 0.028448 35.661022 5.136928 +0.023392 0.028480 35.883007 5.115616 +0.023776 0.028704 35.626015 5.098400 +0.023552 0.028864 35.854721 5.113376 +0.023424 0.028608 35.790367 5.094496 +0.023264 0.028224 35.803295 5.104992 +0.023936 0.028224 35.799774 5.116256 +0.023680 0.028352 35.846046 5.135360 +0.023008 0.028160 35.575710 5.128576 +0.023808 0.028448 35.804127 5.103296 +0.023328 0.028832 35.834591 5.137472 +0.023232 0.028384 35.820450 5.129408 +0.023872 0.050400 35.644352 5.092960 +0.023360 0.028224 35.814400 5.108736 +0.023648 0.028544 35.601566 5.097952 +0.023488 0.028256 35.885120 5.119808 +0.023648 0.028416 35.617474 5.061408 +0.023584 0.028576 35.797279 5.093472 +0.023520 0.028768 35.895424 5.101408 +0.023584 0.028672 35.690880 5.089696 +0.023232 0.028896 35.887711 5.097248 +0.023296 0.028256 35.861217 5.102080 +0.023616 0.028352 35.614944 5.080800 +0.023712 0.028096 35.891201 5.103136 +0.023808 0.028320 36.040703 5.130784 +0.023840 0.028896 35.641537 5.109728 +0.023168 0.028416 35.795551 5.097728 +0.023584 0.028416 35.900639 5.081696 +0.023360 0.028352 35.612736 5.088032 +0.023680 0.028288 35.807552 5.114464 +0.023872 0.028416 35.804703 5.087264 +0.023232 0.028544 35.863487 5.132640 +0.024896 0.029024 35.612576 5.115616 +0.024128 0.028224 35.838207 5.110144 +0.024032 0.028928 35.677345 5.107104 +0.023520 0.028672 35.621822 5.097664 +0.023872 0.028832 35.661983 5.079072 diff --git a/data/suzanne_nobfc.txt b/data/suzanne_nobfc.txt new file mode 100644 index 0000000..5114cf9 --- /dev/null +++ b/data/suzanne_nobfc.txt @@ -0,0 +1,500 @@ +0.023392 0.034240 0.091616 19.714880 4.172224 +0.024096 0.034016 0.091776 20.360800 4.186816 +0.023840 0.033984 0.090848 19.472448 4.226816 +0.024160 0.034208 0.091680 18.463713 4.155296 +0.021920 0.030528 0.081216 17.415169 4.164224 +0.022304 0.030976 0.081504 17.915392 4.170432 +0.022304 0.030464 0.081216 17.864767 4.188288 +0.022272 0.030848 0.081760 18.151520 4.175392 +0.021696 0.030592 0.081920 17.797312 4.185760 +0.026816 0.035968 0.083008 21.966017 4.145920 +0.022240 0.031328 0.082144 17.506271 4.174208 +0.022080 0.030912 0.081792 17.078815 4.176064 +0.022048 0.030400 0.081856 17.646400 4.184800 +0.021792 0.030784 0.081920 17.822176 4.173792 +0.022336 0.030752 0.081664 18.893057 4.159328 +0.022048 0.031328 0.082112 18.258047 4.172096 +0.021984 0.030592 0.081312 17.753536 4.173376 +0.021984 0.031072 0.081760 17.625120 4.164576 +0.021952 0.030752 0.081536 17.297249 4.173952 +0.022176 0.031104 0.081664 17.852863 4.190592 +0.022112 0.030624 0.081472 17.964319 4.159232 +0.021696 0.030688 0.081984 18.006048 4.177440 +0.022112 0.030624 0.081536 18.775648 4.178304 +0.021952 0.030848 0.082208 17.988577 4.191072 +0.022464 0.030688 0.081600 17.628576 4.177216 +0.022272 0.030880 0.081696 18.080896 4.187072 +0.022688 0.031168 0.082272 17.948160 4.171904 +0.021856 0.031040 0.081920 17.705568 4.181248 +0.022272 0.030432 0.081792 17.437984 4.196416 +0.022080 0.030752 0.082176 18.434208 4.172128 +0.022080 0.030496 0.081472 18.200159 4.164800 +0.022112 0.030880 0.081856 17.166401 4.195680 +0.021984 0.030784 0.081440 17.917824 4.174144 +0.021888 0.031008 0.081888 18.036512 4.167392 +0.021952 0.030656 0.081536 18.144833 4.174272 +0.021920 0.030816 0.081664 17.824512 4.190368 +0.021888 0.030752 0.081600 18.310335 4.196448 +0.022048 0.030784 0.081728 17.636225 4.173728 +0.021984 0.030912 0.081600 18.005024 4.198912 +0.028000 0.037216 0.082784 22.048737 4.118176 +0.022048 0.031040 0.082304 18.336449 4.174208 +0.022080 0.030944 0.081632 17.802015 4.175968 +0.021792 0.030784 0.081632 18.037439 4.182048 +0.021728 0.031008 0.081728 17.780191 4.206400 +0.021696 0.030656 0.081664 17.519104 4.178528 +0.021664 0.030752 0.081856 18.108288 4.187552 +0.021920 0.030496 0.081312 18.209280 4.169728 +0.022016 0.030976 0.081888 18.052769 4.176800 +0.022112 0.030528 0.081920 17.822687 4.166592 +0.021632 0.030976 0.081760 17.801409 4.184384 +0.022080 0.030432 0.081600 18.052320 4.200256 +0.021888 0.030944 0.081920 17.869535 4.188864 +0.021504 0.030528 0.081248 17.797600 4.174400 +0.021600 0.030912 0.081856 17.855871 4.175392 +0.021696 0.030912 0.081600 18.032415 4.197760 +0.022016 0.030656 0.081600 17.683071 4.165376 +0.021792 0.030560 0.081696 17.619072 4.170688 +0.021952 0.031008 0.082176 17.316416 4.183168 +0.025568 0.034432 0.082400 18.641472 4.180512 +0.022240 0.031264 0.081920 18.099136 4.180256 +0.022080 0.030624 0.081760 17.379583 4.172736 +0.021856 0.030816 0.081888 17.586945 4.169152 +0.022112 0.030656 0.081504 17.980928 4.180800 +0.021920 0.030752 0.081504 17.798368 4.200416 +0.022016 0.030656 0.081344 17.674240 4.190240 +0.021888 0.030688 0.082208 17.196863 4.156032 +0.021952 0.030560 0.081952 17.888321 4.182912 +0.022080 0.030912 0.081696 17.812288 4.177120 +0.022048 0.030752 0.081632 18.224480 4.183072 +0.027456 0.036608 0.082464 21.934175 4.127264 +0.022656 0.031296 0.082240 17.371679 4.173344 +0.022112 0.030720 0.081728 18.311745 4.170496 +0.021664 0.030528 0.081888 17.976768 4.198240 +0.021760 0.030848 0.081408 18.261248 4.185152 +0.022592 0.030656 0.081792 18.020191 4.208704 +0.022176 0.031008 0.081760 17.878080 4.193120 +0.022496 0.030624 0.081728 17.261856 4.174656 +0.023040 0.031488 0.082880 16.968416 4.173600 +0.021856 0.030400 0.081696 17.735935 4.175040 +0.022304 0.030976 0.081664 17.664000 4.187296 +0.021632 0.030720 0.081344 17.588064 4.172416 +0.022560 0.031232 0.081792 18.114368 4.185536 +0.021888 0.030752 0.081504 17.474016 4.165760 +0.022016 0.031232 0.081824 18.155329 4.188032 +0.021856 0.030496 0.081600 17.579935 4.190368 +0.022080 0.030784 0.081696 17.664961 4.173248 +0.021984 0.031168 0.081536 17.887169 4.166208 +0.021920 0.030592 0.081792 17.948736 4.183616 +0.022336 0.030912 0.081088 18.552929 4.197536 +0.022048 0.030720 0.081920 18.204576 4.196416 +0.022304 0.030496 0.081792 17.933056 4.188768 +0.022016 0.031392 0.081728 17.550465 4.195584 +0.022144 0.030528 0.081760 18.338240 4.195936 +0.021952 0.030720 0.081664 17.805664 4.192256 +0.021728 0.030560 0.081920 17.628609 4.190816 +0.021664 0.030784 0.081472 18.263712 4.187392 +0.021728 0.030592 0.081280 17.908257 4.170176 +0.022048 0.030848 0.081888 17.653473 4.184672 +0.021856 0.030560 0.081184 17.809088 4.160704 +0.027328 0.037504 0.082944 22.232256 4.158880 +0.022176 0.031584 0.082208 18.235968 4.173568 +0.021728 0.031200 0.082112 18.077185 4.154912 +0.022464 0.031296 0.082560 17.968927 4.189120 +0.022048 0.030624 0.081856 17.401953 4.175296 +0.022016 0.030592 0.081600 17.498177 4.166144 +0.021856 0.030784 0.081856 18.087776 4.160832 +0.021984 0.030816 0.081824 18.140097 4.162432 +0.021600 0.031424 0.081248 17.228352 4.200832 +0.022624 0.030400 0.081408 18.035521 4.176224 +0.021632 0.030496 0.081856 18.144545 4.177824 +0.022016 0.030560 0.082016 17.568289 4.188512 +0.022144 0.031008 0.081632 18.119392 4.162304 +0.021536 0.030592 0.081248 17.839968 4.200160 +0.022016 0.031232 0.081728 18.486401 4.192256 +0.021728 0.030528 0.081664 18.276384 4.156768 +0.021920 0.031264 0.081824 18.094015 4.184864 +0.021952 0.030592 0.081216 17.786112 4.163680 +0.021952 0.030496 0.081824 18.135233 4.197504 +0.021888 0.030592 0.081696 17.675743 4.193920 +0.021856 0.030688 0.081952 18.089855 4.176928 +0.021824 0.030688 0.081248 17.746401 4.171232 +0.021632 0.030752 0.081888 18.207199 4.174624 +0.021664 0.030944 0.081376 17.679840 4.202368 +0.022144 0.031552 0.081472 17.898720 4.208128 +0.021856 0.030528 0.081504 17.830816 4.198400 +0.021856 0.030912 0.081856 17.712992 4.193632 +0.021792 0.030720 0.082432 17.302273 4.172928 +0.022080 0.030656 0.081568 17.832447 4.178048 +0.022240 0.030624 0.081536 17.946976 4.201600 +0.024352 0.033568 0.083232 18.004448 4.165792 +0.022496 0.031040 0.081568 18.132544 4.176896 +0.022112 0.031456 0.082208 18.029408 4.198176 +0.021920 0.030624 0.081344 18.114944 4.149408 +0.021856 0.031040 0.081760 18.141279 4.191072 +0.021856 0.030432 0.081792 17.581087 4.160256 +0.022592 0.030560 0.081888 18.038048 4.190880 +0.021952 0.030688 0.081632 17.456608 4.181952 +0.021824 0.052608 0.081888 17.590912 4.185888 +0.021888 0.030784 0.081376 18.466400 4.188256 +0.022080 0.031264 0.081472 17.785280 4.188480 +0.022048 0.030720 0.081440 17.978048 4.179936 +0.022144 0.030720 0.081728 18.301279 4.184128 +0.021792 0.030624 0.081792 17.511007 4.188512 +0.022272 0.031232 0.081664 17.364832 4.180288 +0.021728 0.030624 0.081344 18.056032 4.162944 +0.022112 0.030912 0.081856 18.834784 4.164896 +0.022336 0.030464 0.081856 17.505760 4.171456 +0.022240 0.031392 0.081920 17.874752 4.164864 +0.022464 0.030336 0.081696 18.367424 4.181056 +0.022080 0.030912 0.081600 17.794752 4.187072 +0.021824 0.031072 0.082080 18.233889 4.203232 +0.021792 0.030624 0.081472 17.687904 4.201728 +0.022336 0.030624 0.081088 17.355841 4.151520 +0.022336 0.030752 0.082176 18.065023 4.187552 +0.022208 0.030560 0.081280 18.422016 4.189344 +0.021856 0.031392 0.081728 18.042400 4.173856 +0.022112 0.030784 0.081920 17.580704 4.167520 +0.022048 0.030656 0.081376 17.850657 4.201088 +0.021728 0.031072 0.081952 17.565952 4.193056 +0.023872 0.033760 0.082656 18.201281 4.165664 +0.021952 0.031040 0.081824 18.196192 4.173472 +0.021920 0.030816 0.081984 17.630495 4.171424 +0.021952 0.030656 0.081248 17.215521 4.187776 +0.021952 0.031168 0.082080 18.101728 4.152224 +0.022080 0.030592 0.081280 17.554079 4.176896 +0.021952 0.031424 0.082080 17.797728 4.182688 +0.022368 0.030656 0.082016 18.260736 4.172032 +0.022656 0.030752 0.082144 18.019457 4.187936 +0.021952 0.030624 0.081728 18.074432 4.205120 +0.021920 0.030816 0.081760 17.565952 4.171968 +0.021696 0.030944 0.081472 18.560192 4.158752 +0.022048 0.031456 0.081600 18.543039 4.174944 +0.021696 0.030592 0.081632 17.572001 4.179136 +0.021984 0.030752 0.082048 17.318592 4.166688 +0.022208 0.030400 0.081760 18.235201 4.188352 +0.021952 0.030784 0.081760 18.086784 4.186624 +0.021888 0.030784 0.081472 17.398081 4.191712 +0.022016 0.030688 0.081664 17.794271 4.191424 +0.022048 0.030464 0.081632 18.480127 4.169664 +0.021856 0.031232 0.081760 18.139008 4.184064 +0.021856 0.030560 0.081504 17.585567 4.162432 +0.021664 0.030656 0.081760 17.994144 4.175488 +0.021920 0.030816 0.081856 17.732191 4.182784 +0.022080 0.030688 0.081888 18.277439 4.174144 +0.022048 0.030688 0.081504 17.518112 4.178080 +0.021920 0.031008 0.081632 18.218559 4.170912 +0.021696 0.030528 0.081472 17.450144 4.166624 +0.021888 0.031424 0.081568 18.152544 4.203456 +0.021696 0.030688 0.081664 18.483999 4.209120 +0.024416 0.032608 0.082592 17.628927 4.184640 +0.022400 0.031072 0.082528 18.025087 4.167264 +0.021920 0.031040 0.081664 18.520449 4.172576 +0.021920 0.030848 0.081824 17.568577 4.179392 +0.021760 0.030432 0.081920 17.321760 4.181440 +0.022176 0.030752 0.081504 18.190720 4.156128 +0.022176 0.031264 0.082336 17.385088 4.163392 +0.021888 0.030464 0.081504 17.965536 4.158400 +0.021760 0.031040 0.081792 17.418943 4.179200 +0.021888 0.030528 0.081568 17.280256 4.171104 +0.022592 0.030720 0.082080 17.248384 4.193952 +0.022336 0.030528 0.082016 18.346848 4.175968 +0.021824 0.030784 0.081760 17.878464 4.190240 +0.021760 0.030720 0.081312 17.861984 4.172224 +0.021888 0.031168 0.081728 17.219744 4.180416 +0.022208 0.030496 0.081728 18.074432 4.189888 +0.022240 0.030496 0.082080 18.006048 4.190400 +0.021728 0.030592 0.081888 17.598080 4.172672 +0.021856 0.030976 0.081728 18.180449 4.183072 +0.021984 0.030816 0.081312 17.757376 4.181248 +0.021568 0.030816 0.081920 17.814144 4.177760 +0.021696 0.030624 0.081536 17.229759 4.171776 +0.021952 0.031136 0.081536 18.097471 4.151040 +0.021952 0.030656 0.081600 17.250113 4.167328 +0.021952 0.030656 0.081632 17.844608 4.193376 +0.021856 0.030720 0.081792 18.107201 4.160448 +0.021664 0.030720 0.082048 17.667233 4.184192 +0.021728 0.030784 0.081600 18.078432 4.169472 +0.022048 0.030752 0.081728 17.800224 4.181664 +0.022112 0.030624 0.081536 17.896896 4.168864 +0.024256 0.034176 0.082560 18.179935 4.189120 +0.021984 0.030976 0.081888 18.190144 4.176032 +0.021856 0.030816 0.082144 17.930401 4.172576 +0.021888 0.030624 0.082272 18.072289 4.171424 +0.022080 0.030624 0.081888 17.408001 4.163232 +0.022080 0.030880 0.081024 17.719999 4.182496 +0.021824 0.030752 0.081920 17.663233 4.192064 +0.021632 0.030528 0.081440 17.669184 4.177920 +0.022304 0.031584 0.082176 17.497791 4.164160 +0.022144 0.030752 0.081440 17.842720 4.177120 +0.022048 0.030688 0.081536 17.171713 4.183584 +0.021760 0.030688 0.082016 17.418528 4.178656 +0.022048 0.030752 0.081600 18.517120 4.170432 +0.021728 0.030784 0.081536 17.938272 4.176224 +0.022112 0.030976 0.081600 18.062401 4.165440 +0.021696 0.030656 0.081536 18.353409 4.190016 +0.021856 0.031136 0.081760 17.399008 4.169120 +0.021888 0.030720 0.081344 17.560736 4.159072 +0.021856 0.030592 0.081536 18.499968 4.164320 +0.021888 0.030624 0.081728 17.545696 4.186368 +0.022240 0.030592 0.081792 17.228319 4.192736 +0.021856 0.030688 0.081312 18.477856 4.162304 +0.022048 0.030656 0.081504 18.044031 4.164608 +0.022016 0.030496 0.081312 18.880960 4.145184 +0.022048 0.031168 0.082048 17.035488 4.176320 +0.022240 0.030304 0.081376 18.220320 4.152256 +0.022048 0.030880 0.081952 18.507008 4.188800 +0.021568 0.030528 0.081728 17.812416 4.208864 +0.021728 0.030656 0.081600 17.577791 4.176480 +0.022048 0.030464 0.081536 18.068384 4.189920 +0.024096 0.032992 0.083008 17.982624 4.184192 +0.021856 0.030752 0.082176 17.957279 4.176288 +0.022048 0.031392 0.082016 18.433311 4.159072 +0.021728 0.030752 0.081632 18.233248 4.184192 +0.021600 0.030656 0.081728 18.491680 4.210048 +0.021952 0.030656 0.081824 17.346945 4.165824 +0.021984 0.030816 0.082176 17.238752 4.177248 +0.021792 0.030752 0.081600 17.671265 4.175648 +0.021792 0.030624 0.081728 18.294880 4.174272 +0.021632 0.030656 0.081600 18.550272 4.161440 +0.022144 0.031296 0.081568 17.047392 4.183008 +0.022080 0.030464 0.081632 17.602400 4.190080 +0.021568 0.030880 0.081920 17.904064 4.197760 +0.022080 0.030336 0.082176 18.136543 4.177280 +0.021984 0.031008 0.081792 17.326015 4.187232 +0.022176 0.030656 0.081120 18.055777 4.212864 +0.022112 0.030912 0.081920 18.037439 4.182112 +0.021952 0.030624 0.081248 18.110271 4.177888 +0.021856 0.031264 0.081760 17.578337 4.191200 +0.021824 0.030656 0.081472 17.981377 4.184064 +0.022080 0.030656 0.081920 17.146751 4.183840 +0.022016 0.030560 0.081856 17.835232 4.184064 +0.022112 0.030784 0.081824 18.092512 4.189696 +0.021536 0.030688 0.081344 18.450815 4.175328 +0.021760 0.030752 0.081664 18.020479 4.177024 +0.021760 0.030432 0.081344 18.227072 4.219392 +0.022240 0.031008 0.081696 18.479391 4.162144 +0.021696 0.030528 0.081376 17.736511 4.191392 +0.021888 0.030752 0.081760 17.864449 4.157472 +0.022016 0.030816 0.081824 18.182079 4.187904 +0.024000 0.033696 0.082880 17.670977 4.176640 +0.021824 0.030752 0.081920 18.255264 4.188928 +0.022016 0.030656 0.081792 17.961632 4.171008 +0.021664 0.030752 0.081792 18.207296 4.186272 +0.021984 0.031200 0.081888 18.030815 4.175936 +0.022048 0.030496 0.081280 17.672928 4.171808 +0.021888 0.030656 0.081632 17.030497 4.178592 +0.022176 0.030560 0.081792 17.624640 4.189440 +0.021920 0.030656 0.081664 18.360449 4.163680 +0.021920 0.030752 0.081568 18.594496 4.185408 +0.021888 0.030816 0.081504 18.126207 4.170720 +0.022112 0.030880 0.081024 17.733791 4.175488 +0.021536 0.030976 0.081696 17.618784 4.172672 +0.022272 0.030560 0.081216 18.214399 4.191168 +0.021568 0.030720 0.081600 17.811329 4.178272 +0.021856 0.052896 0.081952 17.241505 4.168192 +0.021952 0.030816 0.081664 16.991585 4.187968 +0.022112 0.030528 0.081280 18.124096 4.159616 +0.022400 0.030752 0.081696 18.057119 4.191136 +0.021760 0.030432 0.081440 17.835487 4.173952 +0.021728 0.031136 0.081632 17.734465 4.203712 +0.021760 0.030528 0.081600 17.553535 4.176480 +0.022080 0.030592 0.081856 17.926304 4.169024 +0.021600 0.030720 0.082176 17.618336 4.172928 +0.022144 0.030624 0.081632 17.069504 4.183136 +0.021824 0.030496 0.081088 18.046783 4.189632 +0.021888 0.030752 0.081760 17.956192 4.197280 +0.021984 0.030464 0.081568 18.075552 4.170688 +0.021984 0.031168 0.081568 18.217695 4.201856 +0.021920 0.030656 0.081536 17.792831 4.175680 +0.024384 0.033280 0.082752 17.167233 4.177760 +0.022016 0.030912 0.082208 17.935425 4.180512 +0.021664 0.030944 0.082048 17.466976 4.182016 +0.021696 0.030656 0.081504 18.487713 4.177696 +0.022304 0.030688 0.081792 17.798431 4.200544 +0.021856 0.030688 0.081728 17.624449 4.196896 +0.021600 0.031232 0.081888 17.603296 4.183008 +0.021856 0.030656 0.081888 18.548672 4.170656 +0.021856 0.030784 0.081856 17.351200 4.184096 +0.021984 0.030688 0.082080 17.965088 4.179904 +0.021856 0.030816 0.081664 18.001728 4.168416 +0.022048 0.030496 0.081632 17.508545 4.190368 +0.022304 0.030592 0.081792 18.421696 4.186208 +0.021888 0.030432 0.081376 18.166689 4.195488 +0.022048 0.031776 0.082112 17.967424 4.174336 +0.022208 0.030720 0.081312 18.150305 4.188352 +0.021664 0.030592 0.081728 18.032608 4.187296 +0.021920 0.030624 0.081696 18.533119 4.187232 +0.021984 0.030752 0.081760 18.357824 4.192512 +0.021824 0.030464 0.081120 17.645569 4.164704 +0.021696 0.030720 0.081856 18.059809 4.177504 +0.021792 0.030592 0.081408 17.828833 4.167936 +0.021696 0.031200 0.081632 17.884607 4.186080 +0.022304 0.030688 0.081504 17.555424 4.194336 +0.022208 0.030656 0.081568 17.376801 4.174912 +0.022144 0.030496 0.082464 17.323488 4.171424 +0.021792 0.030592 0.081696 17.857887 4.186496 +0.021824 0.030688 0.081536 18.071775 4.203104 +0.021600 0.030912 0.081856 17.801792 4.188640 +0.022016 0.030592 0.080896 17.640673 4.177312 +0.024096 0.033824 0.082496 18.168192 4.152224 +0.021792 0.030752 0.081696 17.436577 4.206592 +0.021888 0.030656 0.081984 18.072737 4.153120 +0.021952 0.030720 0.081888 18.070272 4.174816 +0.021984 0.030816 0.081984 17.605536 4.188864 +0.021600 0.030720 0.081344 17.773664 4.175296 +0.021696 0.030784 0.081728 18.056480 4.177088 +0.022016 0.030400 0.081408 18.264929 4.172224 +0.021728 0.031040 0.081888 18.247393 4.161632 +0.022080 0.030560 0.081472 17.872320 4.168832 +0.021984 0.030688 0.081632 17.249727 4.142368 +0.021856 0.030656 0.081856 18.165600 4.178272 +0.021920 0.030560 0.081696 17.073792 4.173248 +0.021952 0.030560 0.081120 17.775265 4.157408 +0.021952 0.030752 0.081728 18.059937 4.180896 +0.022144 0.030624 0.081600 17.882591 4.177504 +0.021824 0.031200 0.081472 17.337280 4.194848 +0.021952 0.030496 0.081216 18.196064 4.166944 +0.021664 0.030752 0.081696 17.255424 4.161888 +0.021920 0.030432 0.082080 17.840416 4.182336 +0.021632 0.031040 0.081856 17.697344 4.172640 +0.021952 0.030464 0.081440 17.735680 4.178464 +0.022048 0.030688 0.081664 17.811071 4.193280 +0.021824 0.030496 0.081280 17.422497 4.200672 +0.022240 0.031296 0.081600 17.949951 4.185536 +0.021952 0.030688 0.081504 17.580992 4.195744 +0.022016 0.030720 0.081504 18.169184 4.191392 +0.022112 0.030528 0.082048 18.880417 4.176096 +0.022112 0.030944 0.081760 17.243328 4.179616 +0.021792 0.030752 0.081344 18.934143 4.180704 +0.023648 0.033024 0.082880 18.262272 4.197280 +0.021728 0.030720 0.081664 18.361696 4.192832 +0.022112 0.031584 0.082144 17.833408 4.194784 +0.021984 0.030528 0.081792 17.346336 4.197760 +0.021696 0.030656 0.081760 18.512993 4.180064 +0.022304 0.030720 0.081920 17.502176 4.166240 +0.022240 0.030656 0.081472 17.158079 4.183808 +0.022112 0.030784 0.081632 18.262815 4.200992 +0.021760 0.030880 0.081760 17.636225 4.183424 +0.021728 0.030560 0.081504 17.401152 4.167744 +0.022048 0.031040 0.081568 17.789120 4.163808 +0.021952 0.030560 0.081568 17.667040 4.175904 +0.021952 0.030656 0.081696 17.889120 4.170880 +0.021856 0.030432 0.082080 17.676128 4.181696 +0.021760 0.030784 0.081472 17.613953 4.174432 +0.021952 0.030592 0.081376 17.919008 4.181824 +0.021888 0.030624 0.082112 18.486336 4.181440 +0.021824 0.030784 0.081344 18.440672 4.206272 +0.021760 0.030880 0.081632 17.035488 4.181440 +0.022432 0.030528 0.081248 17.556095 4.160576 +0.021856 0.030720 0.081984 17.708351 4.184576 +0.021792 0.030432 0.081888 17.924320 4.171680 +0.021664 0.030624 0.081472 18.615040 4.171936 +0.021856 0.030688 0.081632 17.317345 4.172832 +0.022016 0.030816 0.081664 18.086817 4.198400 +0.021888 0.030400 0.081248 17.477728 4.183360 +0.022080 0.031296 0.081632 18.255297 4.179040 +0.021600 0.030560 0.081440 17.833344 4.193568 +0.021856 0.030400 0.081568 18.239424 4.194080 +0.021696 0.030464 0.081856 17.562624 4.177856 +0.024032 0.033216 0.082848 18.281055 4.190656 +0.022464 0.030720 0.081824 17.675392 4.165696 +0.021824 0.030880 0.082016 17.555519 4.177728 +0.021952 0.030624 0.081152 18.475807 4.172352 +0.021760 0.031328 0.081664 17.926529 4.182560 +0.021792 0.031008 0.081728 17.807775 4.184384 +0.021856 0.030848 0.081728 18.074593 4.189184 +0.021888 0.030688 0.081472 18.174561 4.197856 +0.021664 0.030720 0.081760 17.801825 4.171616 +0.021696 0.030624 0.081280 17.937408 4.181408 +0.021792 0.030656 0.081696 17.936928 4.169824 +0.021952 0.030720 0.081600 17.681280 4.182144 +0.021856 0.031200 0.081696 18.080736 4.186848 +0.021856 0.030560 0.081568 17.999456 4.180096 +0.021984 0.031136 0.081600 18.316095 4.180928 +0.021632 0.030400 0.082016 17.911615 4.170816 +0.022208 0.030816 0.081664 17.620352 4.177056 +0.022048 0.030432 0.081088 17.353792 4.163456 +0.022048 0.030720 0.081664 18.125824 4.173984 +0.021664 0.030528 0.081216 18.184481 4.179456 +0.021760 0.031168 0.081664 17.376608 4.180032 +0.021824 0.030432 0.081568 18.207487 4.164384 +0.021888 0.030624 0.081664 18.132799 4.169792 +0.021760 0.030400 0.081728 17.696512 4.156224 +0.022144 0.030656 0.081792 17.851295 4.164992 +0.021920 0.030496 0.081248 17.736320 4.167488 +0.021984 0.030816 0.081472 17.596895 4.200576 +0.022400 0.030528 0.081216 17.876320 4.175456 +0.021632 0.031360 0.081856 17.498112 4.154816 +0.021952 0.030752 0.081440 17.783136 4.173984 +0.024448 0.033376 0.082624 17.976065 4.190080 +0.021664 0.031040 0.082368 17.856001 4.183424 +0.022176 0.031104 0.081760 18.216991 4.180416 +0.022528 0.030944 0.082080 17.416384 4.167488 +0.021920 0.030656 0.081216 17.956575 4.152640 +0.022144 0.030592 0.081376 18.453568 4.181856 +0.021632 0.031616 0.081760 18.464449 4.177888 +0.022176 0.030560 0.081536 18.032097 4.197184 +0.021888 0.030560 0.081632 17.068512 4.187264 +0.021952 0.030816 0.081696 17.736448 4.164000 +0.021824 0.030848 0.081600 17.931553 4.154848 +0.021792 0.030528 0.081504 18.145536 4.173216 +0.022176 0.030592 0.082016 17.977888 4.159456 +0.021952 0.030624 0.081312 17.274689 4.162400 +0.021856 0.031200 0.081920 18.053951 4.174112 +0.021568 0.030592 0.081408 18.343328 4.175040 +0.022112 0.030720 0.082016 17.443008 4.179776 +0.021856 0.030656 0.081632 17.234655 4.187808 +0.021920 0.030592 0.081792 18.121792 4.170752 +0.022432 0.030624 0.081760 17.936001 4.167040 +0.021760 0.030720 0.081600 17.287968 4.189344 +0.021984 0.030784 0.081440 17.681791 4.186816 +0.022016 0.053120 0.082048 18.001568 4.190816 +0.021984 0.030432 0.081344 18.268513 4.192032 +0.022176 0.030592 0.081760 17.738720 4.187328 +0.021888 0.030624 0.082048 17.258144 4.159584 +0.021952 0.030816 0.081536 17.803616 4.177760 +0.021984 0.030752 0.081760 17.643328 4.174208 +0.021632 0.030880 0.081632 17.343489 4.191712 +0.021824 0.030432 0.081312 17.294527 4.160928 +0.024000 0.034688 0.082560 17.983423 4.166880 +0.021632 0.030784 0.081920 17.608480 4.158368 +0.021760 0.030816 0.081824 17.704256 4.186304 +0.022080 0.030624 0.081728 18.739904 4.172544 +0.021888 0.030752 0.081728 17.445984 4.220992 +0.021952 0.030688 0.081664 18.287104 4.196576 +0.021856 0.030752 0.081600 17.497313 4.196928 +0.021568 0.030400 0.081472 18.326591 4.183392 +0.021952 0.031168 0.081920 17.083584 4.167680 +0.022272 0.030432 0.081824 17.538752 4.178240 +0.022592 0.030464 0.081792 18.046432 4.171968 +0.021600 0.030752 0.081760 17.617537 4.188288 +0.022368 0.030720 0.082080 17.785568 4.153696 +0.022400 0.030624 0.081344 17.681120 4.187904 +0.021920 0.030944 0.081408 17.318239 4.178368 +0.022080 0.030368 0.081408 17.264128 4.169504 +0.021984 0.031264 0.082176 18.007263 4.162080 +0.021600 0.030816 0.081376 17.931841 4.170048 +0.021856 0.030528 0.081600 18.074112 4.177504 +0.021760 0.030528 0.081952 17.227488 4.206208 +0.021728 0.030720 0.081952 18.123137 4.152416 +0.021728 0.030720 0.081344 17.941856 4.149824 +0.022112 0.030592 0.081664 17.889471 4.165696 +0.021760 0.030464 0.081184 17.403616 4.182784 +0.021984 0.031296 0.081824 17.164320 4.178528 +0.021760 0.030560 0.081952 17.952032 4.184416 +0.021696 0.030688 0.081600 17.533152 4.167808 +0.022048 0.030720 0.082048 17.616961 4.147200 +0.022080 0.030944 0.082016 17.853409 4.164416 +0.022016 0.030560 0.081280 17.704865 4.200672 +0.024352 0.033440 0.083104 17.815264 4.189760 +0.021824 0.030880 0.081760 17.437120 4.190144 +0.021728 0.031296 0.081952 17.028448 4.182592 +0.022048 0.030688 0.081760 17.483488 4.171808 +0.021824 0.030720 0.081536 18.338207 4.200960 +0.022112 0.030528 0.081824 17.759935 4.195392 +0.022272 0.030976 0.081792 17.842848 4.171296 +0.022432 0.030624 0.081152 18.471329 4.167936 +0.021920 0.030816 0.081568 18.471104 4.175232 +0.021888 0.030464 0.081664 17.984896 4.167104 +0.021824 0.031136 0.081920 18.300703 4.167584 diff --git a/renders/backface.gif b/renders/backface.gif new file mode 100644 index 0000000..505aedc Binary files /dev/null and b/renders/backface.gif differ diff --git a/renders/cow-correct.png b/renders/cow-correct.png new file mode 100644 index 0000000..29e0329 Binary files /dev/null and b/renders/cow-correct.png differ diff --git a/renders/cow-interp-normals.png b/renders/cow-interp-normals.png new file mode 100644 index 0000000..82112a5 Binary files /dev/null and b/renders/cow-interp-normals.png differ diff --git a/renders/cow-normals1.png b/renders/cow-normals1.png new file mode 100644 index 0000000..29e0329 Binary files /dev/null and b/renders/cow-normals1.png differ diff --git a/renders/cow-oops1.png b/renders/cow-oops1.png new file mode 100644 index 0000000..6738f07 Binary files /dev/null and b/renders/cow-oops1.png differ diff --git a/renders/cow-oops2.png b/renders/cow-oops2.png new file mode 100644 index 0000000..8f8bc33 Binary files /dev/null and b/renders/cow-oops2.png differ diff --git a/renders/cow-oops3.png b/renders/cow-oops3.png new file mode 100644 index 0000000..bf2bf63 Binary files /dev/null and b/renders/cow-oops3.png differ diff --git a/renders/cube-subdiv.png b/renders/cube-subdiv.png new file mode 100644 index 0000000..8aeb3f1 Binary files /dev/null and b/renders/cube-subdiv.png differ diff --git a/renders/demo.gif b/renders/demo.gif new file mode 100644 index 0000000..aebfb9e Binary files /dev/null and b/renders/demo.gif differ diff --git a/renders/light.gif b/renders/light.gif new file mode 100644 index 0000000..9d536f8 Binary files /dev/null and b/renders/light.gif differ diff --git a/renders/suzanne-clipped.png b/renders/suzanne-clipped.png new file mode 100644 index 0000000..9cdc8fa Binary files /dev/null and b/renders/suzanne-clipped.png differ diff --git a/renders/suzanne-normals.png b/renders/suzanne-normals.png new file mode 100644 index 0000000..3d5a259 Binary files /dev/null and b/renders/suzanne-normals.png differ diff --git a/renders/suzanne-nosmooth.png b/renders/suzanne-nosmooth.png new file mode 100644 index 0000000..f62936c Binary files /dev/null and b/renders/suzanne-nosmooth.png differ diff --git a/renders/suzanne-smooth.png b/renders/suzanne-smooth.png new file mode 100644 index 0000000..f751f1a Binary files /dev/null and b/renders/suzanne-smooth.png differ diff --git a/renders/suzanne-subdiv.png b/renders/suzanne-subdiv.png new file mode 100644 index 0000000..70889af Binary files /dev/null and b/renders/suzanne-subdiv.png differ diff --git a/renders/suzanne-wat.png b/renders/suzanne-wat.png new file mode 100644 index 0000000..01f07ca Binary files /dev/null and b/renders/suzanne-wat.png differ diff --git a/renders/tri-subdiv.png b/renders/tri-subdiv.png new file mode 100644 index 0000000..3ec4a3a Binary files /dev/null and b/renders/tri-subdiv.png differ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a57f69f..ad12313 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,6 +2,7 @@ set(SOURCE_FILES "rasterize.cu" "rasterize.h" "rasterizeTools.h" + "sceneStructs.h" ) cuda_add_library(src diff --git a/src/main.cpp b/src/main.cpp index a125d7c..49553d7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -30,8 +30,7 @@ int main(int argc, char **argv) { fpstracker = 0; // Launch CUDA/GL - if (init(mesh)) { - // GLFW main loop + if (init(mesh)) { // GLFW main loop mainLoop(); } @@ -39,14 +38,18 @@ int main(int argc, char **argv) { } void mainLoop() { + int iters = 0; while (!glfwWindowShouldClose(window)) { + iters++; + if (iters > 500) { + //exit(1); + } glfwPollEvents(); runCuda(); time_t seconds2 = time (NULL); if (seconds2 - seconds >= 1) { - fps = fpstracker / (seconds2 - seconds); fpstracker = 0; seconds = seconds2; @@ -71,7 +74,6 @@ void mainLoop() { //------------------------------- //---------RUNTIME STUFF--------- //------------------------------- - void runCuda() { // Map OpenGL buffer object for writing from CUDA on a single GPU // No data is moved (Win & Linux). When mapped to CUDA, OpenGL should not use this buffer @@ -83,7 +85,6 @@ void runCuda() { frame++; fpstracker++; - } //------------------------------- @@ -97,8 +98,8 @@ bool init(obj *mesh) { return false; } - width = 800; - height = 800; + width = 350; + height = 350; window = glfwCreateWindow(width, height, "CIS 565 Pathtracer", NULL, NULL); if (!window) { glfwTerminate(); @@ -152,7 +153,6 @@ void initPBO() { // Allocate data for the buffer. 4-channel 8-bit image glBufferData(GL_PIXEL_UNPACK_BUFFER, size_tex_data, NULL, GL_DYNAMIC_COPY); cudaGLRegisterBufferObject(pbo); - } void initCuda() { diff --git a/src/rasterize.cu b/src/rasterize.cu index 53103b5..61c98f4 100644 --- a/src/rasterize.cu +++ b/src/rasterize.cu @@ -1,4 +1,4 @@ -/** +/* * @file rasterize.cu * @brief CUDA-accelerated rasterization pipeline. * @authors Skeleton code: Yining Karl Li, Kai Ninomiya @@ -10,42 +10,120 @@ #include #include +#include #include + +#include +#include #include +#include + +#include +#include +#include +#include + +#include #include #include "rasterizeTools.h" +#include "sceneStructs.h" + +/************************* Struct Definitions *********************************/ struct VertexIn { glm::vec3 pos; glm::vec3 nor; glm::vec3 col; - // TODO (optional) add other vertex attributes (e.g. texture coordinates) }; struct VertexOut { - // TODO + glm::vec3 pos; + glm::vec3 nor; + glm::vec3 col; + + glm::vec3 worldPos; }; struct Triangle { - VertexOut v[3]; + glm::vec3 pos[3]; + glm::vec3 nor[3]; + glm::vec3 col[3]; + + glm::vec3 worldPos[3]; + bool valid; + bool middle; }; struct Fragment { glm::vec3 color; + Triangle tri; + glm::vec3 baryCoords; + int z; + bool valid; }; +static float t = 0; + static int width = 0; static int height = 0; -static int *dev_bufIdx = NULL; -static VertexIn *dev_bufVertex = NULL; -static Triangle *dev_primitives = NULL; -static Fragment *dev_depthbuffer = NULL; -static glm::vec3 *dev_framebuffer = NULL; static int bufIdxSize = 0; static int vertCount = 0; +static int primMultFactor = 4; + +static int *dev_bufIdx = NULL; +static VertexIn *dev_bufVertexIn = NULL; +static VertexOut *dev_bufVertexOut = NULL; +static Triangle *dev_origPrimitives = NULL; +static Triangle *dev_genPrimitives = NULL; +static Fragment *dev_depthbuffer = NULL; +static glm::vec3 *dev_framebuffer = NULL; + +__device__ VertexOut transformVertex(glm::vec3 pos, glm::vec3 nor, + glm::mat4 model, glm::mat4 invModel, glm::mat4 mvp) { + VertexOut vo; + vo.worldPos = multiplyMV(model, glm::vec4(pos, 1)); + vo.pos = multiplyMV(mvp, glm::vec4(pos, 1)); + vo.nor = glm::vec3(invModel * glm::vec4(nor, 0)); + vo.col = glm::vec3(0.f); + return vo; +} + +__device__ Triangle buildTriangle(VertexOut v0, VertexOut v1, VertexOut v2) { + Triangle tri; + tri.pos[0] = v0.pos; + tri.pos[1] = v1.pos; + tri.pos[2] = v2.pos; + + tri.nor[0] = v0.nor; + tri.nor[1] = v1.nor; + tri.nor[2] = v2.nor; + + tri.col[0] = v0.col; + tri.col[1] = v1.col; + tri.col[2] = v2.col; + + tri.worldPos[0] = v0.worldPos; + tri.worldPos[1] = v1.worldPos; + tri.worldPos[2] = v2.worldPos; + tri.valid = true; + tri.middle = false; + return tri; +} + +__device__ void printVec3(glm::vec3 v) { + printf("(%f, %f, %f)\n", v.x, v.y, v.z); +} + +__device__ void printMat4(const glm::mat4 &m) { + printf("%f, %f, %f, %f\n", m[0][0], m[1][0], m[2][0], m[3][0]); + printf("%f, %f, %f, %f\n", m[0][1], m[1][1], m[2][1], m[3][1]); + printf("%f, %f, %f, %f\n", m[0][2], m[1][2], m[2][2], m[3][2]); + printf("%f, %f, %f, %f\n", m[0][3], m[1][3], m[2][3], m[3][3]); +} + +/************************* Output to Screen ***********************************/ /** * Kernel that writes the image to the OpenGL PBO directly. */ -__global__ -void sendImageToPBO(uchar4 *pbo, int w, int h, glm::vec3 *image) { +__global__ void sendImageToPBO(uchar4 *pbo, int w, int h, glm::vec3 *image) { int x = (blockIdx.x * blockDim.x) + threadIdx.x; int y = (blockIdx.y * blockDim.y) + threadIdx.y; int index = x + (y * w); @@ -63,30 +141,49 @@ void sendImageToPBO(uchar4 *pbo, int w, int h, glm::vec3 *image) { } } -// Writes fragment colors to the framebuffer -__global__ -void render(int w, int h, Fragment *depthbuffer, glm::vec3 *framebuffer) { +/** + * Writes fragment colors to the framebuffer + */ +__global__ void render(int w, int h, Fragment *depthbuffer, + glm::vec3 *framebuffer) { int x = (blockIdx.x * blockDim.x) + threadIdx.x; int y = (blockIdx.y * blockDim.y) + threadIdx.y; - int index = x + (y * w); if (x < w && y < h) { - framebuffer[index] = depthbuffer[index].color; + int frameidx = x + (y * w); + int depthidx = 4*frameidx; + glm::vec3 color = depthbuffer[depthidx].color + + depthbuffer[depthidx+1].color + + depthbuffer[depthidx+2].color + + depthbuffer[depthidx+3].color; + framebuffer[frameidx] = color / 4.f; } } +/************************* Initialization *************************************/ + /** * Called once at the beginning of the program to allocate memory. */ void rasterizeInit(int w, int h) { width = w; height = h; + cudaFree(dev_depthbuffer); - cudaMalloc(&dev_depthbuffer, width * height * sizeof(Fragment)); - cudaMemset(dev_depthbuffer, 0, width * height * sizeof(Fragment)); + cudaMalloc(&dev_depthbuffer, 4*width * height * sizeof(Fragment)); + cudaMemset( dev_depthbuffer, 0, 4*width * height * sizeof(Fragment)); + + cudaFree(dev_bufVertexOut); + cudaMalloc(&dev_bufVertexOut, width * height * sizeof(VertexOut)); + cudaMemset( dev_bufVertexOut, 0, width * height * sizeof(VertexOut)); + + cudaFree(dev_genPrimitives); + cudaMalloc(&dev_genPrimitives, primMultFactor * width * height * sizeof(Triangle)); + cudaMemset( dev_genPrimitives, 0, primMultFactor * width * height * sizeof(Triangle)); + cudaFree(dev_framebuffer); - cudaMalloc(&dev_framebuffer, width * height * sizeof(glm::vec3)); - cudaMemset(dev_framebuffer, 0, width * height * sizeof(glm::vec3)); + cudaMalloc(&dev_framebuffer, width * height * sizeof(glm::vec3)); + cudaMemset( dev_framebuffer, 0, width * height * sizeof(glm::vec3)); checkCUDAError("rasterizeInit"); } @@ -103,35 +200,338 @@ void rasterizeSetBuffers( cudaMalloc(&dev_bufIdx, bufIdxSize * sizeof(int)); cudaMemcpy(dev_bufIdx, bufIdx, bufIdxSize * sizeof(int), cudaMemcpyHostToDevice); - VertexIn *bufVertex = new VertexIn[_vertCount]; + VertexIn *bufVertexIn = new VertexIn[_vertCount]; for (int i = 0; i < vertCount; i++) { int j = i * 3; - bufVertex[i].pos = glm::vec3(bufPos[j + 0], bufPos[j + 1], bufPos[j + 2]); - bufVertex[i].nor = glm::vec3(bufNor[j + 0], bufNor[j + 1], bufNor[j + 2]); - bufVertex[i].col = glm::vec3(bufCol[j + 0], bufCol[j + 1], bufCol[j + 2]); + bufVertexIn[i].pos = glm::vec3(bufPos[j + 0], bufPos[j + 1], bufPos[j + 2]); + bufVertexIn[i].nor = glm::vec3(bufNor[j + 0], bufNor[j + 1], bufNor[j + 2]); + bufVertexIn[i].col = glm::vec3(bufCol[j + 0], bufCol[j + 1], bufCol[j + 2]); } - cudaFree(dev_bufVertex); - cudaMalloc(&dev_bufVertex, vertCount * sizeof(VertexIn)); - cudaMemcpy(dev_bufVertex, bufVertex, vertCount * sizeof(VertexIn), cudaMemcpyHostToDevice); + cudaFree(dev_bufVertexIn); + cudaMalloc(&dev_bufVertexIn, vertCount * sizeof(VertexIn)); + cudaMemcpy( dev_bufVertexIn, bufVertexIn, vertCount * sizeof(VertexIn), cudaMemcpyHostToDevice); - cudaFree(dev_primitives); - cudaMalloc(&dev_primitives, vertCount / 3 * sizeof(Triangle)); - cudaMemset(dev_primitives, 0, vertCount / 3 * sizeof(Triangle)); + cudaFree(dev_origPrimitives); + cudaMalloc(&dev_origPrimitives, vertCount / 3 * sizeof(Triangle)); + cudaMemset(dev_origPrimitives, 0, vertCount / 3 * sizeof(Triangle)); checkCUDAError("rasterizeSetBuffers"); } +/************************* Rasterization Pipeline *****************************/ + +__device__ void clearFragment(int idx, Fragment *depthbuffer) { + depthbuffer[idx].valid = false; + depthbuffer[idx].z = INT_MAX; + depthbuffer[idx].color = glm::vec3(.1, .1, .1); +} + +__global__ void clearDepthBuffer(int width, int height, Fragment *depthbuffer) { + int x = (blockIdx.x * blockDim.x) + threadIdx.x; + int y = (blockIdx.y * blockDim.y) + threadIdx.y; + + if (x < width && y < height) { + int index = x + (y * width); + clearFragment(4*index , depthbuffer); + clearFragment(4*index+1, depthbuffer); + clearFragment(4*index+2, depthbuffer); + clearFragment(4*index+3, depthbuffer); + } +} + +// Applies vertex transformations (from given model-view-projection matrix) +__global__ void vertexShader(int vertcount, + VertexIn *verticesIn, VertexOut *verticesOut, + glm::mat4 model, glm::mat4 invModel, glm::mat4 mvp) { + int k = (blockIdx.x * blockDim.x) + threadIdx.x; + + if (k < vertcount) { + VertexIn vin = verticesIn[k]; + + //VertexOut vo = transformVertex(vin.pos, vin.nor, model, invModel, mvp); + VertexOut vo; + vo.pos = vin.pos; + vo.nor = vin.nor; + verticesOut[k] = vo; + } +} + +// Assembles sets of 3 vertices into Triangles. +__global__ void assemblePrimitives(int primitivecount, VertexOut *vertices, + int *indices, Triangle *primitives) { + int k = (blockIdx.x * blockDim.x) + threadIdx.x; + + if (k < primitivecount) { + VertexOut v0 = vertices[indices[k*3 ]]; + VertexOut v1 = vertices[indices[k*3+1]]; + VertexOut v2 = vertices[indices[k*3+2]]; + primitives[k] = buildTriangle(v0, v1, v2); + } +} + +__device__ void subdivide(int idx, Triangle tri, Triangle *genprimitives, + glm::mat4 model, glm::mat4 invModel, glm::mat4 mvp) { + // New vertices + glm::vec3 v0pos = tri.pos[0]; + glm::vec3 v1pos = tri.pos[1]; + glm::vec3 v2pos = tri.pos[2]; + glm::vec3 v3pos = midpoint(v0pos, v1pos); + glm::vec3 v4pos = midpoint(v0pos, v2pos); + glm::vec3 v5pos = midpoint(v1pos, v2pos); + + // New normals + glm::vec3 v0nor = tri.nor[0]; + glm::vec3 v1nor = tri.nor[1]; + glm::vec3 v2nor = tri.nor[2]; + glm::vec3 v3nor = midpoint(v0nor, v1nor); + glm::vec3 v4nor = midpoint(v0nor, v2nor); + glm::vec3 v5nor = midpoint(v1nor, v2nor); + + VertexOut v0 = transformVertex(v0pos, v0nor, model, invModel, mvp); + VertexOut v1 = transformVertex(v1pos, v1nor, model, invModel, mvp); + VertexOut v2 = transformVertex(v2pos, v2nor, model, invModel, mvp); + VertexOut v3 = transformVertex(v3pos, v3nor, model, invModel, mvp); + VertexOut v4 = transformVertex(v4pos, v4nor, model, invModel, mvp); + VertexOut v5 = transformVertex(v5pos, v5nor, model, invModel, mvp); + + genprimitives[idx ] = buildTriangle(v0, v3, v4); + genprimitives[idx+1] = buildTriangle(v3, v1, v5); + genprimitives[idx+2] = buildTriangle(v4, v5, v2); + genprimitives[idx+3] = buildTriangle(v3, v5, v4); // middle triangle + genprimitives[idx+3].middle = true; +} + +__global__ void geometryShader(int primitivecount, int multFactor, Triangle *primitives, + Triangle *genprimitives, glm::vec3 eye, + glm::mat4 model, glm::mat4 invModel, glm::mat4 mvp) { + int k = (blockIdx.x * blockDim.x) + threadIdx.x; + + if (k < primitivecount) { + int genidx = k * multFactor; + + // Back-face culling + Triangle tri = primitives[k]; + glm::vec3 v0 = multiplyMV(mvp, glm::vec4(tri.pos[0], 1)); + glm::vec3 v1 = multiplyMV(mvp, glm::vec4(tri.pos[1], 1)); + glm::vec3 v2 = multiplyMV(mvp, glm::vec4(tri.pos[2], 1)); + glm::vec3 n = glm::cross(v1 - v0, v2 - v0); + if (n.z > 0.f) { + // Triangle tessellation + subdivide(genidx, tri, genprimitives, model, invModel, mvp); + } else { + //subdivide(genidx, tri, genprimitives, model, invModel, mvp); + genprimitives[genidx ].valid = false; + genprimitives[genidx+1].valid = false; + genprimitives[genidx+2].valid = false; + genprimitives[genidx+3].valid = false; + } + } +} + +__device__ void storeFragment(float x, float y, float width, float height, + int fragmentidx, Triangle tri, Fragment *fragments) { + + glm::vec3 bary = calculateBarycentricCoordinate(tri.pos, glm::vec2(x, y)); + + if (isBarycentricCoordInBounds(bary)) { + Fragment prev = fragments[fragmentidx]; + + float z = getZAtCoordinate(tri.pos, bary); + if (z < -1.f) { + return; + } + + int depth = z * INT_MAX; + atomicMin(&fragments[fragmentidx].z, depth); + + if (fragments[fragmentidx].z == depth) { + fragments[fragmentidx] = (Fragment) { glm::vec3(0, 0, 0), tri, bary, depth, true}; + } + } else { + } +} + +// Scans across triangles to generate primitives (pixels). +__global__ void scanline(int w, int h, int tricount, + Triangle *primitives, Fragment *fragments) { + int k = (blockIdx.x * blockDim.x) + threadIdx.x; + + if (k < tricount) { + Triangle tri = primitives[k]; + if (tri.valid == false) { + return; + } + + float ystep = 2.f / h; + float xstep = 2.f / w; + + float yjit = ystep / 4; + float xjit = xstep / 4; + + AABB bb = getAABBForTriangle(tri.pos); + + float ymin = glm::max(-1.f, (int) (bb.min.y / ystep) * ystep); + float xmin = glm::max(-1.f, (int) (bb.min.x / xstep) * xstep); + float ymax = glm::min(1.f, bb.max.y); + float xmax = glm::min(1.f, bb.max.x); + for (float y = ymin; y < ymax; y += ystep) { + for (float x = xmin; x < xmax; x += xstep) { + glm::vec2 pos = fromNDC(x, y, w, h); + int fragmentidx = 4*(pos.x + (pos.y * w)); + + storeFragment(x, y, w, h, fragmentidx, tri, fragments); + storeFragment(x+xjit, y, w, h, fragmentidx+1, tri, fragments); + storeFragment(x, y+yjit, w, h, fragmentidx+2, tri, fragments); + storeFragment(x+xjit, y+yjit, w, h, fragmentidx+3, tri, fragments); + } + } + } +} + +__device__ void colorFragment(Fragment &frag, glm::vec3 light) { + if (frag.valid) { + glm::vec3 norm = barycentricInterpolate(frag.tri.nor, frag.baryCoords); + glm::vec3 ndc_pos = barycentricInterpolate(frag.tri.pos, frag.baryCoords); + glm::vec3 pos = barycentricInterpolate(frag.tri.worldPos, frag.baryCoords); + glm::vec3 lightdir = glm::normalize(light - pos); + frag.color = glm::dot(lightdir, norm) * glm::vec3(.2f, .2f, .7f) + glm::vec3(.1, .1, .3); + //frag.color = glm::abs(glm::normalize(norm)); + if (frag.tri.middle == true) { + frag.color *= 1.5; + } + } +} + +__global__ void fragmentShader(int width, int height, + Fragment *fragments, glm::vec3 light) { + int x = (blockIdx.x * blockDim.x) + threadIdx.x; + int y = (blockIdx.y * blockDim.y) + threadIdx.y; + + if (x < width && y < height) { + int index = 4*(x + (y * width)); + colorFragment(fragments[index] , light); + colorFragment(fragments[index+1], light); + colorFragment(fragments[index+2], light); + colorFragment(fragments[index+3], light); + } +} + +struct terminator { + __device__ bool operator()(const Triangle tri) { + return tri.valid == false; + } +}; + +int compactPrimitives(int primitivecount, Triangle *primitives) { + Triangle *new_end = thrust::remove_if(thrust::device, + primitives, primitives+primitivecount, terminator()); + return (new_end - primitives); +} + /** * Perform rasterization. */ void rasterize(uchar4 *pbo) { + //t += 0.01f; + int sideLength2d = 8; dim3 blockSize2d(sideLength2d, sideLength2d); dim3 blockCount2d((width - 1) / blockSize2d.x + 1, (height - 1) / blockSize2d.y + 1); - // TODO: Execute your rasterization pipeline here - // (See README for rasterization pipeline outline.) + int tricount = bufIdxSize / 3; + + int sideLength1d = 16; + dim3 blockSize1d(sideLength1d); + dim3 vertBlockCount((vertCount + sideLength1d - 1) / sideLength1d); + dim3 triBlockCount((tricount + sideLength1d - 1) / sideLength1d); + + Camera c; + // Suzanne + c.position = glm::vec3(1, 1, 4); + c.view = glm::vec3(0, 1, 0); + c.up = glm::vec3(0, -1, 0); + c.light = glm::vec3(1, 3, 3); + c.fovy = glm::radians(45.f); + + // Cow +// c.position = glm::vec3(0, .2, -0.5); +// c.view = glm::vec3(0, .2, 0); +// c.up = glm::vec3(0, 1, 0); +// c.light = glm::vec3(0, 4, 5); +// c.fovy = 17.f; + + // Cube + c.position = glm::vec3(0, 0, 0.25); + c.view = glm::vec3(0, 0, 0); + c.up = glm::vec3(0, 1, 0); + c.light = glm::vec3(0, 4, 5); + c.fovy = glm::radians(40.f); + + glm::mat4 model = glm::rotate(t, glm::vec3(0.f, 1.f, 0.f)); + glm::mat4 invModel = glm::inverseTranspose(model); + glm::mat4 view = glm::lookAt(c.position, c.view, c.up); + glm::mat4 persp = glm::perspective(c.fovy, 1.f, .1f, 10.f); + glm::mat4 mvp = persp * view * model; + + // Set CudaEvents + float vShadeTime, assPrimitivesTime, scanlineTime, fShadeTime; + cudaEvent_t begin, end; + cudaEventCreate(&begin); + cudaEventCreate(&end); + + // Clear Depth Buffer + clearDepthBuffer<<>>(width, height, dev_depthbuffer); + + // VertexIn -> VertexOut + cudaEventRecord(begin); + vertexShader<<>>(vertCount, dev_bufVertexIn, + dev_bufVertexOut, model, invModel, mvp); + checkCUDAError(""); + + cudaEventRecord(end); cudaEventSynchronize(end); cudaEventElapsedTime(&vShadeTime, begin, end); + + // VertexOut -> Triangle + cudaEventRecord(begin); + assemblePrimitives<<>>(tricount, + dev_bufVertexOut, dev_bufIdx, dev_origPrimitives); + checkCUDAError(""); + + cudaEventRecord(end); cudaEventSynchronize(end); cudaEventElapsedTime(&assPrimitivesTime, begin, end); + + // Triangle -> Triangle + cudaEventRecord(begin); + geometryShader<<>>(tricount, primMultFactor, + dev_origPrimitives, dev_genPrimitives, + c.position, model, invModel, mvp); + checkCUDAError(""); + + cudaEventRecord(end); cudaEventSynchronize(end); cudaEventElapsedTime(&assPrimitivesTime, begin, end); + + int genPrimitiveCount = compactPrimitives(tricount * primMultFactor, dev_genPrimitives); + dim3 genPrimCount((genPrimitiveCount + sideLength1d - 1) / sideLength1d); + + // Triangle -> Fragment + cudaEventRecord(begin); + scanline<<>>(width, height, tricount * + primMultFactor, dev_genPrimitives, dev_depthbuffer); + checkCUDAError(""); + + cudaEventRecord(end); cudaEventSynchronize(end); cudaEventElapsedTime(&scanlineTime, begin, end); + + // Fragment -> Fragment + cudaEventRecord(begin); + fragmentShader<<>>(width, height, + dev_depthbuffer, c.light); + checkCUDAError(""); + + cudaEventRecord(end); cudaEventSynchronize(end); cudaEventElapsedTime(&fShadeTime, begin, end); + + // Clear CudaEvents + cudaEventDestroy(begin); + cudaEventDestroy(end); + + //fprintf(stderr, "%f %f %f %f\n", vShadeTime, assPrimitivesTime, scanlineTime, fShadeTime); // Copy depthbuffer colors into framebuffer render<<>>(width, height, dev_depthbuffer, dev_framebuffer); @@ -147,11 +547,17 @@ void rasterizeFree() { cudaFree(dev_bufIdx); dev_bufIdx = NULL; - cudaFree(dev_bufVertex); - dev_bufVertex = NULL; + cudaFree(dev_bufVertexOut); + dev_bufVertexOut = NULL; + + cudaFree(dev_bufVertexIn); + dev_bufVertexIn = NULL; + + cudaFree(dev_origPrimitives); + dev_origPrimitives = NULL; - cudaFree(dev_primitives); - dev_primitives = NULL; + cudaFree(dev_genPrimitives); + dev_genPrimitives = NULL; cudaFree(dev_depthbuffer); dev_depthbuffer = NULL; diff --git a/src/rasterize.h b/src/rasterize.h index a06b339..598fd61 100644 --- a/src/rasterize.h +++ b/src/rasterize.h @@ -8,8 +8,6 @@ #pragma once -#include - void rasterizeInit(int width, int height); void rasterizeSetBuffers( int bufIdxSize, int *bufIdx, diff --git a/src/rasterizeTools.h b/src/rasterizeTools.h index 46c701e..cdea388 100644 --- a/src/rasterizeTools.h +++ b/src/rasterizeTools.h @@ -17,15 +17,36 @@ struct AABB { glm::vec3 max; }; +/** Convert from pixel coordinates to normalized device coords */ +__host__ __device__ +glm::vec2 toNDC(int x, int y, int width, int height) { + return glm::vec2((2.f * x / (float) width ) - 1, + (2.f * y / (float) height) - 1); +} + +/** Convert from NDC coordinates to pixel coords */ +__host__ __device__ +glm::vec2 fromNDC(float ndc_x, float ndc_y, int width, int height) { + float x = (ndc_x + 1) * width / 2.f; + float y = (ndc_y + 1) * height / 2.f; + return glm::vec2(x, y); +} + +/** Returns the midpoint between two vec3s */ +__host__ __device__ +glm::vec3 midpoint (glm::vec3 v1, glm::vec3 v2) { + return (v1 + v2) / 2.f; +} + /** * Multiplies a glm::mat4 matrix and a vec4. */ __host__ __device__ static glm::vec3 multiplyMV(glm::mat4 m, glm::vec4 v) { - return glm::vec3(m * v); + glm::vec4 prod = m * v; + return glm::vec3(prod) / prod.w; } -// CHECKITOUT /** * Finds the axis aligned bounding box for a given triangle. */ @@ -43,7 +64,6 @@ AABB getAABBForTriangle(const glm::vec3 tri[3]) { return aabb; } -// CHECKITOUT /** * Calculate the signed area of a given triangle. */ @@ -52,7 +72,6 @@ float calculateSignedArea(const glm::vec3 tri[3]) { return 0.5 * ((tri[2].x - tri[0].x) * (tri[1].y - tri[0].y) - (tri[1].x - tri[0].x) * (tri[2].y - tri[0].y)); } -// CHECKITOUT /** * Helper function for calculating barycentric coordinates. */ @@ -65,7 +84,6 @@ float calculateBarycentricCoordinateValue(glm::vec2 a, glm::vec2 b, glm::vec2 c, return calculateSignedArea(baryTri) / calculateSignedArea(tri); } -// CHECKITOUT /** * Calculate barycentric coordinates. */ @@ -77,7 +95,6 @@ glm::vec3 calculateBarycentricCoordinate(const glm::vec3 tri[3], glm::vec2 point return glm::vec3(alpha, beta, gamma); } -// CHECKITOUT /** * Check if a barycentric coordinate is within the boundaries of a triangle. */ @@ -88,14 +105,23 @@ bool isBarycentricCoordInBounds(const glm::vec3 barycentricCoord) { barycentricCoord.z >= 0.0 && barycentricCoord.z <= 1.0; } -// CHECKITOUT +/** + * Check if a barycentric coordinate is within the boundaries of a triangle. + */ +__host__ __device__ static +glm::vec3 barycentricInterpolate(const glm::vec3 tri[3], const glm::vec3 barycentricCoord) { + return barycentricCoord.x * tri[0] + + barycentricCoord.y * tri[1] + + barycentricCoord.z * tri[2]; +} + /** * For a given barycentric coordinate, compute the corresponding z position * (i.e. depth) on the triangle. */ __host__ __device__ static -float getZAtCoordinate(const glm::vec3 barycentricCoord, const glm::vec3 tri[3]) { - return -(barycentricCoord.x * tri[0].z +float getZAtCoordinate(const glm::vec3 tri[3], const glm::vec3 barycentricCoord) { + return barycentricCoord.x * tri[0].z + barycentricCoord.y * tri[1].z - + barycentricCoord.z * tri[2].z); + + barycentricCoord.z * tri[2].z; } diff --git a/src/sceneStructs.h b/src/sceneStructs.h new file mode 100644 index 0000000..eec2e43 --- /dev/null +++ b/src/sceneStructs.h @@ -0,0 +1,9 @@ +#pragma once + +struct Camera { + glm::vec3 position; + glm::vec3 view; + glm::vec3 up; + float fovy; + glm::vec3 light; +};