├── .DS_Store
├── .gitattributes
├── README.md
├── data
├── cat0.off
├── cat1.off
├── tr_reg_000.off
└── tr_reg_001.off
├── examples
├── .DS_Store
├── example_shapePair.m
├── example_shapeWithLandmarks.m
└── example_singeShape.m
├── func_other
├── +MESH_IO
│ ├── .DS_Store
│ ├── generate_tex_coords.m
│ ├── private
│ │ ├── readObj.m
│ │ ├── readOff.m
│ │ ├── readPly.m
│ │ ├── readobj_fast.m
│ │ ├── writeOFF.m
│ │ ├── writeObj.m
│ │ └── write_obj.m
│ ├── read_shape.m
│ ├── shape_name.m
│ ├── wobj_with_texture.m
│ ├── writeOFF.m
│ └── writeObj.m
├── .DS_Store
├── calc_tri_areas.m
├── compute_vtx_and_face_normals.m
├── fps_euclidean.m
├── get_edge_list.m
├── mesh_with_consistent_fields.m
├── my_plywrite.m
├── normalize_mesh_area.m
└── pMap_NNinterp.m
├── func_render
├── .DS_Store
├── add_shadow.m
├── assign_color_for_scalar_func.m
├── get_mapped_face_color_withNaN.m
├── get_mesh_face_color.m
├── merge_mesh_with_landmarks.m
├── private
│ ├── add_isolines.m
│ ├── add_shadow.m
│ ├── isolines.m
│ ├── isolines_map.m
│ ├── load_MeshPlot_default_params.m
│ ├── matrixnormalize.m
│ ├── normalize_function.m
│ ├── parse_MeshPlot_params.m
│ └── set_overlay_axis.m
├── render_map.m
├── render_mesh.m
├── sphere.obj
└── texture_transfer_pMap.m
└── results
├── .DS_Store
├── eg_shapePair.png
├── eg_shapeWithLandmarks.png
├── eg_singleShape_allEdges.png
├── eg_singleShape_colorFromVertex.png
├── eg_singleShape_colorFromVertex_v2.png
├── eg_singleShape_singleCol.png
├── eg_singleShape_subsetEdges.png
├── eg_singleShape_vectorField.png
├── eg_singleShape_visualizeFunction.png
└── overview.png
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/llorz/MatlabRenderToolbox/096203a8294d1d13ddb57d26f40b9e08083238cc/.DS_Store
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # MatlabRenderToolbox
2 |
3 |
4 |
5 | This is a simple render toolbox in Matlab.
6 | 1. ```./examples/example_singlePair.m``` shows how to
7 | * *render a shape* (with adjustable rotations to align the shape first)
8 | * *visualize some edges*
9 | * *color the mesh with per-vertex color assginment*
10 | * *visualize a per-vertex scalar fuction* (e.g., some descriptor)
11 | * *visualize a vector field*
12 | 2. ```./examples/example_shapeWithLandmarks.m``` shows how to add some landmarks as spheres to the given shape and render them altogether
13 | 3. ```./examples/example_shapePair.m``` shows to how to visualize a given point-wise map on a shape pair via color transfer. Two meshes are ploted in the same axis, and some corresponding landmarks or connecting lines can be visualized as well optionally.
14 |
15 | ## Comments
16 | - This toolbox gives so-so renderings (as shown above), but it is very fast and easy to play with (I feel so :)
17 | - In this toolbox, I used some functions from [gptoolbox](https://github.com/alecjacobson/gptoolbox) by [Alec Jacobson](https://github.com/alecjacobson). This blog [Paper-worthy rendering in MATLAB](https://www.alecjacobson.com/weblog/?p=4732) by Alec might also be helpful.
18 | - If you are looking for paper-level rendering toolbox, I found [this one](https://github.com/HTDerekLiu/BlenderToolbox), a blender toolbox with python scripts provided by [Hsueh-Ti Derek Liu](https://github.com/HTDerekLiu) extremely helpful.
19 | - update (2019-11-03): just find this [Matlab render toolbox](https://github.com/hexygen/SPRender) by [Yanir Kleiman](https://github.com/hexygen/) that might be helpful as well
20 | - Please feel free to contact me (jing.ren@kaust.edu.sa) if you have any questions or suggestions to this toolbox ;)
21 |
22 |
--------------------------------------------------------------------------------
/examples/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/llorz/MatlabRenderToolbox/096203a8294d1d13ddb57d26f40b9e08083238cc/examples/.DS_Store
--------------------------------------------------------------------------------
/examples/example_shapePair.m:
--------------------------------------------------------------------------------
1 | clc; clear; close all;
2 | addpath('../func_render/');
3 | addpath('../func_other/');
4 | mesh_dir = '../data/';
5 | s1_name = 'tr_reg_000.off';
6 | s2_name = 'tr_reg_001.off';
7 | %% Given a pair of shapes, and a computed pair from S1 to S2
8 | % we want to visualize the map by color transfer
9 | S1 = MESH_IO.read_shape([mesh_dir, s1_name]);
10 | S2 = MESH_IO.read_shape([mesh_dir, s2_name]);
11 | T12 = 1:length(S1.surface.X);
12 |
13 | % its fine that some correspondences are missing (with value NaN)
14 | % T12(randi([1, S1.nv],500,1)) = NaN;
15 | %% get the color of the two shapes from the given map
16 | % the last argument controls the color-scheme of the shape
17 | % try any permutation of [1,2,3] with different signs, e.g., [1,2,3], [-3,-2,1]
18 | [S1_col,S2_col]= get_mapped_face_color_withNaN(S1,S2,T12,[-2,-1,3]);
19 | %% render the two shapes sperately to find the proper rotations
20 | figure(1);
21 | [~,~, S1_new] = render_mesh(S1,'MeshVtxColor',S1_col,...
22 | 'RotationOps',{[-90,0,0],[0,0,30]},...
23 | 'CameraPos',[-10,10],...
24 | 'FaceAlpha',0.9); hold on;
25 |
26 |
27 | translation = [1.2,-0.1,0]; % translate the second shape
28 | [~,~, S2_new] = render_mesh(S2,'MeshVtxColor',S1_col,...
29 | 'RotationOps',{[-90,0,0],[0,0,30]},...
30 | 'VtxPos',S2.surface.VERT + repmat(translation,S2.nv,1),... % translate the second shape such that S1 and S2 are not overlapped
31 | 'CameraPos',[-10,10],...
32 | 'FaceAlpha',0.9);
33 |
34 | %% add some landmarks
35 | lmk1 = fps_euclidean(S1, 15); % sample some vtx on S1
36 | lmk2 = T12(lmk1); % they are mapped to lmk2 by the given map
37 |
38 | [S1_combined, S1_col_combined] = merge_mesh_with_landmarks(S1_new, lmk1, S1_col, S1_col(lmk1,:));
39 | [S2_combined, S2_col_combined] = merge_mesh_with_landmarks(S2_new, lmk2, S2_col, S2_col(lmk1,:));
40 |
41 | figure(2);
42 | render_mesh(S1_combined,'MeshVtxColor',S1_col_combined,...
43 | 'CameraPos',[-10,10],...
44 | 'FaceAlpha',0.9); hold on;
45 |
46 |
47 | render_mesh(S2_combined,'MeshVtxColor',S2_col_combined,...
48 | 'CameraPos',[-10,10],...
49 | 'FaceAlpha',0.9); hold off;
50 |
51 | %% add some lines to connect the landmarks
52 | figure(3);
53 | render_mesh(S1_combined,'MeshVtxColor',S1_col_combined,...
54 | 'CameraPos',[-10,10],...
55 | 'FaceAlpha',0.9,...
56 | 'BackgroundColor',[0.5, 0.5, 0.5]); hold on;
57 |
58 | render_mesh(S2_combined,'MeshVtxColor',S2_col_combined,...
59 | 'CameraPos',[-10,10],...
60 | 'FaceAlpha',0.9,...
61 | 'BackgroundColor',[0.5, 0.5, 0.5]); hold on;
62 |
63 | X1 = S1_combined.surface.VERT;
64 | X2 = S2_combined.surface.VERT;
65 |
66 | Xstart = X1(lmk1,1)'; Xend = X2(lmk2,1)';
67 | Ystart = X1(lmk1,2)'; Yend = X2(lmk2,2)';
68 | Zstart = X1(lmk1,3)'; Zend = X2(lmk2,3)';
69 |
70 | ColorSet = S1_col(lmk1,:);
71 | set(gca, 'ColorOrder', ColorSet);
72 | plot3([Xstart; Xend], [Ystart; Yend], [Zstart; Zend],'LineWidth',1.2); hold off;
73 |
74 |
75 | set(gcf,'Position', [50 50 600 600]);
76 | set(gcf,'Color', [0.5,0.5,0.5],'InvertHardcopy','off'); % to preserve the bgcolor when saving it
77 | saveas(gcf,'../results/eg_shapePair.png')
78 |
--------------------------------------------------------------------------------
/examples/example_shapeWithLandmarks.m:
--------------------------------------------------------------------------------
1 | clc; clear; close all;
2 | addpath('../func_render/');
3 | addpath('../func_other/');
4 | mesh_dir = '../data/';
5 | %%
6 | % load the shape
7 | S1 = MESH_IO.read_shape([mesh_dir, 'cat0.off']);
8 | % specify the landmark ID
9 | lmk_id = [1000,5500,10000];
10 | % define the mesh color
11 | S1_col = S1.surface.VERT;
12 | % define the color for each landmark (can be different)
13 | lmk_col = repmat([0.98,0.98,0.98], length(lmk_id), 1);
14 | % define the radius of the landmarks
15 | radius = 10; % by default, the radius is average edge length :)
16 |
17 | %% construct a new mesh with the shape and the landmark spheres
18 | [S_combined, col_combined] = merge_mesh_with_landmarks(S1, lmk_id, S1_col, lmk_col, radius);
19 |
20 | % rendering
21 | figure(1);
22 | render_mesh(S_combined,...
23 | 'MeshVtxColor',col_combined,...
24 | 'RotationOps',{[0,0,-20]},...
25 | 'CameraPos',[-15,10],...
26 | 'FaceAlpha',0.98);
27 | set(gcf,'Position', [50 50 600 600]);
28 | saveas(gcf,'../results/eg_shapeWithLandmarks.png')
29 | %% rendering: different transparancy for the shape and the landmarks
30 | figure(2); clf;
31 | render_mesh(S_combined,...
32 | 'MeshVtxColor',col_combined,... % [R G B] for each of the vertex
33 | 'CameraPos',[-40,3],...
34 | 'FaceAlpha',0.99); hold on;
35 |
36 | render_mesh(S1,...
37 | 'MeshVtxColor',S1_col,... % [R G B] for each of the vertex
38 | 'CameraPos',[-40,3],...
39 | 'FaceAlpha',0.3); hold on;
40 |
41 |
--------------------------------------------------------------------------------
/examples/example_singeShape.m:
--------------------------------------------------------------------------------
1 | clc; clear; close all;
2 | addpath('../func_render/');
3 | addpath('../func_other/');
4 | mesh_dir = '../data/';
5 |
6 | % load the shape
7 | S1 = MESH_IO.read_shape([mesh_dir, 'tr_reg_001.off']);
8 | %% mesh with color from the vertex position
9 | % the 2nd argument controls the color-scheme of the shape
10 | % try any permutation of [1,2,3] with different signs, e.g., [1,2,3], [-3,-2,1]
11 | S1_col = get_mesh_face_color(S1, [-2,-1,3]);
12 | figure(1);
13 | [~, ~, S1_new] = render_mesh(S1,...
14 | 'MeshVtxColor', S1_col,...
15 | 'RotationOps',{[-90,0,0],[0,0,20]},... % apply rotations to S1, the return S1_new is the rotated version of S1
16 | 'CameraPos',[-10,10],...
17 | 'FaceAlpha',0.9);
18 |
19 | set(gcf,'Position', [50 50 600 600]);
20 | saveas(gcf,'../results/eg_singleShape_colorFromVertex.png')
21 |
22 | %% mesh with a single color
23 | renderOptions = {'RotationOps',{[-90,0,0],[0,0,20]},...
24 | 'CameraPos',[-10,10],...
25 | 'FaceAlpha',0.9,...
26 | 'BackgroundColor',[0.5,0.5,0.5]}; % you can change the background color here
27 |
28 | figure(1); clf;
29 | S1_col = repmat([0.98, 0.98, 0.98], S1.nv, 1);
30 | render_mesh(S1,...
31 | 'MeshVtxColor', S1_col,...
32 | renderOptions{:});
33 |
34 | set(gcf,'Position', [50 50 600 600]);
35 | set(gcf,'Color', [0.5,0.5,0.5],'InvertHardcopy','off');
36 | saveas(gcf,'../results/eg_singleShape_singleCol.png')
37 |
38 | %% visaulize a function on the mesh
39 | f1 = S1.surface.X; % a function defined on the shape
40 |
41 | f_min = min(f1); f_max = max(f1); % for consistent/comparable color axis
42 |
43 | color_min = [14,77,146]/255;
44 | color_ave = [1,1,1];
45 | color_max = [213,94,0]/255;
46 |
47 | range_col = [color_min; color_ave; color_max];
48 |
49 | S1_col = assign_color_for_scalar_func(f1,f_min,f_max,range_col);
50 |
51 | figure(1); clf;
52 | render_mesh(S1,...
53 | 'MeshVtxColor', S1_col,...
54 | renderOptions{:});
55 |
56 | set(gcf,'Position', [50 50 600 600]);
57 | set(gcf,'Color', [0.5,0.5,0.5],'InvertHardcopy','off'); % to preserve the bgcolor when saving it
58 | saveas(gcf,'../results/eg_singleShape_visualizeFunction.png')
59 | %% visualize all the edges: can be very slow if mesh is large!!
60 | figure(1); clf;
61 | S1_col = repmat([0.98, 0.98, 0.98], S1.nv, 1);
62 | [~,~, S1_new] = render_mesh(S1,...
63 | 'MeshVtxColor', S1_col,...
64 | renderOptions{:}); hold on;
65 |
66 | all_edges = get_edge_list(S1); % get the edge list
67 | vertex = S1_new.surface.VERT'; % get the vertex positions after the rotations!
68 |
69 | % visualize all the edges - can be really slow if the mesh is large
70 | edges = all_edges;
71 | % visualize a subset:
72 | edges = all_edges(1:1800,:);
73 | x = [ vertex(1,edges(:,1)); vertex(1,edges(:,2))];
74 | y = [ vertex(2,edges(:,1)); vertex(2,edges(:,2))];
75 | z = [ vertex(3,edges(:,1)); vertex(3,edges(:,2))];
76 | line(x,y,z, 'color', [0.2,0.2,0.2], 'LineWidth',0.2); hold off; % change the edge color here
77 |
78 | set(gcf,'Position', [50 50 600 600]);
79 | set(gcf,'Color', [0.5,0.5,0.5],'InvertHardcopy','off'); % to preserve the bgcolor when saving it
80 | saveas(gcf,'../results/eg_singleShape_subsetEdges.png')
81 | %% visualize a vector filed on a mesh
82 | [Nv, Nf] = compute_vtx_and_face_normals(S1);
83 |
84 | figure(1); clf;
85 | S1_col = repmat([0.98, 0.98, 0.98], S1.nv, 1);
86 | render_mesh(S1,...
87 | 'MeshVtxColor', S1_col,...
88 | 'VecField', Nv,...
89 | renderOptions{:});
90 |
91 | set(gcf,'Position', [50 50 600 600]);
92 | set(gcf,'Color', [0.5,0.5,0.5],'InvertHardcopy','off'); % to preserve the bgcolor when saving it
93 | saveas(gcf,'../results/eg_singleShape_vectorField.png')
94 |
--------------------------------------------------------------------------------
/func_other/+MESH_IO/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/llorz/MatlabRenderToolbox/096203a8294d1d13ddb57d26f40b9e08083238cc/func_other/+MESH_IO/.DS_Store
--------------------------------------------------------------------------------
/func_other/+MESH_IO/generate_tex_coords.m:
--------------------------------------------------------------------------------
1 | % generate texture coordinates per vertex by projecting to the plane of
2 | % col1, col2 coordinates (signed) and stretch so that the texture appears
3 | % mult_const times.
4 | function vt = generate_tex_coords(v, col1, col2, mult_const)
5 |
6 | vt = [sign(col1)*v(:, abs(col1)), sign(col2)*v(:, abs(col2))];
7 | vt = bsxfun(@minus, vt, min(vt));
8 |
9 | max_vt = max(vt(:));
10 | vt = mult_const * vt / max_vt;
11 | end
12 |
13 |
--------------------------------------------------------------------------------
/func_other/+MESH_IO/private/readObj.m:
--------------------------------------------------------------------------------
1 | function [VERT, TRIV] = readObj(filename)
2 |
3 | if length(strsplit(filename,'.')) > 1
4 | fid = fopen(filename,'r');
5 | else % without file extension
6 | fid = fopen([filename, '.obj'],'r');
7 | end
8 |
9 | if fid==-1
10 | error('Cannot open the file: %s\n',filename);
11 | end
12 |
13 | %C = textscan(fid,'%s %f %f %f','Whitespace',' //','commentStyle','#');
14 | C = textscan(fid,'%s %f %f %f','commentStyle','#');
15 |
16 |
17 | fclose(fid);
18 |
19 | vertices = strcmp(C{1}(:), 'v');
20 |
21 | X = C{2}(vertices);
22 | Y = C{3}(vertices);
23 | Z = C{4}(vertices);
24 |
25 | VERT = [X,Y,Z];
26 |
27 | triangles = strcmp(C{1}(:),'f');
28 |
29 | ntriangles = sum(triangles);
30 |
31 | T1 = C{2}(triangles);
32 | T2 = C{3}(triangles);
33 | T3 = C{4}(triangles);
34 | TRIV = [T1 T2 T3];
35 |
36 | %trisurf(T,X,Y,Z);
37 |
38 | end
39 |
--------------------------------------------------------------------------------
/func_other/+MESH_IO/private/readOff.m:
--------------------------------------------------------------------------------
1 | function [X,T] = readOff(filename)
2 |
3 | if length(strsplit(filename,'.')) > 1
4 | fid = fopen(filename,'r');
5 | else % without file extension
6 | fid = fopen([filename, '.off'],'r');
7 | end
8 |
9 | if( fid==-1 )
10 | error('Cannot open the file: %s\n',filename);
11 | end
12 |
13 | str = fgets(fid); % -1 if eof
14 |
15 | if strcmp(str(1:4), 'COFF')
16 | [X,T,~] = readCoff(filename,4); % assume 4 color channels
17 | return;
18 | end
19 |
20 | if ~strcmp(str(1:3), 'OFF')
21 | error('The file is not a valid OFF one.');
22 | end
23 |
24 | str = fgets(fid);
25 | sizes = sscanf(str, '%d %d', 2);
26 | while length(sizes) ~= 2
27 | str = fgets(fid);
28 | sizes = sscanf(str, '%d %d', 2);
29 | end
30 | nv = sizes(1);
31 | nf = sizes(2);
32 |
33 | % Read vertices
34 | [X,cnt] = fscanf(fid,'%lf %lf %lf\n', [3,nv]);
35 | if cnt~=3*nv
36 | warning('Problem in reading vertices.');
37 | end
38 | X = X';
39 |
40 | [T,cnt] = fscanf(fid,'3 %ld %ld %ld\n', [3,inf]);
41 | if isempty(T)
42 | [T,cnt] = fscanf(fid,'4 %ld %ld %ld %ld\n', [4,inf]);
43 | end
44 | T = double(T'+1);
45 |
46 | fclose(fid);
--------------------------------------------------------------------------------
/func_other/+MESH_IO/private/readPly.m:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/llorz/MatlabRenderToolbox/096203a8294d1d13ddb57d26f40b9e08083238cc/func_other/+MESH_IO/private/readPly.m
--------------------------------------------------------------------------------
/func_other/+MESH_IO/private/readobj_fast.m:
--------------------------------------------------------------------------------
1 | function [T,X,Y,Z] = readobj_fast(filename)
2 |
3 | if length(strsplit(filename,'.')) > 1
4 | fid = fopen(filename,'r');
5 | else % without file extension
6 | fid = fopen([filename, '.obj'],'r');
7 | end
8 |
9 | if fid==-1
10 | error('Cannot open the file: %s\n',filename);
11 | end
12 |
13 | %C = textscan(fid,'%s %f %f %f','Whitespace',' //','commentStyle','#');
14 | C = textscan(fid,'%s %f %f %f','commentStyle','#');
15 |
16 |
17 | fclose(fid);
18 |
19 | vertices = strcmp(C{1}(:), 'v');
20 |
21 | X = C{2}(vertices);
22 | Y = C{3}(vertices);
23 | Z = C{4}(vertices);
24 |
25 | triangles = strcmp(C{1}(:),'f');
26 |
27 | ntriangles = sum(triangles);
28 |
29 | T1 = C{2}(triangles);
30 | T2 = C{3}(triangles);
31 | T3 = C{4}(triangles);
32 | T = [T1 T2 T3];
33 |
34 | %trisurf(T,X,Y,Z);
35 |
36 | end
37 |
--------------------------------------------------------------------------------
/func_other/+MESH_IO/private/writeOFF.m:
--------------------------------------------------------------------------------
1 | function writeOFF(filename, V,F,UV,C,N)
2 | % WRITEOFF writes an OFF file with vertex/face information
3 | %
4 | % writeOFF(filename,V,F)
5 | % writeOFF(filename,V,F,UV,C,N)
6 | %
7 | % Input:
8 | % filename path to .obj file
9 | % V #V by 3 list of vertices
10 | % F #F by 3 list of triangle indices
11 | % UV #V by 2 list of texture coordinates
12 | % C #V by 3 list of colors
13 | % N #V by 3 list of normals
14 |
15 | %disp(['writing: ',filename]);
16 |
17 | hasN = exist('N','var') && ~isempty(N);
18 | hasUV = exist('UV','var') && ~isempty(UV);
19 | hasC = exist('C','var') && ~isempty(C);
20 |
21 | OFFheader = 'OFF';
22 |
23 | OFFV = V;
24 |
25 | if hasN
26 | OFFheader = ['N',OFFheader];
27 | OFFV = [OFFV N];
28 | end
29 |
30 | if hasC
31 | OFFheader = ['C',OFFheader];
32 | OFFV = [OFFV C];
33 | end
34 |
35 | if hasUV
36 | OFFheader = ['ST',OFFheader];
37 | OFFV = [OFFV UV];
38 | end
39 |
40 | f = fopen( filename, 'wt' );
41 | fprintf(f, [OFFheader,'\n']);
42 | fprintf(f, '%d %d 0\n', size(V,1), size(F, 1));
43 |
44 | switch size(OFFV, 2)
45 | case 3; fprintf(f, '%0.17g %0.17g %0.17g\n', OFFV');
46 | case 5; fprintf(f, '%0.17g %0.17g %0.17g %0.17g %0.17g\n', OFFV');
47 | case 6; fprintf(f, '%0.17g %0.17g %0.17g %0.17g %0.17g %0.17g\n', OFFV');
48 | case 7; fprintf(f, '%0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g\n', OFFV');
49 | case 8; fprintf(f, '%0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g\n', OFFV');
50 | case 9; fprintf(f, '%0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g\n', OFFV');
51 | case 10; fprintf(f, '%0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g\n', OFFV');
52 | case 11; fprintf(f, '%0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g\n', OFFV');
53 | otherwise; error('Unsupported number of vertex entries');
54 | end
55 |
56 | if (~isempty(F)) F; F = F - 1; end
57 |
58 | switch size(F, 2)
59 | case 0;
60 | case 1; fprintf( f, '1 %d\n', F');
61 | case 2; fprintf( f, '2 %d %d\n', F');
62 | case 3; fprintf( f, '3 %d %d %d\n', F');
63 | case 4; fprintf( f, '4 %d %d %d %d\n', F');
64 | case 5; fprintf( f, '5 %d %d %d %d %d\n', F');
65 | otherwise; error('Unsupported number of vertex entries');
66 | end
67 |
68 | fclose(f);
69 |
--------------------------------------------------------------------------------
/func_other/+MESH_IO/private/writeObj.m:
--------------------------------------------------------------------------------
1 | function writeObj(filename, mesh)
2 |
3 | fid = fopen(filename,'wt');
4 | if( fid==-1 ), error('Can''t open the file.'); end
5 |
6 | vertex = [mesh.surface.X,mesh.surface.Y,mesh.surface.Z];
7 | face = mesh.surface.TRIV;
8 |
9 | % vertex position
10 | fprintf(fid,'# nv = %d\n',size(vertex,1));
11 | fprintf(fid, 'v %f %f %f\n', vertex');
12 |
13 | % face
14 | fprintf(fid,'# nf = %d\n',size(face,1));
15 | fprintf(fid, 'f %d %d %d\n', face');
16 | fclose(fid);
17 |
18 | end
19 |
--------------------------------------------------------------------------------
/func_other/+MESH_IO/private/write_obj.m:
--------------------------------------------------------------------------------
1 | function write_obj(path, filename, vertex, face, options)
2 |
3 | % write_off - write a mesh to an OBJ file
4 | %
5 | % write_obj(filename, vertex, face, options)
6 | %
7 | % vertex must be of size [n,3]
8 | % face must be of size [p,3]
9 | %
10 | % Copyright (c) 2004 Gabriel Peyr
11 |
12 | if nargin<0
13 | options.null = 0;
14 | end
15 |
16 | if size(vertex,2)~=3
17 | vertex=vertex';
18 | end
19 | if size(vertex,2)~=3
20 | error('vertex does not have the correct format.');
21 | end
22 |
23 |
24 | if size(face,2)~=3
25 | face=face';
26 | end
27 | if size(face,2)~=3
28 | error('face does not have the correct format.');
29 | end
30 |
31 | fid = fopen([path, filename],'wt');
32 | if( fid==-1 )
33 | error('Can''t open the file.');
34 | return;
35 | end
36 |
37 | object_name = filename(1:end-4);
38 |
39 | fprintf(fid, '# write_obj (c) 2004 Gabriel Peyr\n');
40 | if isfield(options, 'nm_file')
41 | fprintf(fid, 'mtllib ./%s.mtl\n', object_name);
42 | end
43 |
44 | %object_name = 'curobj';
45 |
46 | fprintf(fid, ['g\n# object ' object_name ' to come\n']);
47 |
48 | % vertex position
49 | fprintf(fid, '# %d vertex\n', size(vertex,1));
50 | fprintf(fid, 'v %f %f %f\n', vertex');
51 |
52 | % use mtl
53 | fprintf(fid, ['g ' object_name '_export\n']);
54 | mtl_bump_name = 'material_0';
55 | fprintf(fid, ['usemtl ' mtl_bump_name '\n']);
56 |
57 | % face
58 | fprintf(fid, '# %d faces\n', size(face,1));
59 | if isfield(options, 'face_texcorrd')
60 | face_texcorrd = [face(:,1), options.face_texcorrd(:,1), face(:,2), options.face_texcorrd(:,2), face(:,3), options.face_texcorrd(:,3)];
61 | else
62 | face_texcorrd = [face(:,1), face(:,1), face(:,2), face(:,2), face(:,3), face(:,3)];
63 | end
64 | fprintf(fid, 'f %d/%d %d/%d %d/%d\n', face_texcorrd');
65 |
66 | % vertex texture
67 | if isfield(options, 'nm_file')
68 | fprintf(fid, 'vt %f %f\n', options.object_texture');
69 | else
70 | % create dummy vertex texture
71 | vertext = vertex(:,1:2)*0 - 1;
72 | % vertex position
73 | fprintf(fid, '# %d vertex texture\n', size(vertext,1));
74 | fprintf(fid, 'vt %f %f\n', vertext');
75 | end
76 |
77 | fclose(fid);
78 |
79 |
80 | % MTL generation
81 | if isfield(options, 'nm_file')
82 | mtl_file = [object_name '.mtl'];
83 | fid = fopen([path, mtl_file],'wt');
84 | if( fid==-1 )
85 | error('Can''t open the file.');
86 | return;
87 | end
88 |
89 | Ka = [0.2 0.2 0.2];
90 | Kd = [1 1 1];
91 | Ks = [1 1 1];
92 | Tr = 1;
93 | Ns = 0;
94 | illum = 2;
95 |
96 | fprintf(fid, '# write_obj (c) 2004 Gabriel Peyr\n');
97 |
98 | fprintf(fid, 'newmtl %s\n', mtl_bump_name);
99 | fprintf(fid, 'Ka %f %f %f\n', Ka);
100 | fprintf(fid, 'Kd %f %f %f\n', Kd);
101 | fprintf(fid, 'Ks %f %f %f\n', Ks);
102 | fprintf(fid, 'Tr %d\n', Tr);
103 | fprintf(fid, 'Ns %d\n', Ns);
104 | fprintf(fid, 'illum %d\n', illum);
105 | fprintf(fid, 'map_Kd %s\n', options.nm_file);
106 |
107 | fprintf(fid, '#\n# EOF\n');
108 |
109 | fclose(fid);
110 | end
--------------------------------------------------------------------------------
/func_other/+MESH_IO/read_shape.m:
--------------------------------------------------------------------------------
1 | function S = read_shape(filename)
2 | import MESH_IO.*
3 | fprintf('Reading mesh...'); tic;
4 | fname = strsplit(filename,'.');
5 | if length(fname) > 1
6 | if strcmp(fname{end},'obj')
7 | [X,T] = readObj(filename);
8 | elseif strcmp(fname{end},'off')
9 | [X,T] = readOff(filename);
10 | else
11 | error('cannot read .%s file',fname{end});
12 | end
13 | else % no input file extension
14 | if exist([filename,'.obj'],'file')
15 | [X,T] = readObj(filename);
16 | elseif exist([filename,'.off'],'file')
17 | [X,T] = readOff(filename);
18 | else
19 | error('file not found: %s\n',filename)
20 | end
21 | end
22 |
23 | S.surface.TRIV = double(T);
24 | S.surface.X = X(:,1);
25 | S.surface.Y = X(:,2);
26 | S.surface.Z = X(:,3);
27 | S.surface.VERT = X;
28 | S.nf = size(T,1);
29 | S.nv = size(X,1);
30 | S.name = shape_name(filename);
31 | t = toc; fprintf('done:%.4fs\n',t);
32 | end
--------------------------------------------------------------------------------
/func_other/+MESH_IO/shape_name.m:
--------------------------------------------------------------------------------
1 | function mesh_name = shape_name(filename)
2 | mesh_name = strsplit(filename,'\');
3 | mesh_name = strsplit(mesh_name{end},'/');
4 | mesh_name = strsplit(mesh_name{end},'.');
5 | mesh_name = mesh_name{1};
6 | end
--------------------------------------------------------------------------------
/func_other/+MESH_IO/wobj_with_texture.m:
--------------------------------------------------------------------------------
1 | % Output M to an obj file
2 | % uv - texture coordinates.
3 | % iname - filename for texture image
4 | % fname - output file name
5 | function wobj_with_texture(M, uv, iname, fname)
6 |
7 | options.object_texture = uv;
8 | options.nm_file = iname;
9 |
10 | [pathstr,name] = fileparts(fname);
11 | write_obj([pathstr,'/'], [name '.obj'], M.surface.VERT, M.surface.TRIV, options);
12 | end
--------------------------------------------------------------------------------
/func_other/+MESH_IO/writeOFF.m:
--------------------------------------------------------------------------------
1 | function writeOFF(filename, V,F,UV,C,N)
2 | % WRITEOFF writes an OFF file with vertex/face information
3 | %
4 | % writeOFF(filename,V,F)
5 | % writeOFF(filename,V,F,UV,C,N)
6 | %
7 | % Input:
8 | % filename path to .obj file
9 | % V #V by 3 list of vertices
10 | % F #F by 3 list of triangle indices
11 | % UV #V by 2 list of texture coordinates
12 | % C #V by 3 list of colors
13 | % N #V by 3 list of normals
14 |
15 | %disp(['writing: ',filename]);
16 |
17 | hasN = exist('N','var') && ~isempty(N);
18 | hasUV = exist('UV','var') && ~isempty(UV);
19 | hasC = exist('C','var') && ~isempty(C);
20 |
21 | OFFheader = 'OFF';
22 |
23 | OFFV = V;
24 |
25 | if hasN
26 | OFFheader = ['N',OFFheader];
27 | OFFV = [OFFV N];
28 | end
29 |
30 | if hasC
31 | OFFheader = ['C',OFFheader];
32 | OFFV = [OFFV C];
33 | end
34 |
35 | if hasUV
36 | OFFheader = ['ST',OFFheader];
37 | OFFV = [OFFV UV];
38 | end
39 |
40 | f = fopen( filename, 'wt' );
41 | fprintf(f, [OFFheader,'\n']);
42 | fprintf(f, '%d %d 0\n', size(V,1), size(F, 1));
43 |
44 | switch size(OFFV, 2)
45 | case 3; fprintf(f, '%0.17g %0.17g %0.17g\n', OFFV');
46 | case 5; fprintf(f, '%0.17g %0.17g %0.17g %0.17g %0.17g\n', OFFV');
47 | case 6; fprintf(f, '%0.17g %0.17g %0.17g %0.17g %0.17g %0.17g\n', OFFV');
48 | case 7; fprintf(f, '%0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g\n', OFFV');
49 | case 8; fprintf(f, '%0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g\n', OFFV');
50 | case 9; fprintf(f, '%0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g\n', OFFV');
51 | case 10; fprintf(f, '%0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g\n', OFFV');
52 | case 11; fprintf(f, '%0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g %0.17g\n', OFFV');
53 | otherwise; error('Unsupported number of vertex entries');
54 | end
55 |
56 | if (~isempty(F)) F; F = F - 1; end
57 |
58 | switch size(F, 2)
59 | case 0;
60 | case 1; fprintf( f, '1 %d\n', F');
61 | case 2; fprintf( f, '2 %d %d\n', F');
62 | case 3; fprintf( f, '3 %d %d %d\n', F');
63 | case 4; fprintf( f, '4 %d %d %d %d\n', F');
64 | case 5; fprintf( f, '5 %d %d %d %d %d\n', F');
65 | otherwise; error('Unsupported number of vertex entries');
66 | end
67 |
68 | fclose(f);
69 |
--------------------------------------------------------------------------------
/func_other/+MESH_IO/writeObj.m:
--------------------------------------------------------------------------------
1 | function writeObj(filename, mesh)
2 |
3 | fid = fopen(filename,'wt');
4 | if( fid==-1 ), error('Can''t open the file.'); end
5 |
6 | vertex = [mesh.surface.X,mesh.surface.Y,mesh.surface.Z];
7 | face = mesh.surface.TRIV;
8 |
9 | % vertex position
10 | fprintf(fid,'# nv = %d\n',size(vertex,1));
11 | fprintf(fid, 'v %f %f %f\n', vertex');
12 |
13 | % face
14 | fprintf(fid,'# nf = %d\n',size(face,1));
15 | fprintf(fid, 'f %d %d %d\n', face');
16 | fclose(fid);
17 | end
18 |
--------------------------------------------------------------------------------
/func_other/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/llorz/MatlabRenderToolbox/096203a8294d1d13ddb57d26f40b9e08083238cc/func_other/.DS_Store
--------------------------------------------------------------------------------
/func_other/calc_tri_areas.m:
--------------------------------------------------------------------------------
1 | function S_tri = calc_tri_areas(M)
2 |
3 | getDiff = @(a,b)M.VERT(M.TRIV(:,a),:) - M.VERT(M.TRIV(:,b),:);
4 | getTriArea = @(X,Y).5*sqrt(sum(cross(X,Y).^2,2));
5 | S_tri = getTriArea(getDiff(1,2),getDiff(1,3));
6 |
7 |
8 | % S_tri = zeros(size(M.TRIV,1),1);
9 | %
10 | % for k=1:size(M.TRIV,1)
11 | % e1 = M.VERT(M.TRIV(k,3),:) - M.VERT(M.TRIV(k,1),:);
12 | % e2 = M.VERT(M.TRIV(k,2),:) - M.VERT(M.TRIV(k,1),:);
13 | % S_tri(k) = 0.5*norm(cross(e1,e2));
14 | % end
15 |
16 | end
17 |
--------------------------------------------------------------------------------
/func_other/compute_vtx_and_face_normals.m:
--------------------------------------------------------------------------------
1 | function [Nv, Nf] = compute_vtx_and_face_normals(mesh)
2 | % computes mesh normals per face and per vertex
3 |
4 | fprintf('Compute vtx and face normals...'); tic;
5 | F = mesh.surface.TRIV';
6 | V = [mesh.surface.X'; mesh.surface.Y'; mesh.surface.Z'];
7 |
8 | Nf = cross(V(1:3,F(2,:)) - V(1:3,F(1,:)), V(1:3,F(3,:)) - V(1:3, F(1,:)));
9 | Fa = 0.5 * sqrt( sum( Nf.^2, 1) );
10 | for i = 1:size(F,2)
11 | Nf(:, i) = Nf(:, i) ./ sqrt( sum(Nf(:, i).^2 ) );
12 | end
13 |
14 | Nv = zeros(3, size(V, 2));
15 |
16 | for i = 1:size(F,2)
17 | for j = 1:3
18 | if j == 1
19 | la = sum((V( 1:3, F(1, i) ) - V( 1:3, F(2, i) )).^2);
20 | lb = sum((V( 1:3, F(1, i) ) - V( 1:3, F(3, i) )).^2);
21 | W = Fa(i) / (la * lb);
22 | if (isinf(W) || isnan(W)) W = 0; end
23 | elseif j == 2
24 | la = sum((V( 1:3, F(2, i) ) - V( 1:3, F(1, i) )).^2);
25 | lb = sum((V( 1:3, F(2, i) ) - V( 1:3, F(3, i) )).^2);
26 | W = Fa(i) / (la * lb);
27 | if (isinf(W) || isnan(W)), W = 0; end
28 | else
29 | la = sum((V( 1:3, F(3, i) ) - V( 1:3, F(1, i) )).^2);
30 | lb = sum((V( 1:3, F(3, i) ) - V( 1:3, F(2, i) )).^2);
31 | W = Fa(i) / (la * lb);
32 | if (isinf(W) || isnan(W)), W = 0; end
33 | end
34 | Nv(1:3, F(j, i) ) = Nv(1:3, F(j, i)) + Nf(1:3, i) * W;
35 | end
36 | end
37 |
38 | % normalize the normal vectors so that they are unit length
39 | for i = 1:size(V,2)
40 | Nv(:, i) = Nv(:, i) ./ sqrt( sum(Nv(:, i).^2 ) );
41 | end
42 |
43 | Nv = Nv';
44 | Nf = Nf';
45 |
46 | t = toc; fprintf('done: %.4fs\n',t);
47 |
48 | end
49 |
50 |
--------------------------------------------------------------------------------
/func_other/fps_euclidean.m:
--------------------------------------------------------------------------------
1 | function idx = fps_euclidean(S,k,seed)
2 | % Euclidean farthest point sampling.
3 | % Input: can be a surface, or data matrix (each row is one sample)
4 | if isstruct(S)
5 | C = [S.surface.X, S.surface.Y, S.surface.Z];
6 | else
7 | C = S;
8 | end
9 | nv = size(C,1);
10 |
11 | if(nargin<3)
12 | idx = randi(nv,1);
13 | else
14 | idx = seed;
15 | end
16 |
17 | dists = bsxfun(@minus,C,C(idx,:));
18 | dists = sum(dists.^2,2);
19 |
20 | for i = 1:k
21 | maxi = find(dists == max(dists));
22 | maxi = maxi(1);
23 | idx = [idx; maxi];
24 | newdists = bsxfun(@minus,C,C(maxi,:));
25 | newdists = sum(newdists.^2,2);
26 | dists = min(dists,newdists);
27 | end
28 |
29 | idx = idx(2:end);
30 | end
--------------------------------------------------------------------------------
/func_other/get_edge_list.m:
--------------------------------------------------------------------------------
1 | % get the edge list and the corresponding edge weight
2 | function [Elist,K] = get_edge_list(S)
3 | T = S.surface.TRIV;
4 |
5 | I = [T(:,1);T(:,2);T(:,3)];
6 | J = [T(:,2);T(:,3);T(:,1)];
7 |
8 | Elisto = [I,J];
9 | sElist = sort(Elisto,2);
10 | [Elist,~] = unique(sElist, 'rows');
11 |
12 | if nargout > 1 % get edge weight
13 | n = size(S.A,1); % num of vtx
14 | ind = sub2ind([n,n],Elist(:,1),Elist(:,2));
15 | if isfield(S,'W')
16 | W = S.W;
17 | K = -W(ind); % true edge weights
18 | else
19 | W = cotLaplacian([S.surface.X, S.surface.Y, S.surface.Z], S.surface.TRIV);
20 | K = -W(ind);
21 | end
22 | end
23 | end
--------------------------------------------------------------------------------
/func_other/mesh_with_consistent_fields.m:
--------------------------------------------------------------------------------
1 | function S = mesh_with_consistent_fields(S)
2 | if ~isstruct(S)
3 | error('The input should be a mesh with cell structure')
4 | else
5 | names = fieldnames(S);
6 | if isfield(S,'T')
7 | [~,id1] = ismember('T',fieldnames(S));
8 | else
9 | id1 = find(~cellfun(@isempty,...
10 | cellfun(@(x) findstr('TRI',x) == 1,upper(names),'UniformOutput',false))); %#ok
11 | end
12 | if isfield(S,'X')
13 | [~,id2] = ismember('X',fieldnames(S));
14 | else
15 | id2 = find(~cellfun(@isempty,...
16 | cellfun(@(x) findstr('VER',x) == 1,upper(names),'UniformOutput',false))); %#ok
17 | end
18 | if ~isfield(S,'surface')
19 | if isempty(id1) || isempty(id2)
20 | error('The input should be a mesh!')
21 | end
22 | end
23 |
24 | end
25 | if isfield(S,'surface') % case 01: mesh has structure S.surface.{X,Y,Z,TRIV}
26 | if ~isfield(S,'VERT')
27 | S.VERT = [S.surface.X,S.surface.Y,S.surface.Z];
28 | end
29 | if ~isfield(S,'TRIV')
30 | S.TRIV = S.surface.TRIV;
31 | end
32 | if ~isfield(S.surface,'VERT')
33 | S.surface.VERT = S.VERT;
34 | end
35 | else % case 02: mesh has structure S.VERT + S.TRIV
36 | if ~strcmp(names{id1},'TRIV')
37 | S.TRIV = getfield(S, names{id1});
38 | end
39 |
40 | if ~strcmp(names{id2},'VERT')
41 | S.VERT = getfield(S, names{id2});
42 | end
43 | S.surface.X = S.VERT(:,1);
44 | S.surface.Y = S.VERT(:,2);
45 | S.surface.Z = S.VERT(:,3);
46 | S.surface.TRIV = S.TRIV;
47 | S.surface.VERT = S.VERT;
48 | end
49 |
50 | S.nv = length(S.surface.X);
51 | S.n = S.nv;
52 | S.nf = size(S.surface.TRIV,1);
53 | S.m = S.nf;
54 | if ~isfield(S,'name'), S.name = ''; end
55 | end
56 |
57 |
--------------------------------------------------------------------------------
/func_other/my_plywrite.m:
--------------------------------------------------------------------------------
1 | function my_plywrite(filename,faces,verts,rgb)
2 | % plywrite(filename,faces,verts)
3 | % Will write a face vertex mesh data in ply format.
4 | % faces -> polygonal descriptions in terms of vertex indices
5 | % verts -> list of vertex coordinate triplets
6 | % faces and verts can be obtained by using the MATLAB isosurface function.
7 | %
8 | % plywrite(filename,faces,verts,rgb)
9 | % Will add color information.
10 | % rgb -> optional list of RGB triplets per vertex
11 | %
12 | % A by-product of ongoing computational materials science research
13 | % at MINED@Gatech.(http://mined.gatech.edu/)
14 | %
15 | % Copyright (c) 2015, Ahmet Cecen and MINED@Gatech - All rights reserved.
16 |
17 | % Create File
18 | fileID = fopen(filename,'w');
19 |
20 |
21 | % Plain Mesh
22 | if nargin == 3
23 |
24 | % Insert Header
25 | fprintf(fileID, ...
26 | ['ply\n', ...
27 | 'format ascii 1.0\n', ...
28 | 'element vertex %u\n', ...
29 | 'property double x\n', ...
30 | 'property double y\n', ...
31 | 'property double z\n', ...
32 | 'element face %u\n', ...
33 | 'property list uint8 int32 vertex_indices\n', ...
34 | 'end_header\n'], ...
35 | length(verts),size(faces,1));
36 |
37 | % Insert Colored Vertices
38 | for i=1:length(verts)
39 | fprintf(fileID, ...
40 | ['%.16f ', ...
41 | '%.16f ', ...
42 | '%.16f\n'], ...
43 | verts(i,1),verts(i,2),verts(i,3));
44 | end
45 |
46 | % Insert Faces
47 | dlmwrite(filename,[size(faces,2)*ones(size(faces,1),1),faces-1],'-append','delimiter',' ','precision',10);
48 |
49 | % Colored Mesh
50 | elseif nargin == 4
51 |
52 | % rgb=varargin{1};
53 |
54 | % Insert Header
55 | fprintf(fileID, ...
56 | ['ply\n', ...
57 | 'format ascii 1.0\n', ...
58 | 'element vertex %u\n', ...
59 | 'property double x\n', ...
60 | 'property double y\n', ...
61 | 'property double z\n', ...
62 | 'property uchar red\n', ...
63 | 'property uchar green\n', ...
64 | 'property uchar blue\n', ...
65 | 'property uchar alpha\n', ...
66 | 'element face %u\n', ...
67 | 'property list uint8 int32 vertex_indices\n', ...
68 | 'end_header\n'], ...
69 | length(verts),size(faces,1));
70 |
71 | % Insert Colored Vertices
72 | for i=1:length(verts)
73 | fprintf(fileID, ...
74 | ['%.16f ', ...
75 | '%.16f ', ...
76 | '%.16f ', ...
77 | '%u ', ...
78 | '%u ', ...
79 | '%u ', ...
80 | '%u\n'], ...
81 | verts(i,1),verts(i,2),verts(i,3),rgb(i,1),rgb(i,2),rgb(i,3), 255);
82 | end
83 |
84 | % Insert Faces
85 | dlmwrite(filename,[size(faces,2)*ones(size(faces,1),1),faces-1],'-append','delimiter',' ','precision',10);
86 |
87 | end
--------------------------------------------------------------------------------
/func_other/normalize_mesh_area.m:
--------------------------------------------------------------------------------
1 | function S = normalize_mesh_area(S_,a)
2 | if nargin < 2, a = 1; end
3 | S = S_;
4 | S.surface.TRIV = S_.surface.TRIV;
5 | S.surface.VERT = S_.surface.VERT/sqrt(sum(calc_tri_areas(S_.surface)))*sqrt(a); % rescale such that the mesh_area = 0.5
6 | S.surface.VERT = S.surface.VERT - mean(S.surface.VERT);
7 | S.surface.X = S.surface.VERT(:,1);
8 | S.surface.Y = S.surface.VERT(:,2);
9 | S.surface.Z = S.surface.VERT(:,3);
10 |
11 | end
12 |
13 | function S_tri = calc_tri_areas(M)
14 |
15 | getDiff = @(a,b)M.VERT(M.TRIV(:,a),:) - M.VERT(M.TRIV(:,b),:);
16 | getTriArea = @(X,Y).5*sqrt(sum(cross(X,Y).^2,2));
17 | S_tri = getTriArea(getDiff(1,2),getDiff(1,3));
18 | end
19 |
--------------------------------------------------------------------------------
/func_other/pMap_NNinterp.m:
--------------------------------------------------------------------------------
1 | % 2018-05-09
2 | % T12_in: S1 -> S2 has NaN entries, i.e., no correspondences
3 | % assign them the same target as their nearest neighbor
4 | function [T12] = pMap_NNinterp(T12_in,S1)
5 | s1_mapped = find(~isnan(T12_in));
6 | s1_unmapped = find(isnan(T12_in));
7 | [~, vid] = min(S1.Gamma(s1_unmapped, s1_mapped),[],2);
8 | T12 = T12_in;
9 | T12(s1_unmapped) = T12_in(s1_mapped(vid));
10 | end
--------------------------------------------------------------------------------
/func_render/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/llorz/MatlabRenderToolbox/096203a8294d1d13ddb57d26f40b9e08083238cc/func_render/.DS_Store
--------------------------------------------------------------------------------
/func_render/add_shadow.m:
--------------------------------------------------------------------------------
1 | function [h,L,M,ground] = add_shadow(T,L,varargin)
2 | % ADD_SHADOW Add a shadow for plotted mesh (t) according to light (l)
3 | %
4 | % h = add_shadow() % Apply to all
5 | % h = add_shadow(T,L)
6 | % h = add_shadow(T,L,'ParameterName',ParameterValue,...)
7 | % h = add_shadow([],[],'ParameterName',ParameterValue,...) % apply to all
8 | %
9 | % Inputs:
10 | % T #T list of trisurf handles {[] --> find all trisurf in `gca`}
11 | % L #L list of lights {[] --> find all light in `gca`}
12 | % Optional:
13 | % 'Ground' ground plane equation {[0 0 -1 min(Z)]}
14 | % 'Nudge' nudge the ground plane down a bit
15 | % 'Color' followed by 3-vector color {[0.21 0.21 0.21]}
16 | % 'BackgroundColor' followed by 3-vector color {[1 1 1]}
17 | % 'Fade' followed by:
18 | % 'none' constant shadow color
19 | % 'local' fade darker away from contact with ground (ape a spotlight)
20 | % 'infinite' fade lighter away from contact ground (ape infinite
21 | % light)
22 | % Outputs:
23 | % h #T*#L list of output shadow trisurf handles
24 | % L #L list of lights
25 | % M 4 by 4 by #T*#L shadow projection matrices
26 | %
27 | % Example:
28 | % t = tsurf(F,V,'EdgeColor','none',fphong,'SpecularStrength',0.1);
29 | % l = [
30 | % light('Position',[-10 -10 13],'Style','local');
31 | % light('Position',[10 -10 13],'Style','local')];
32 | % camproj('persp');
33 | % axis equal;
34 | % h = add_shadow(t,l);
35 | % apply_ambient_occlusion(t);
36 | %
37 |
38 | % default values
39 | ground = [];
40 | nudge = 0;
41 | color = [0.21 0.21 0.21];
42 | background_color = [1 1 1];
43 | fade = 'none';
44 | % Map of parameter names to variable names
45 | params_to_variables = containers.Map( ...
46 | {'Ground','Nudge','BackgroundColor','Color','Fade'}, ...
47 | {'ground','nudge','background_color','color','fade'});
48 | v = 1;
49 | while v <= numel(varargin)
50 | param_name = varargin{v};
51 | if isKey(params_to_variables,param_name)
52 | assert(v+1<=numel(varargin));
53 | v = v+1;
54 | % Trick: use feval on anonymous function to use assignin to this workspace
55 | feval(@()assignin('caller',params_to_variables(param_name),varargin{v}));
56 | else
57 | error('Unsupported parameter: %s',varargin{v});
58 | end
59 | v=v+1;
60 | end
61 |
62 | if ~exist('T','var') || isempty(T)
63 | c = get(gca,'Children');
64 | T = c(arrayfun(@(x) isa(x,'matlab.graphics.primitive.Patch'),c));
65 | end
66 | if iscell(T)
67 | T = [T{:}]';
68 | end
69 | T = T(:);
70 |
71 | if ~exist('L','var') || isempty(L)
72 | c = get(gca,'Children');
73 | L = c(arrayfun(@(x) isa(x,'matlab.graphics.primitive.Light'),c));
74 | if isempty(L)
75 | L = camlight;
76 | end
77 | end
78 |
79 | if isempty(ground)
80 | minZ = inf;
81 | for t = T'
82 | V = t.Vertices;
83 | minZ = min([V(:,3);minZ]);
84 | end
85 | ground = [0 0 -1 minZ-nudge];
86 | end
87 |
88 | h = [];
89 | % need to specify that there are 0 "tubes"
90 | M = zeros([0,0,0]);
91 | for t = T'
92 | V = t.Vertices;
93 | for l = L'
94 | % plane equation
95 | % 0 = ax + by + cz + d
96 | light_pos = [l.Position strcmp(l.Style,'local')];
97 | d = ground * light_pos';
98 | shadow_mat = d*eye(4) - light_pos'*ground;
99 | U = [V ones(size(V,1),1)]*shadow_mat';
100 | U = bsxfun(@rdivide,U(:,1:3),U(:,4));
101 |
102 | hold on;
103 | tsh = trisurf(t.Faces,U(:,1),U(:,2),U(:,3), ...
104 | 'FaceColor',color, ...
105 | 'DiffuseStrength',0,'SpecularStrength',0, ...
106 | 'AmbientStrength',1, ...
107 | 'EdgeColor','none');
108 | hold off;
109 | switch fade
110 | case {'local','infinite'}
111 | D = matrixnormalize( ...
112 | sum(bsxfun(@times,tsh.Vertices(:,1:2),l.Position(1:2)),2));
113 | switch fade
114 | case 'infinite'
115 | D = 1.0-D;
116 | end
117 | tsh.FaceVertexCData = ...
118 | bsxfun(@plus,color,bsxfun(@times,D,background_color-color));
119 | tsh.FaceColor = 'interp';
120 | end
121 | h = [h;tsh];
122 | M(:,:,end+1) = shadow_mat;
123 | end
124 | end
125 | end
126 |
--------------------------------------------------------------------------------
/func_render/assign_color_for_scalar_func.m:
--------------------------------------------------------------------------------
1 | function mesh_col = assign_color_for_scalar_func(f,f_min,f_max,range_col)
2 | color_min = [0.88,0.88,0.88];
3 | color_min = [14,77,146]/255;
4 | color_ave = [220,255,241]/255;
5 | color_max = [213,94,0]/255;
6 |
7 |
8 | if nargin < 2
9 | f_min = min(f);
10 | f_max = max(f);
11 | end
12 |
13 | if nargin > 3
14 | color_min = range_col(1,:);
15 | color_ave = range_col(2,:);
16 | color_max = range_col(3,:);
17 | end
18 |
19 | c_min = quantile(f,0.01); c_max= quantile(f,0.99);
20 | c_ave = (f_min+f_max)/2;
21 |
22 | if c_min ~= f_min
23 | c1 = interp1([f_min,c_min,c_ave,c_max,f_max],[color_min(1),color_min(1),color_ave(1),color_max(1),color_max(1)],f);
24 | c2 = interp1([f_min,c_min,c_ave,c_max,f_max],[color_min(2),color_min(2),color_ave(2),color_max(2),color_max(2)],f);
25 | c3 = interp1([f_min,c_min,c_ave,c_max,f_max],[color_min(3),color_min(3),color_ave(3),color_max(3),color_max(3)],f);
26 | else
27 | c1 = interp1([f_min,c_ave,f_max],[color_min(1),color_ave(1),color_max(1)],f);
28 | c2 = interp1([f_min,c_ave,f_max],[color_min(2),color_ave(2),color_max(2)],f);
29 | c3 = interp1([f_min,c_ave,f_max],[color_min(3),color_ave(3),color_max(3)],f);
30 | end
31 | mesh_col = [c1, c2, c3];
32 | end
--------------------------------------------------------------------------------
/func_render/get_mapped_face_color_withNaN.m:
--------------------------------------------------------------------------------
1 | function [S1_col,S2_col]= get_mapped_face_color_withNaN(S1, S2, map, col_idx, IFaddcoverage)
2 | if nargin < 5, IFaddcoverage = 0; end
3 |
4 | if nargin < 4, col_idx = [1,2,3]; end
5 |
6 | col_nan = [0.05,0.05,0.05];
7 |
8 |
9 | X = S2.surface.VERT;
10 | X_new = X*diag(sign(col_idx));
11 | X_new = X_new(:,abs(col_idx));
12 |
13 | g1 = X_new(:,1);
14 | g2 = X_new(:,2);
15 | g3 = X_new(:,3);
16 |
17 |
18 | g1 = normalize_function(0,1,g1);
19 | g2 = normalize_function(0,1,g2);
20 | g3 = normalize_function(0,1,g3);
21 |
22 | g1 = cos(g1);
23 | g2 = cos(g2);
24 | g3 = cos(g3);
25 |
26 | g1 = normalize_function(0,1,g1);
27 | g2 = normalize_function(0,1,g2);
28 | g3 = normalize_function(0,1,g3);
29 |
30 | ind = find(~isnan(map));
31 |
32 | f1 = col_nan(1)*ones(length(map),1);
33 | f2 = col_nan(2)*ones(length(map),1);
34 | f3 = col_nan(3)*ones(length(map),1);
35 |
36 | f1(ind) = g1(map(ind));
37 | f2(ind) = g2(map(ind));
38 | f3(ind) = g3(map(ind));
39 | S1_col = [f1,f2,f3]; % S1 face color f
40 | S2_col = [g1,g2,g3]; % S2 face color g
41 |
42 | if IFaddcoverage
43 | n2 = size(S2.surface.X,1);
44 | mask = zeros(n2,1);
45 | mask(unique(map)) = 1;
46 | S2_col = [mask.*g1, mask.*g2, mask.*g3];
47 | end
48 |
49 | end
--------------------------------------------------------------------------------
/func_render/get_mesh_face_color.m:
--------------------------------------------------------------------------------
1 | function S2_col = get_mesh_face_color(S2, col_idx)
2 | if nargin < 2, col_idx = [1,2,3]; end
3 |
4 |
5 | X = S2.surface.VERT;
6 | X_new = X*diag(sign(col_idx));
7 | X_new = X_new(:,abs(col_idx));
8 |
9 | g1 = X_new(:,1);
10 | g2 = X_new(:,2);
11 | g3 = X_new(:,3);
12 |
13 |
14 | g1 = normalize_function(0,1,g1);
15 | g2 = normalize_function(0,1,g2);
16 | g3 = normalize_function(0,1,g3);
17 |
18 | g1 = cos(g1);
19 | g2 = cos(g2);
20 | g3 = cos(g3);
21 |
22 | g1 = normalize_function(0,1,g1);
23 | g2 = normalize_function(0,1,g2);
24 | g3 = normalize_function(0,1,g3);
25 |
26 | S2_col = [g1,g2,g3];
27 |
28 | end
--------------------------------------------------------------------------------
/func_render/merge_mesh_with_landmarks.m:
--------------------------------------------------------------------------------
1 | function [S_combined, col_combined] = merge_mesh_with_landmarks(S1, lmk_id, S1_col, lmk_col, radius)
2 | if nargin < 4
3 | lmk_col = repmat([0.8,0.8,0.8], length(lmk_id), 1);
4 | end
5 | if nargin < 5
6 | edge = get_edge_list(S1);
7 | radius = mean(sum((S1.surface.VERT(edge(:,1),:) - S1.surface.VERT(edge(:,2),:)).^2,2));
8 | end
9 | sphere_base = MESH_IO.read_shape('sphere.obj');
10 | lmk_spheres = cell(length(lmk_id),1);
11 | col_combined = S1_col;
12 |
13 | X1_new = S1.surface.VERT;
14 |
15 | for i = 1:length(lmk_id)
16 | sphere1 = normalize_mesh_area(sphere_base, radius*4*pi^2);
17 | sphere1.surface.VERT = sphere1.surface.VERT + X1_new(lmk_id(i),:);
18 | lmk_spheres{i} = sphere1;
19 | col_combined = [col_combined; repmat(lmk_col(i,:), sphere_base.nv,1)];
20 | end
21 | %% combine the original mesh + landmark spheres to get nice shaddows for the lmks as well
22 | S_combined = S1;
23 | for i = 1:length(lmk_id)
24 | sphere1 = lmk_spheres{i};
25 | S_combined.surface.TRIV = [S_combined.surface.TRIV; sphere1.surface.TRIV + size(S_combined.surface.VERT,1)];
26 | S_combined.surface.VERT = [S_combined.surface.VERT; sphere1.surface.VERT];
27 | end
28 | S_combined.surface.X = S_combined.surface.VERT(:,1);
29 | S_combined.surface.Y = S_combined.surface.VERT(:,2);
30 | S_combined.surface.Z = S_combined.surface.VERT(:,3);
31 | S_combined.nv = size(S_combined.surface.VERT,1);
32 | S_combined.nf = size(S_combined.surface.TRIV,1);
33 |
34 | end
--------------------------------------------------------------------------------
/func_render/private/add_isolines.m:
--------------------------------------------------------------------------------
1 | function p = add_isolines(T,varargin);
2 | % ADD_ISOLINES Add isolines for plotted mesh (t) with scalar per-vertex
3 | % pseudocolor data
4 | %
5 | % p = add_isolines() % Apply to all
6 | % h = add_shadow(T)
7 | % h = add_shadow(T,ParametersPassedToPlot, ...)
8 | %
9 | % InpuT:
10 | % T #T list of trisurf handles {[] --> find all trisurf in `gca`}
11 | % OutpuT:
12 | % p #T list of isolines plot handles
13 | %
14 | if ~exist('T','var') || isempty(T)
15 | c = get(gca,'Children');
16 | T = c(arrayfun(@(x) isa(x,'matlab.graphics.primitive.Patch'),c));
17 | end
18 | if iscell(T)
19 | T = [T{:}];
20 | end
21 | p = {};
22 | for ti = 1:numel(T)
23 | t = T(ti);
24 | n = size(colormap,1)+1;
25 | a = caxis;
26 | iso = linspace(a(1),a(2),n);
27 | V = t.Vertices;
28 | F = t.Faces;
29 | S = t.FaceVertexCData;
30 | assert(size(S,2) == 1);
31 | [LS,LD,I] = isolines(V,F,S,iso);
32 | hold on;
33 | p{end+1} = plot3([LS(:,1) LD(:,1)]',[LS(:,2) LD(:,2)]',[LS(:,3) LD(:,3)]','Color','k',varargin{:});
34 | hold off;
35 | end
36 | end
37 |
--------------------------------------------------------------------------------
/func_render/private/add_shadow.m:
--------------------------------------------------------------------------------
1 | function [h,L,M,ground] = add_shadow(T,L,varargin)
2 | % ADD_SHADOW Add a shadow for plotted mesh (t) according to light (l)
3 | %
4 | % h = add_shadow() % Apply to all
5 | % h = add_shadow(T,L)
6 | % h = add_shadow(T,L,'ParameterName',ParameterValue,...)
7 | % h = add_shadow([],[],'ParameterName',ParameterValue,...) % apply to all
8 | %
9 | % Inputs:
10 | % T #T list of trisurf handles {[] --> find all trisurf in `gca`}
11 | % L #L list of lights {[] --> find all light in `gca`}
12 | % Optional:
13 | % 'Ground' ground plane equation {[0 0 -1 min(Z)]}
14 | % 'Nudge' nudge the ground plane down a bit
15 | % 'Color' followed by 3-vector color {[0.21 0.21 0.21]}
16 | % 'BackgroundColor' followed by 3-vector color {[1 1 1]}
17 | % 'Fade' followed by:
18 | % 'none' constant shadow color
19 | % 'local' fade darker away from contact with ground (ape a spotlight)
20 | % 'infinite' fade lighter away from contact ground (ape infinite
21 | % light)
22 | % Outputs:
23 | % h #T*#L list of output shadow trisurf handles
24 | % L #L list of lights
25 | % M 4 by 4 by #T*#L shadow projection matrices
26 | %
27 | % Example:
28 | % t = tsurf(F,V,'EdgeColor','none',fphong,'SpecularStrength',0.1);
29 | % l = [
30 | % light('Position',[-10 -10 13],'Style','local');
31 | % light('Position',[10 -10 13],'Style','local')];
32 | % camproj('persp');
33 | % axis equal;
34 | % h = add_shadow(t,l);
35 | % apply_ambient_occlusion(t);
36 | %
37 |
38 | % default values
39 | ground = [];
40 | nudge = 0;
41 | color = [0.21 0.21 0.21];
42 | background_color = [1 1 1];
43 | fade = 'none';
44 | % Map of parameter names to variable names
45 | params_to_variables = containers.Map( ...
46 | {'Ground','Nudge','BackgroundColor','Color','Fade'}, ...
47 | {'ground','nudge','background_color','color','fade'});
48 | v = 1;
49 | while v <= numel(varargin)
50 | param_name = varargin{v};
51 | if isKey(params_to_variables,param_name)
52 | assert(v+1<=numel(varargin));
53 | v = v+1;
54 | % Trick: use feval on anonymous function to use assignin to this workspace
55 | feval(@()assignin('caller',params_to_variables(param_name),varargin{v}));
56 | else
57 | error('Unsupported parameter: %s',varargin{v});
58 | end
59 | v=v+1;
60 | end
61 |
62 | if ~exist('T','var') || isempty(T)
63 | c = get(gca,'Children');
64 | T = c(arrayfun(@(x) isa(x,'matlab.graphics.primitive.Patch'),c));
65 | end
66 | if iscell(T)
67 | T = [T{:}]';
68 | end
69 | T = T(:);
70 |
71 | if ~exist('L','var') || isempty(L)
72 | c = get(gca,'Children');
73 | L = c(arrayfun(@(x) isa(x,'matlab.graphics.primitive.Light'),c));
74 | if isempty(L)
75 | L = camlight;
76 | end
77 | end
78 |
79 | if isempty(ground)
80 | minZ = inf;
81 | for t = T'
82 | V = t.Vertices;
83 | minZ = min([V(:,3);minZ]);
84 | end
85 | ground = [0 0 -1 minZ-nudge];
86 | end
87 |
88 | h = [];
89 | % need to specify that there are 0 "tubes"
90 | M = zeros([0,0,0]);
91 | for t = T'
92 | V = t.Vertices;
93 | for l = L'
94 | % plane equation
95 | % 0 = ax + by + cz + d
96 | light_pos = [l.Position strcmp(l.Style,'local')];
97 | d = ground * light_pos';
98 | shadow_mat = d*eye(4) - light_pos'*ground;
99 | U = [V ones(size(V,1),1)]*shadow_mat';
100 | U = bsxfun(@rdivide,U(:,1:3),U(:,4));
101 |
102 | hold on;
103 | tsh = trisurf(t.Faces,U(:,1),U(:,2),U(:,3), ...
104 | 'FaceColor',color, ...
105 | 'DiffuseStrength',0,'SpecularStrength',0, ...
106 | 'AmbientStrength',1, ...
107 | 'EdgeColor','none');
108 | hold off;
109 | switch fade
110 | case {'local','infinite'}
111 | D = matrixnormalize( ...
112 | sum(bsxfun(@times,tsh.Vertices(:,1:2),l.Position(1:2)),2));
113 | switch fade
114 | case 'infinite'
115 | D = 1.0-D;
116 | end
117 | tsh.FaceVertexCData = ...
118 | bsxfun(@plus,color,bsxfun(@times,D,background_color-color));
119 | tsh.FaceColor = 'interp';
120 | end
121 | h = [h;tsh];
122 | M(:,:,end+1) = shadow_mat;
123 | end
124 | end
125 | end
126 |
--------------------------------------------------------------------------------
/func_render/private/isolines.m:
--------------------------------------------------------------------------------
1 | function [LS,LD,I] = isolines(V,F,S,iso)
2 | % ISOLINES compute a list of isolines for a scalar field S defined on the
3 | % mesh (V,F)
4 | %
5 | % [LS,LD,I] = isolines(V,F,S,iso)
6 | %
7 | % Inputs:
8 | % V #V by dim list of vertex positions
9 | % F #F by 3 list of triangle indices
10 | % S #V list of scalar values defined on V
11 | % iso #iso list of iso values
12 | % Outputs:
13 | % LS #L by dim list of isoline start positions
14 | % LD #L by dim list of isoline destination positions
15 | % I #L list of indices into iso revealing corresponding iso value
16 | %
17 | % alternative: tracing isolines should result in smaller plot data (every
18 | % vertex only appears once
19 | %
20 | % Example:
21 | % iso = linspace(min(S),max(S),10);
22 | % [LS,LD] = isolines(V,F,S,iso);
23 | % colormap(jet(numel(iso)-1));
24 | % tsurf(F,V,'CData',S,fphong);
25 | % hold on;
26 | % plot([LS(:,1) LD(:,1)]',[LS(:,2) LD(:,2)]', ...
27 | % 'Color','k','LineWidth',10);
28 | % hold off;
29 | %
30 |
31 | % make sure iso is a ROW vector
32 | iso = iso(:)';
33 | % number of isolines
34 | niso = numel(iso);
35 |
36 | % number of domain positions
37 | n = size(V,1);
38 | % number of dimensions
39 | dim = size(V,2);
40 |
41 | % number of faces
42 | m = size(F,1);
43 |
44 | % Rename for convenience
45 | S1 = S(F(:,1),:);
46 | S2 = S(F(:,2),:);
47 | S3 = S(F(:,3),:);
48 |
49 | % t12(i,j) reveals parameter t where isovalue j falls on the line from
50 | % corner 1 to corner 2 of face i
51 | t12 = bsxfun(@rdivide,bsxfun(@minus,iso,S1),S2-S1);
52 | t23 = bsxfun(@rdivide,bsxfun(@minus,iso,S2),S3-S2);
53 | t31 = bsxfun(@rdivide,bsxfun(@minus,iso,S3),S1-S3);
54 |
55 | % replace values outside [0,1] with NaNs
56 | t12( (t12<-eps)|(t12>(1+eps)) ) = NaN;
57 | t23( (t23<-eps)|(t23>(1+eps)) ) = NaN;
58 | t31( (t31<-eps)|(t31>(1+eps)) ) = NaN;
59 |
60 | % masks for line "parallel" to 12
61 | l12 = ~isnan(t23) & ~isnan(t31);
62 | l23 = ~isnan(t31) & ~isnan(t12);
63 | l31 = ~isnan(t12) & ~isnan(t23);
64 |
65 | % find non-zeros (lines) from t23 to t31
66 | [F12,I12,~] = find(l12);
67 | [F23,I23,~] = find(l23);
68 | [F31,I31,~] = find(l31);
69 | % indices directly into t23 and t31 corresponding to F12 and I12
70 | %ti12 = sub2ind(size(l12),F12,I12);
71 | %ti23 = sub2ind(size(l23),F23,I23);
72 | %ti31 = sub2ind(size(l31),F31,I31);
73 | % faster sub2ind
74 | ti12 = F12+(I12-1)*size(l12,1);
75 | ti23 = F23+(I23-1)*size(l23,1);
76 | ti31 = F31+(I31-1)*size(l31,1);
77 |
78 | % compute actual position values
79 | LS = [ ...
80 | ... % average of vertex positions between 2 and 3
81 | bsxfun(@times,1-t23(ti12), V(F(F12,2),:)) + ...
82 | bsxfun(@times, t23(ti12), V(F(F12,3),:)) ...
83 | ; ... % average of vertex positions between 2 and 3
84 | bsxfun(@times,1-t31(ti23), V(F(F23,3),:)) + ...
85 | bsxfun(@times, t31(ti23), V(F(F23,1),:)) ...
86 | ;... % average of vertex positions between 2 and 3
87 | bsxfun(@times,1-t12(ti31), V(F(F31,1),:)) + ...
88 | bsxfun(@times, t12(ti31), V(F(F31,2),:)) ...
89 | ];
90 | LD = [...
91 | ... % hcat with average of vertex positions between 3 and 1
92 | bsxfun(@times,1-t31(ti12), V(F(F12,3),:)) + ...
93 | bsxfun(@times, t31(ti12), V(F(F12,1),:)) ...
94 | ;... % hcat with average of vertex positions between 3 and 1
95 | bsxfun(@times,1-t12(ti23), V(F(F23,1),:)) + ...
96 | bsxfun(@times, t12(ti23), V(F(F23,2),:)) ...
97 | ;... % hcat with average of vertex positions between 3 and 1
98 | bsxfun(@times,1-t23(ti31), V(F(F31,2),:)) + ...
99 | bsxfun(@times, t23(ti31), V(F(F31,3),:)) ...
100 | ];
101 |
102 | % I is just concatenation of each I12
103 | I = [I12;I23;I31];
104 |
105 | end
106 |
--------------------------------------------------------------------------------
/func_render/private/isolines_map.m:
--------------------------------------------------------------------------------
1 | function M = isolines_map(varargin)
2 | % ISOLINES_MAP Create a colormap that can be used to create "isolines". That
3 | % is colored intervals where everyother interval is a thin black interval.
4 | %
5 | % M = isolines_map(n)
6 | % M = isolines_map(N)
7 | % M = isolines_map(...,'ParameterName',ParameterValue, ...)
8 | %
9 | % Inputs:
10 | % n number of *isolines* (thus there will be n+1 colored intervals), using
11 | % default colormap
12 | % or
13 | % N #N by 3 input colormap, (thus there will be #N-1 isolines)
14 | % Optional:
15 | % 'LineColor' followed by {1|#N-1} by 3 color of isolines {[0 0 0]}
16 | % 'Thickness' ratio of isointerval thick to isoline, where thick is
17 | % measured on the color axis {10}
18 | %
19 | % Note: Remember to use 'FaceLighting','phong' in your trisurf plot to get
20 | % crisp isointervals (and isolines)
21 | %
22 |
23 | if numel(varargin{1}) == 1
24 | n = varargin{1};
25 | N = parula(n+1);
26 | else
27 | N = varargin{1};
28 | assert(size(N,2) == 3,'Number columns in colormap (%d) not 3',size(N,2));
29 | n = size(N,1) - 1;
30 | end
31 |
32 | % Default optional parameters
33 | thick = 10;
34 | line_color = zeros([n 3]);
35 |
36 | ii = 2;
37 | while ii <= nargin
38 | switch varargin{ii}
39 | case 'Thickness'
40 | ii = ii + 1;
41 | assert(ii<=nargin);
42 | thick = varargin{ii};
43 | assert(thick == round(thick),'Thickness (%d) ot an integer',thick);
44 | case 'LineColor'
45 | ii = ii + 1;
46 | assert(ii<=nargin);
47 | line_color = varargin{ii};
48 | assert(size(line_color,2) == 3, ...
49 | 'Number of columns in LineColor %d not 3',size(line_color,2));
50 | if size(line_color,1) == 1
51 | line_color = repmat(line_color,[n 1]);
52 | else
53 | assert(size(line_color,1) == n, ...
54 | 'Number of rows in LineColor (%d) not n (%d)',size(line_color,1),n);
55 | end
56 | otherwise
57 | error(['Unsupported parameter: ' varargin{ii}]);
58 | end
59 | ii = ii+1;
60 | end
61 |
62 | % append phony color to line_color to make it match N
63 | line_color = [line_color;[1 0 0]];
64 | assert(size(N,1) == size(line_color,1))
65 |
66 | % repeat N thick times
67 | N = repmat(N,[1 1 thick]);
68 | M = reshape(permute(cat(3,N,line_color),[3 1 2]),(n+1)*(thick + 1),3);
69 | % drop phony color
70 | M = M(1:(end-1),:);
71 |
72 | end
73 |
--------------------------------------------------------------------------------
/func_render/private/load_MeshPlot_default_params.m:
--------------------------------------------------------------------------------
1 | function default_param = load_MeshPlot_default_params(S)
2 | default_param.Title = S.name;
3 |
4 | % If visualize a function on mesh
5 | default_param.IfShowFunc = false;
6 | default_param.func = [];
7 | default_param.checkFunc = @(T) length(T)==S.nv; % check if the input function has the correct length
8 |
9 | % If visualize a set of vertices
10 | default_param.IfShowVtx = false;
11 | default_param.landmarks = [];
12 | default_param.Size_lmk = 50;
13 | % default_param.Col_lmk = [1, 0.7, 0]; % orange
14 | default_param.Col_lmk = [0.4, 0.58, 0.93]; % blue
15 | % If visualize a set of edges
16 | default_param.IfShowEdge = false;
17 | default_param.edgeList = [];
18 | default_param.checkEdgeList = @(edgeList) isnumeric(edgeList) && size(edgeList,2) == 2;
19 | default_param.edgeID = [];
20 | default_param.CameraPos = [0,0];
21 | default_param.LineWidth = 1.2;
22 |
23 | % parameters for trimesh
24 | default_param.FaceColor = 'interp';
25 | validFaceColor = {'interp','flat'};
26 | default_param.checkFaceColor = @(x) any(validatestring(x,validFaceColor)) || isnumeric(x);
27 |
28 | default_param.EdgeColor = 'none';
29 | validEdgeColor = {'none','flat','interp'};
30 | default_param.checkEdgeColor = @(x) any(validatestring(x,validEdgeColor));
31 | default_param.FaceAlpha = 0.6;
32 |
33 | % parameters for rendering
34 | default_param.LightPos = [-0.2, -0.5, 0.5];
35 | default_param.BackgroundColor = [1,1,1];
36 | default_param.RotationOps = {};
37 | default_param.MeshVtxColor = get_meshVtxColor(S);
38 | default_param.checkMeshVtxColor = @(f) isnumeric(f) && (size(f,1) == S.nv) && (size(f,2) == 1 || size(f,2) == 3);
39 | default_param.IfPlotIsolines = false;
40 | default_param.VtxPos = S.surface.VERT;
41 | default_param.checkVtxPos = @(X) isnumeric(X) && size(X,1) == S.nv && size(X,2) == 3;
42 | default_param.MeshSepDist = [1.5,0,0];
43 | default_param.VecField = [];
44 | end
45 |
46 |
47 | function col = get_meshVtxColor(S)
48 | g1 = S.surface.X;
49 | g2 = S.surface.Y;
50 | g3 = S.surface.Z;
51 |
52 | g1 = normalize_function(0,1,g1);
53 | g2 = normalize_function(0,1,g2);
54 | g3 = normalize_function(0,1,g3);
55 | col = [g1,g2,g3];
56 | end
57 |
58 | function fnew = normalize_function(min_new,max_new,f)
59 | fnew = f - min(f);
60 | fnew = (max_new-min_new)*fnew/max(fnew) + min_new;
61 | end
--------------------------------------------------------------------------------
/func_render/private/matrixnormalize.m:
--------------------------------------------------------------------------------
1 | function N = matrixnormalize(M)
2 | % MATRIXNORMALIZE Normalize matrix values to be between the range 0 and 1.
3 | % Current just works with matrices of type double.
4 | %
5 | % N = matrixnormalize(M)
6 | %
7 | % Inputs:
8 | % M original input matrix
9 | % Output:
10 | % N normalized matrix
11 | %
12 | % Example:
13 | % imshow(matrixnormalize(im))
14 | % % Equivalent to
15 | % imshow(im,[])
16 | %
17 | switch class(M)
18 | case {'double','single'}
19 | N = (M-min(M(:)))./(max(M(:))-min(M(:)));
20 | case 'logical'
21 | N = M;
22 | case 'uint8'
23 | N = (M-min(M(:)))*(255/double((max(M(:))-min(M(:)))));
24 | otherwise
25 | error('Class not supported');
26 | end
27 | end
28 |
--------------------------------------------------------------------------------
/func_render/private/normalize_function.m:
--------------------------------------------------------------------------------
1 | function fnew = normalize_function(min_new,max_new,f)
2 | fnew = f - min(f);
3 | fnew = (max_new-min_new)*fnew/max(fnew) + min_new;
4 | end
--------------------------------------------------------------------------------
/func_render/private/parse_MeshPlot_params.m:
--------------------------------------------------------------------------------
1 | function [param, p] = parse_MeshPlot_params(default_param, varargin)
2 | p = inputParser;
3 | addParameter(p, 'Title', default_param.Title, @isstr);
4 | addParameter(p,'IfShowFunc',default_param.IfShowFunc, @islogical);
5 | addParameter(p,'func', default_param.func, default_param.checkFunc);
6 | addParameter(p,'IfShowVtx',default_param.IfShowVtx, @islogical);
7 | addParameter(p, 'landmarks', default_param.landmarks, @isnumeric);
8 | addParameter(p,'Color_Landmarks',default_param.Col_lmk,@isnumeric);
9 | addParameter(p,'Size_Landmarks',default_param.Size_lmk,@isnumeric);
10 |
11 | addParameter(p,'FaceColor',default_param.FaceColor,default_param.checkFaceColor);
12 | addParameter(p,'EdgeColor',default_param.EdgeColor,default_param.checkEdgeColor);
13 | addParameter(p,'FaceAlpha', default_param.FaceAlpha, @isnumeric);
14 | addParameter(p,'BackgroundColor',default_param.BackgroundColor, @isnumeric);
15 |
16 | addParameter(p,'IfShowEdge',default_param.IfShowEdge, @islogical);
17 | addParameter(p,'edgeList', default_param.edgeList, default_param.checkEdgeList);
18 | addParameter(p,'edgeID', default_param.edgeID, @isnumeric);
19 | addParameter(p,'LineWidth', default_param.LineWidth, @isnumeric);
20 |
21 | addParameter(p,'CameraPos', default_param.CameraPos,@isnumeric);
22 | addParameter(p,'LightPos', default_param.LightPos,@isnumeric);
23 | addParameter(p,'RotationOps', default_param.RotationOps,@iscell);
24 | addParameter(p,'MeshVtxColor',default_param.MeshVtxColor, default_param.checkMeshVtxColor);
25 | addParameter(p,'IfPlotIsolines',default_param.IfPlotIsolines,@islogical);
26 | addParameter(p,'VtxPos',default_param.VtxPos,default_param.checkVtxPos);
27 | addParameter(p,'MeshSepDist',default_param.MeshSepDist,@isnumeric);
28 | addParameter(p,'VecField',default_param.VecField,@isnumeric);
29 |
30 | parse(p,varargin{:});
31 | param = p.Results;
32 | param.Col_lmk = p.Results.Color_Landmarks;
33 | param.Size_lmk = p.Results.Size_Landmarks;
34 |
35 | if ~isempty(param.func)
36 | param.IfShowFunc = true;
37 | param.FaceAlpha = 0.9;
38 | end
39 | if ~isempty(param.landmarks)
40 | param.IfShowVtx = true;
41 | if ~param.IfShowFunc
42 | param.FaceColor = [0.7, 0.7, 0.7];
43 | end
44 | end
45 | if ~isempty(param.edgeList) || ~isempty(param.edgeID)
46 | param.IfShowEdge = true;
47 | end
48 |
49 |
50 | end
--------------------------------------------------------------------------------
/func_render/private/set_overlay_axis.m:
--------------------------------------------------------------------------------
1 | function [xdiam, ydiam, zdiam] = set_overlay_axis(xdiam, ydiam, zdiam, overlay_axis)
2 | switch lower(overlay_axis)
3 | case 'x'
4 | ydiam = 0; zdiam = 0;
5 | case 'y'
6 | xdiam = 0; zdiam = 0;
7 | case 'z'
8 | xdiam = 0; ydiam = 0;
9 | case 'xy'
10 | zdiam = 0;
11 | case 'xz'
12 | ydiam = 0;
13 | case 'yz'
14 | xdiam = 0;
15 | case 'xyz'
16 | otherwise
17 | error('invalid overlay_axis type')
18 | end
19 | end
--------------------------------------------------------------------------------
/func_render/render_map.m:
--------------------------------------------------------------------------------
1 | function render_map(S1,S2,map,col_idx,samples,varargin)
2 | default_param = load_MeshPlot_default_params(S1);
3 | param = parse_MeshPlot_params(default_param, varargin{:});
4 |
5 | xdiam = param.MeshSepDist(1)*(max(S2.surface.X)-min(S2.surface.X));
6 | ydiam = param.MeshSepDist(2)*(max(S2.surface.Y)-min(S2.surface.Y));
7 | zdiam = param.MeshSepDist(3)*(max(S2.surface.Z)-min(S2.surface.Z));
8 | %%
9 | [S1_col,S2_col]= get_mapped_face_color_withNaN(S1,S2,map,col_idx);
10 |
11 |
12 | [~,new_X1] = render_mesh(S1,'MeshVtxCol',S1_col,varargin{:});
13 | axis equal; axis off; hold on;
14 |
15 | [~,new_X2] = render_mesh(S2,'MeshVtxCol',S2_col,...
16 | 'VtxPos',S2.surface.VERT + repmat([xdiam,ydiam,zdiam],S2.nv,1),...
17 | varargin{:});
18 | axis equal; axis off; hold on;
19 |
20 | if (~isempty(samples))
21 | target_samples = map(samples);
22 |
23 | Xstart = new_X1(samples,1)'; Xend = new_X2(target_samples,1)';
24 | Ystart = new_X1(samples,2)'; Yend = new_X2(target_samples,2)';
25 | Zstart = new_X1(samples,3)'; Zend = new_X2(target_samples,3)';
26 |
27 | Colors = S1_col;
28 | ColorSet = Colors(samples,:);
29 | set(gca, 'ColorOrder', ColorSet);
30 | plot3([Xstart; Xend], [Ystart; Yend], [Zstart; Zend],'LineWidth',1.2); hold off;
31 | end
32 | end
33 |
--------------------------------------------------------------------------------
/func_render/render_mesh.m:
--------------------------------------------------------------------------------
1 | % 2018-10-17: rendering a mesh, using **gptoolbox**
2 | % 'MeshVtxColor':
3 | % same as 'FaceVertexCData', n-by-1 or n-by-3 matrix
4 | % note that, if we want to add the isolines (i.e., set IfPlotIsolines to true)
5 | % this needs to be a n-by-1 vector (a scalar function to find the isolines)
6 | % 'LightPos': the 3D position of the light
7 | % 'CameraPos': the position of the camera/view
8 | % 'BackgroundColor': the background color
9 | % 'RotationOps': a cell of rotation vectors (apply the rotations in a seq)
10 | % 'VecField': vector field
11 | function [t,X, S_new] = render_mesh(S,varargin)
12 | default_param = load_MeshPlot_default_params(S);
13 | param = parse_MeshPlot_params(default_param, varargin{:});
14 |
15 | X = param.VtxPos;
16 | T = S.surface.TRIV;
17 | f = param.MeshVtxColor;
18 |
19 | if ~isempty(param.RotationOps)
20 | center = mean(X);
21 | X = X - center;
22 | for i = 1:length(param.RotationOps)
23 | R = param.RotationOps{i};
24 | X = X*rotx(R(1))*roty(R(2))*rotz(R(3));
25 | end
26 | X = X + center;
27 | end
28 | % construct the rotated new mesh
29 | if nargout > 2
30 | S_new = S;
31 | S_new.surface.VERT = X;
32 | S_new.surface.X = X(:,1);
33 | S_new.surface.Y = X(:,2);
34 | S_new.surface.Z = X(:,3);
35 | end
36 |
37 | % plot the mesh
38 | t = trimesh(T, X(:,1), X(:,2), X(:,3),...
39 | 'FaceColor',param.FaceColor,...
40 | 'FaceAlpha',param.FaceAlpha,...
41 | 'EdgeColor','none');
42 | axis equal; axis off; hold on;
43 | view(param.CameraPos);
44 |
45 | teal = [144 216 196]/255;
46 | pink = [254 194 194]/255;
47 | orange = [249,198,7]/255;
48 |
49 | if ~isempty(param.VecField)
50 | J = param.VecField;
51 | if size(J,1) == S.nv
52 | quiver3(X(:,1),X(:,2),X(:,3),J(:,1),J(:,2),J(:,3),'Color',[0.2,0.2,0.2],'LineWidth',0.6);
53 | elseif size(J,1) == S.nf
54 | T = S.surface.TRIV;
55 | Fc = (X(T(:,1),:) + X(T(:,2),:) + X(T(:,3),:))/3;
56 | quiver3(Fc(:,1),Fc(:,2),Fc(:,3),J(:,1),J(:,2),J(:,3),'Color',[0.5,0.3,0.3],'LineWidth',0.8);
57 | else
58 | error('Wrong: size of the vector field')
59 | end
60 | end
61 |
62 | set(t,'FaceColor','interp','FaceLighting','phong',...
63 | 'FaceVertexCData',f);
64 | set(t,'SpecularStrength',0.2,'DiffuseStrength',0.2,'AmbientStrength',0.8);
65 |
66 |
67 | l = light('Position',param.LightPos);
68 | bg_color = param.BackgroundColor;
69 | set(gca,'Visible','off');
70 | set(gcf,'Color',bg_color);
71 |
72 | % add isolines if MeshVtxColor is a scalar function
73 | if param.IfPlotIsolines
74 | p = add_isolines(t,'LineWidth',0.8,'LineStyle','--');
75 | end
76 |
77 | % add the shadows
78 | s = add_shadow(t,l,'Color',bg_color*0.8,'BackgroundColor',bg_color,'Fade','infinite');
79 |
80 | end
--------------------------------------------------------------------------------
/func_render/sphere.obj:
--------------------------------------------------------------------------------
1 | v 0.39750224351882935 -0.88814014196395874 -0.18837209045886993
2 | v 0.87229442596435547 -0.44368830323219299 -0.12369003146886826
3 | v 0.90587824583053589 0.3680042028427124 0.12385314702987671
4 | v 0.79750627279281616 -0.41017836332321167 0.40943625569343567
5 | v 0.54435837268829346 0.09583631157875061 0.8152199387550354
6 | v -0.1092359721660614 0.92867815494537354 0.32916438579559326
7 | v -0.45511218905448914 -0.016316462308168411 0.8730970025062561
8 | v -0.56776338815689087 -0.55020391941070557 0.59132832288742065
9 | v -0.64723879098892212 -0.5617755651473999 -0.48875218629837036
10 | v -0.0051572192460298538 -0.57019984722137451 -0.80591821670532227
11 | v 0.20584964752197266 -0.37311431765556335 -0.88923776149749756
12 | v 0.49911388754844666 0.50341242551803589 -0.68633842468261719
13 | v 0.34090530872344971 0.84772670269012451 -0.38103386759757996
14 | v 0.47276011109352112 -0.6492619514465332 -0.57559764385223389
15 | v 0.74537110328674316 -0.12112487107515335 -0.63169902563095093
16 | v 0.49711930751800537 -0.80085104703903198 -0.30104184150695801
17 | v 0.54804527759552002 -0.81718206405639648 -0.11027997732162476
18 | v 0.61934870481491089 -0.77091634273529053 0.047525547444820404
19 | v 0.74846124649047852 -0.5265728235244751 0.36987787485122681
20 | v 0.90225750207901001 0.036402765661478043 0.39249220490455627
21 | v 0.39019995927810669 -0.8062211275100708 0.42034187912940979
22 | v 0.36796444654464722 0.15044963359832764 0.90021985769271851
23 | v -0.021105160936713219 0.71919244527816772 0.67903691530227661
24 | v -0.14110489189624786 0.89035087823867798 0.41144120693206787
25 | v -0.14795772731304169 0.18025265634059906 0.95606666803359985
26 | v -0.2566794753074646 0.78898274898529053 0.5398942232131958
27 | v -0.50041252374649048 -0.84817886352539063 0.10102619230747223
28 | v -0.91652441024780273 0.36118513345718384 0.030814677476882935
29 | v -0.56450021266937256 -0.81244009733200073 0.02013876847922802
30 | v -0.83138930797576904 -0.51062220335006714 -0.14782440662384033
31 | v -0.61662542819976807 -0.7703738808631897 -0.065978042781352997
32 | v -0.87296837568283081 -0.12345800548791885 -0.4380761981010437
33 | v -0.68008637428283691 -0.092184379696846008 -0.70534670352935791
34 | v -0.65912377834320068 0.38890868425369263 -0.6217803955078125
35 | v -0.40970242023468018 -0.84991878271102905 -0.30280980467796326
36 | v -0.080487057566642761 0.35564303398132324 -0.9150884747505188
37 | v 0.60099667310714722 -0.43361583352088928 -0.65033501386642456
38 | v 0.84017074108123779 -0.45162290334701538 -0.24819457530975342
39 | v 0.93362295627593994 0.26489156484603882 -0.17053902149200439
40 | v 0.056745164096355438 -0.60746002197265625 0.77625495195388794
41 | v -0.19929637014865875 -0.5090559720993042 0.82151401042938232
42 | v -0.10936953872442245 -0.96407234668731689 0.21163605153560638
43 | v -0.74354434013366699 -0.28671875596046448 0.57826530933380127
44 | v -0.27478864789009094 -0.95235496759414673 -0.046238336712121964
45 | v -0.84435164928436279 0.43116360902786255 -0.27048054337501526
46 | v -0.77148211002349854 -0.44361922144889832 -0.42380964756011963
47 | v -0.57773387432098389 0.76529544591903687 -0.2442406564950943
48 | v -0.32471561431884766 0.60374146699905396 -0.71072226762771606
49 | v -0.27485683560371399 -0.4030643105506897 -0.85716903209686279
50 | v 0.13901647925376892 0.50944852828979492 -0.83290493488311768
51 | v 0.24509766697883606 0.44151303172111511 -0.84726214408874512
52 | v 0.14868971705436707 -0.30047383904457092 -0.9266316294670105
53 | v 0.068972520530223846 0.3787156343460083 -0.90688431262969971
54 | v 0.31253761053085327 0.19537888467311859 -0.91348785161972046
55 | v 0.28689256310462952 -0.75421196222305298 -0.57201766967773438
56 | v 0.10318738967180252 0.95354700088500977 -0.25682902336120605
57 | v 0.34366849064826965 0.7414059042930603 -0.55779463052749634
58 | v 0.50550025701522827 -0.058349419385194778 -0.84275388717651367
59 | v 0.54418051242828369 0.56658130884170532 -0.59851062297821045
60 | v 0.68354499340057373 -0.091763928532600403 -0.70160257816314697
61 | v 0.57642525434494019 0.71970939636230469 -0.35579022765159607
62 | v 0.82200932502746582 -0.27130767703056335 -0.46976658701896667
63 | v 0.65371757745742798 -0.59128004312515259 -0.4446464478969574
64 | v 0.76382386684417725 0.33788949251174927 -0.52229976654052734
65 | v 0.85411208868026733 -0.38151517510414124 -0.31125524640083313
66 | v 0.61695611476898193 0.76420283317565918 -0.11575736105442047
67 | v 0.94926673173904419 -0.19124948978424072 -0.17666357755661011
68 | v 0.81457126140594482 0.55579036474227905 -0.03705955296754837
69 | v 0.88790220022201538 0.42341187596321106 0.065421536564826965
70 | v 0.81612265110015869 -0.55039411783218384 -0.069913662970066071
71 | v 0.60750192403793335 0.75800848007202148 0.18928614258766174
72 | v 0.8533063530921936 0.46949231624603271 0.15310662984848022
73 | v 0.82534241676330566 -0.49811562895774841 0.20759864151477814
74 | v 0.82136052846908569 0.43229007720947266 0.33168008923530579
75 | v 0.64976191520690918 -0.69115263223648071 0.27870392799377441
76 | v 0.67682081460952759 -0.55103546380996704 0.46145826578140259
77 | v 0.86209619045257568 0.16011987626552582 0.44697189331054688
78 | v 0.63900959491729736 -0.283344566822052 0.69423002004623413
79 | v 0.6355520486831665 -0.41502034664154053 0.62854349613189697
80 | v 0.41395583748817444 -0.8313480019569397 0.34366104006767273
81 | v 0.76336544752120972 -0.2594948410987854 0.56655299663543701
82 | v 0.24397413432598114 0.63193154335021973 0.71905016899108887
83 | v 0.50091338157653809 -0.42293933033943176 0.73657643795013428
84 | v 0.4117966890335083 0.68019765615463257 0.58608251810073853
85 | v 0.22535824775695801 0.41303476691246033 0.8663017749786377
86 | v 0.059955835342407227 0.18991546332836151 0.96405768394470215
87 | v -0.019790694117546082 0.80115193128585815 0.58042764663696289
88 | v -0.26140683889389038 0.68696367740631104 0.66032779216766357
89 | v -0.43840757012367249 -0.10405854880809784 0.87573868036270142
90 | v -0.35287407040596008 -0.38311958312988281 0.83630079030990601
91 | v -0.22764821350574493 -0.84190207719802856 0.46985110640525818
92 | v -0.10537811368703842 0.67966079711914063 0.70939928293228149
93 | v -0.54529213905334473 0.29057928919792175 0.76733094453811646
94 | v -0.56810355186462402 0.10837879031896591 0.79616004228591919
95 | v -0.48441952466964722 -0.50683289766311646 0.69469380378723145
96 | v -0.39862039685249329 -0.75788974761962891 0.49566850066184998
97 | v -0.65158575773239136 0.37299719452857971 0.63781899213790894
98 | v -0.611297607421875 -0.44888773560523987 0.63100981712341309
99 | v -0.53862255811691284 -0.68329155445098877 0.46983397006988525
100 | v -0.57049286365509033 0.78983134031295776 0.17543347179889679
101 | v -0.79224437475204468 -0.55439949035644531 0.19742158055305481
102 | v -0.90471112728118896 0.026901211589574814 0.38642081618309021
103 | v -0.5613742470741272 0.81577610969543457 0.0024155732244253159
104 | v -0.93075144290924072 -0.24215854704380035 -0.21028167009353638
105 | v -0.6354404091835022 -0.7430039644241333 -0.15078660845756531
106 | v -0.90148806571960449 -0.16894452273845673 -0.35675403475761414
107 | v -0.56682819128036499 -0.71928155422210693 -0.37116515636444092
108 | v -0.66420763731002808 -0.38392949104309082 -0.61860460042953491
109 | v -0.46090182662010193 0.47676163911819458 -0.73017561435699463
110 | v -0.5379607081413269 0.13887271285057068 -0.81325817108154297
111 | v -0.44132992625236511 -0.58959978818893433 -0.65832751989364624
112 | v -0.33896464109420776 -0.83145314455032349 -0.41766399145126343
113 | v -0.3715246319770813 -0.19935265183448792 -0.88927233219146729
114 | v -0.46251946687698364 -0.21073576807975769 -0.84356081485748291
115 | v -0.16605553030967712 -0.56369805335998535 -0.79275459051132202
116 | v 0.021383721381425858 -0.72862100601196289 -0.66788607835769653
117 | v 0.20262895524501801 0.97236114740371704 0.030218448489904404
118 | v -0.11431578546762466 0.17393049597740173 -0.96212947368621826
119 | v 0.038517002016305923 0.56070846319198608 -0.8118024468421936
120 | v 0.13499630987644196 0.86878591775894165 -0.45594525337219238
121 | v 0.35695788264274597 -0.46619904041290283 -0.7927781343460083
122 | v 0.44680839776992798 0.40967994928359985 -0.77693164348602295
123 | v 0.60612219572067261 -0.15332485735416412 -0.76094681024551392
124 | v 0.41786423325538635 -0.79699337482452393 -0.41257384419441223
125 | v 0.52874749898910522 0.41494458913803101 -0.72083002328872681
126 | v 0.50599658489227295 -0.75184023380279541 -0.39683043956756592
127 | v 0.69878607988357544 -0.22547648847103119 -0.65671658515930176
128 | v 0.75313746929168701 -0.33936485648155212 -0.53702592849731445
129 | v 0.76811933517456055 -0.61076885461807251 -0.11384595930576324
130 | v 0.96153450012207031 0.019825421273708344 -0.21021723747253418
131 | v 0.96041524410247803 -0.095214806497097015 -0.19167473912239075
132 | v 0.86316525936126709 0.45083624124526978 -0.15629538893699646
133 | v 0.90765023231506348 -0.38163042068481445 0.041762113571166992
134 | v 0.94555944204330444 -0.16094513237476349 0.22259479761123657
135 | v 0.9294469952583313 -0.23980459570884705 0.21833319962024689
136 | v 0.78625482320785522 -0.55135500431060791 0.22888197004795074
137 | v 0.62106412649154663 -0.7465711236000061 0.18892674148082733
138 | v 0.30697694420814514 0.86770802736282349 0.36801987886428833
139 | v 0.45587033033370972 -0.33151087164878845 0.80796545743942261
140 | v 0.4354206919670105 -0.50653254985809326 0.72553497552871704
141 | v 0.15421357750892639 -0.12468740344047546 0.96443837881088257
142 | v 0.012945006601512432 -0.45639345049858093 0.87400245666503906
143 | v 0.062462709844112396 -0.70363003015518188 0.69131475687026978
144 | v 0.025636620819568634 -0.75760549306869507 0.63548463582992554
145 | v 0.040586691349744797 0.046118088066577911 0.98200386762619019
146 | v 0.043370086699724197 -0.11483605951070786 0.97634130716323853
147 | v -0.13668154180049896 0.52529478073120117 0.82412582635879517
148 | v -0.15106680989265442 0.84546416997909546 0.49278387427330017
149 | v -0.26190930604934692 0.53487998247146606 0.78753626346588135
150 | v -0.085506007075309753 -0.91211378574371338 0.37790665030479431
151 | v -0.47885048389434814 0.086338549852371216 0.85586148500442505
152 | v -0.40664470195770264 0.44385913014411926 0.78149133920669556
153 | v -0.62991368770599365 0.29917985200881958 0.695168137550354
154 | v -0.71147310733795166 0.51832222938537598 0.445832759141922
155 | v -0.85716098546981812 -0.30048078298568726 0.38148164749145508
156 | v -0.47555449604988098 -0.86937916278839111 -0.0057685580104589462
157 | v -0.97465342283248901 0.11805503070354462 0.067867927253246307
158 | v -0.29539746046066284 0.9449266791343689 0.071047469973564148
159 | v -0.98232859373092651 -0.059262104332447052 -0.0071238530799746513
160 | v -0.8104972243309021 0.53574419021606445 -0.17333309352397919
161 | v -0.54942113161087036 -0.81700479984283447 -0.10505742579698563
162 | v -0.80235970020294189 0.21925567090511322 -0.5273892879486084
163 | v -0.61851018667221069 0.51297968626022339 -0.57178616523742676
164 | v -0.73468750715255737 -0.30834025144577026 -0.57871198654174805
165 | v -0.49281498789787292 0.77563977241516113 -0.36786660552024841
166 | v -0.49615886807441711 -0.7821735143661499 -0.34726870059967041
167 | v -0.59472697973251343 0.28405293822288513 -0.73176455497741699
168 | v -0.47174590826034546 -0.44881618022918701 -0.74039286375045776
169 | v -0.37125411629676819 -0.52844256162643433 -0.74595272541046143
170 | v -0.30835869908332825 -0.59465646743774414 -0.72540527582168579
171 | v -0.25587669014930725 -0.51700598001480103 -0.80001270771026611
172 | v -0.067215777933597565 0.92149722576141357 -0.3618626594543457
173 | v -0.15185318887233734 -0.32249265909194946 -0.91879057884216309
174 | v -0.090916797518730164 -0.62421411275863647 -0.75966238975524902
175 | v 0.13646264374256134 -0.91892248392105103 -0.3453611433506012
176 | v 0.63327747583389282 0.56828761100769043 -0.50044405460357666
177 | v 0.91235297918319702 0.24978458881378174 -0.27477514743804932
178 | v 0.92875832319259644 -0.19538158178329468 -0.26100873947143555
179 | v 0.89025938510894775 -0.35535609722137451 -0.22741122543811798
180 | v 0.92767739295959473 0.25440606474876404 0.21352279186248779
181 | v 0.96962577104568481 0.06983330100774765 0.15568168461322784
182 | v 0.93729913234710693 -0.28034448623657227 0.11534422636032104
183 | v 0.50891333818435669 -0.69171124696731567 0.49005374312400818
184 | v 0.070142321288585663 -0.96745210886001587 0.21636681258678436
185 | v -0.033754255622625351 0.094828039407730103 0.9791644811630249
186 | v -0.17689238488674164 0.090022765100002289 0.96400266885757446
187 | v -0.24092662334442139 -0.0044801272451877594 0.95392495393753052
188 | v -0.44638332724571228 -0.69627505540847778 0.54105949401855469
189 | v -0.50543010234832764 0.62728297710418701 0.57221502065658569
190 | v -0.50319439172744751 0.5365375280380249 0.65821385383605957
191 | v -0.53542923927307129 -0.37854465842247009 0.73549890518188477
192 | v -0.71542221307754517 0.1191682368516922 0.66504514217376709
193 | v -0.29898861050605774 -0.94563859701156616 0.040135800838470459
194 | v -0.58708888292312622 0.79232621192932129 0.07729378342628479
195 | v -0.91309165954589844 0.23098140954971313 -0.28686174750328064
196 | v -0.48449087142944336 0.65078812837600708 -0.56399613618850708
197 | v -0.40113228559494019 -0.29286113381385803 -0.85017108917236328
198 | v -0.26729485392570496 0.076612807810306549 -0.94441163539886475
199 | v 0.0053476803004741669 0.98322492837905884 -0.14846986532211304
200 | v 0.24746178090572357 0.077298536896705627 -0.94956529140472412
201 | v 0.052265208214521408 -0.78668379783630371 -0.59859216213226318
202 | v 0.25395175814628601 0.74347645044326782 -0.60094082355499268
203 | v 0.36552515625953674 0.39266780018806458 -0.82624876499176025
204 | v 0.12785467505455017 -0.87469476461410522 -0.4470684826374054
205 | v 0.2033703476190567 0.38001829385757446 -0.88572639226913452
206 | v 0.32032141089439392 -0.35651347041130066 -0.86067461967468262
207 | v 0.10238681733608246 0.82024997472763062 -0.54408204555511475
208 | v 0.25239953398704529 -0.83168143033981323 -0.47382527589797974
209 | v 0.39855358004570007 -0.18085721135139465 -0.8820347785949707
210 | v 0.19867752492427826 0.81911253929138184 -0.5187639594078064
211 | v 0.35345900058746338 -0.84165728092193604 -0.38492870330810547
212 | v 0.63766014575958252 0.21507926285266876 -0.71939456462860107
213 | v 0.47974458336830139 -0.71951866149902344 -0.47852808237075806
214 | v 0.44829562306404114 0.79832661151885986 -0.37644168734550476
215 | v 0.70700424909591675 -0.43510282039642334 -0.53245788812637329
216 | v 0.60554850101470947 -0.66862452030181885 -0.40378692746162415
217 | v 0.67948919534683228 -0.33768245577812195 -0.62820947170257568
218 | v 0.70440042018890381 0.56581073999404907 -0.39851656556129456
219 | v 0.71982145309448242 0.13595470786094666 -0.65765166282653809
220 | v 0.92290914058685303 0.005253475159406662 -0.34307125210762024
221 | v 0.80031484365463257 -0.49513956904411316 -0.29519084095954895
222 | v 0.72908860445022583 -0.56516081094741821 -0.35034468770027161
223 | v 0.89278960227966309 0.012451126240193844 -0.41493812203407288
224 | v 0.75913119316101074 0.63207948207855225 0.026305578649044037
225 | v 0.89169991016387939 0.35398867726325989 0.22424224019050598
226 | v 0.89357471466064453 -0.32460066676139832 0.25981602072715759
227 | v 0.42738953232765198 0.87827551364898682 0.16400814056396484
228 | v 0.87953585386276245 -0.22101666033267975 0.38322913646697998
229 | v 0.88882887363433838 -0.3970055878162384 0.15553529560565948
230 | v 0.50826787948608398 0.83829516172409058 0.13974931836128235
231 | v 0.80910199880599976 0.24035057425498962 0.50757730007171631
232 | v 0.84734082221984863 -0.066136151552200317 0.49687057733535767
233 | v 0.35168623924255371 -0.88955950736999512 0.2596515417098999
234 | v 0.73483806848526001 -0.37493336200714111 0.53931117057800293
235 | v 0.48704031109809875 -0.75885099172592163 0.40608799457550049
236 | v 0.61196386814117432 -0.5216144323348999 0.57234716415405273
237 | v 0.40302538871765137 0.61603111028671265 0.65830367803573608
238 | v 0.30192264914512634 0.33902624249458313 0.87452828884124756
239 | v 0.3452201783657074 -0.36217668652534485 0.84911954402923584
240 | v 0.32431232929229736 -0.45892012119293213 0.8100435733795166
241 | v 0.11982744932174683 0.97626721858978271 0.13889616727828979
242 | v 0.38392806053161621 -0.61567586660385132 0.67061281204223633
243 | v 0.34345468878746033 0.74484890699386597 0.5524328351020813
244 | v 0.39858400821685791 -0.034105490893125534 0.89931857585906982
245 | v 0.016977641731500626 -0.89634376764297485 0.42345616221427917
246 | v 0.23154294490814209 -0.72926986217498779 0.62719660997390747
247 | v 0.099467255175113678 -0.35180693864822388 0.91509592533111572
248 | v -0.13495621085166931 0.29443058371543884 0.93078392744064331
249 | v -0.12216353416442871 0.010946626774966717 0.97666996717453003
250 | v -0.20076274871826172 -0.28131929039955139 0.92282915115356445
251 | v -0.15648689866065979 -0.60692548751831055 0.76248389482498169
252 | v -0.41157907247543335 0.15923695266246796 0.88014048337936401
253 | v -0.27892413735389709 -0.44243314862251282 0.83629542589187622
254 | v -0.26576200127601624 0.34511715173721313 0.88390016555786133
255 | v -0.29665327072143555 -0.17275126278400421 0.9232679009437561
256 | v -0.35989910364151001 0.79564309120178223 0.46691787242889404
257 | v -0.53933042287826538 0.41705936193466187 0.71269184350967407
258 | v -0.46495383977890015 0.35638836026191711 0.79200619459152222
259 | v -0.54808288812637329 -0.28032782673835754 0.76856780052185059
260 | v -0.48385187983512878 -0.25690644979476929 0.81797921657562256
261 | v -0.41339367628097534 0.59475946426391602 0.67098033428192139
262 | v -0.72448021173477173 0.20647841691970825 0.63469904661178589
263 | v -0.67602360248565674 -0.34383267164230347 0.62925213575363159
264 | v -0.45928725600242615 -0.77226269245147705 0.41399183869361877
265 | v -0.56203848123550415 0.019433407112956047 0.80737483501434326
266 | v -0.7424735426902771 -0.035758797079324722 0.64547818899154663
267 | v -0.81372058391571045 0.1171024814248085 0.54156935214996338
268 | v -0.77419006824493408 -0.32754376530647278 0.51463669538497925
269 | v -0.45502492785453796 0.80237883329391479 0.35927951335906982
270 | v -0.48741909861564636 0.69928163290023804 0.5010266900062561
271 | v -0.72575736045837402 0.41031929850578308 0.52673566341400146
272 | v -0.49578815698623657 0.84819591045379639 0.12548917531967163
273 | v -0.90342217683792114 0.1319107711315155 0.36800727248191833
274 | v -0.78884619474411011 -0.4961860179901123 0.32427495718002319
275 | v -0.93068391084671021 0.24403345584869385 0.20816083252429962
276 | v -0.93903487920761108 -0.23702313005924225 0.17683443427085876
277 | v -0.84778422117233276 -0.39722123742103577 0.30976900458335876
278 | v -0.65165239572525024 0.74354970455169678 0.003079624380916357
279 | v -0.79156529903411865 0.58913612365722656 -0.041093088686466217
280 | v -0.96810024976730347 -0.18136771023273468 0.0011355355381965637
281 | v -0.61469709873199463 0.76815640926361084 -0.10623277723789215
282 | v -0.86282157897949219 0.45642820000648499 -0.14341256022453308
283 | v -0.89703667163848877 -0.3721432089805603 -0.16670294106006622
284 | v -0.86215978860855103 -0.41892287135124207 -0.2280246913433075
285 | v -0.88548147678375244 -0.25007098913192749 -0.35191112756729126
286 | v -0.68759864568710327 0.47962039709091187 -0.52013182640075684
287 | v -0.73785126209259033 0.39061376452445984 -0.52294570207595825
288 | v -0.80971676111221313 -0.29246732592582703 -0.47911593317985535
289 | v -0.82198494672775269 -0.36001792550086975 -0.40643474459648132
290 | v -0.85647785663604736 0.18335384130477905 -0.45092716813087463
291 | v -0.5640074610710144 0.62397223711013794 -0.51793599128723145
292 | v -0.69012194871902466 -0.2652900218963623 -0.65015566349029541
293 | v -0.47772708535194397 -0.0077216736972332001 -0.86124938726425171
294 | v -0.56462037563323975 0.41537237167358398 -0.69297069311141968
295 | v -0.19162905216217041 0.79906022548675537 -0.55073392391204834
296 | v -0.29121741652488708 0.76343697309494019 -0.55738615989685059
297 | v -0.36017438769340515 0.50324338674545288 -0.76837849617004395
298 | v -0.36728376150131226 0.17469558119773865 -0.89684110879898071
299 | v -0.30365937948226929 -0.32737025618553162 -0.87784737348556519
300 | v -0.1791272908449173 0.74658536911010742 -0.62316608428955078
301 | v -0.11706998944282532 0.60680365562438965 -0.77007651329040527
302 | v -0.16151474416255951 -0.76236015558242798 -0.60881650447845459
303 | v -0.078440763056278229 -0.79555612802505493 -0.58298546075820923
304 | v 0.031998205929994583 -0.82757586240768433 -0.54248678684234619
305 | v 0.11716866493225098 -0.47736850380897522 -0.85528743267059326
306 | v 0.027430815622210503 -0.63983547687530518 -0.75162476301193237
307 | v 0.097792722284793854 0.45068678259849548 -0.87157678604125977
308 | v 0.030995512381196022 -0.87455815076828003 -0.46395987272262573
309 | v 0.17664158344268799 -0.74495363235473633 -0.62550812959671021
310 | v 0.29978221654891968 -0.021017322316765785 -0.93704932928085327
311 | v 0.23962333798408508 -0.6660810112953186 -0.69014477729797363
312 | v 0.44866454601287842 -0.26329284906387329 -0.83616936206817627
313 | v 0.38237962126731873 -0.54148709774017334 -0.73031127452850342
314 | v 0.35972344875335693 -0.69236218929290771 -0.60605001449584961
315 | v 0.37670287489891052 0.47370785474777222 -0.77879339456558228
316 | v 0.12872420251369476 0.91538560390472412 -0.35878339409828186
317 | v 0.35416215658187866 0.65060853958129883 -0.65416437387466431
318 | v 0.65043932199478149 0.47757723927497864 -0.56699824333190918
319 | v 0.81274932622909546 0.07603812962770462 -0.55087542533874512
320 | v 0.766895592212677 -0.026298757642507553 -0.61607003211975098
321 | v 0.25361230969429016 0.93074977397918701 -0.23010087013244629
322 | v 0.87496668100357056 0.11839991807937622 -0.43459978699684143
323 | v 0.41060885787010193 0.88398581743240356 -0.17833027243614197
324 | v 0.72834563255310059 -0.51806044578552246 -0.41759577393531799
325 | v 0.65431886911392212 0.68718618154525757 -0.2778618335723877
326 | v 0.94446533918380737 -0.27858933806419373 -0.029934726655483246
327 | v 0.90500760078430176 -0.38505116105079651 -0.054609127342700958
328 | v 0.59053879976272583 0.78948843479156494 0.08392411470413208
329 | v 0.73687487840652466 -0.64884501695632935 0.10628367960453033
330 | v 0.94064849615097046 0.28808364272117615 0.056936122477054596
331 | v 0.25840398669242859 -0.95356607437133789 0.098596066236495972
332 | v 0.9405357837677002 0.118828184902668 0.26706305146217346
333 | v 0.39120253920555115 0.90897393226623535 0.06296982616186142
334 | v 0.65943920612335205 -0.63624131679534912 0.36837407946586609
335 | v 0.72304618358612061 0.51786983013153076 0.42755243182182312
336 | v 0.47074881196022034 -0.83824354410171509 0.23879578709602356
337 | v 0.76261109113693237 0.51678335666656494 0.35309764742851257
338 | v 0.54448235034942627 0.76169615983963013 0.31845101714134216
339 | v 0.64643567800521851 0.62414342164993286 0.40864229202270508
340 | v 0.21637414395809174 -0.94157695770263672 0.22844851016998291
341 | v 0.42077857255935669 -0.7254067063331604 0.52406811714172363
342 | v 0.28412890434265137 0.91197991371154785 0.2661382257938385
343 | v 0.19873824715614319 0.90655112266540527 0.34881106019020081
344 | v 0.43863841891288757 0.73843741416931152 0.49043568968772888
345 | v 0.31684949994087219 0.81627339124679565 0.46288657188415527
346 | v 0.32831257581710815 -0.55675852298736572 0.74592208862304688
347 | v 0.18443819880485535 0.84589821100234985 0.4814143180847168
348 | v 0.088689103722572327 0.64024728536605835 0.74770969152450562
349 | v 0.10075656324625015 -0.030290460214018822 0.97828066349029541
350 | v 0.13581401109695435 0.1401885449886322 0.96557116508483887
351 | v -0.024682076647877693 -0.032745160162448883 0.98347651958465576
352 | v -0.15699484944343567 -0.059413615614175797 0.96944630146026611
353 | v -0.16256482899188995 0.75057286024093628 0.62366455793380737
354 | v -0.0638718381524086 0.61595755815505981 0.76910489797592163
355 | v -0.081735789775848389 -0.78595167398452759 0.59494709968566895
356 | v -0.054998800158500671 0.36174356937408447 0.91474270820617676
357 | v -0.19823373854160309 -0.76552921533584595 0.59490251541137695
358 | v -0.17459309101104736 0.42225468158721924 0.87357449531555176
359 | v -0.29013335704803467 0.44501456618309021 0.83091521263122559
360 | v -0.3257344663143158 -0.041506782174110413 0.92773246765136719
361 | v -0.44841662049293518 0.26293379068374634 0.83600330352783203
362 | v -0.54179400205612183 -0.15882337093353271 0.8066939115524292
363 | v -0.44665113091468811 -0.36242386698722839 0.80047595500946045
364 | v -0.29405072331428528 0.61855870485305786 0.71131908893585205
365 | v -0.29157790541648865 -0.75653010606765747 0.56636804342269897
366 | v -0.60224467515945435 -0.20384620130062103 0.75231438875198364
367 | v -0.24125461280345917 -0.95425814390182495 0.13001343607902527
368 | v -0.67054033279418945 -0.10331840813159943 0.71332412958145142
369 | v -0.75067025423049927 -0.19732476770877838 0.60585051774978638
370 | v -0.71259218454360962 -0.44191369414329529 0.51878625154495239
371 | v -0.62412565946578979 -0.59784096479415894 0.47673419117927551
372 | v -0.59057039022445679 0.68230557441711426 0.402631014585495
373 | v -0.8552202582359314 -0.23582781851291656 0.42747634649276733
374 | v -0.38532340526580811 0.90498465299606323 0.12367232143878937
375 | v -0.91528254747390747 0.20854365825653076 0.29589971899986267
376 | v -0.95376962423324585 0.23954424262046814 0.051613759249448776
377 | v -0.95075637102127075 -0.23579862713813782 0.10278311371803284
378 | v -0.8845977783203125 -0.41185945272445679 0.13679622113704681
379 | v -0.72493267059326172 -0.6544872522354126 0.15171961486339569
380 | v -0.89663124084472656 -0.40746855735778809 -0.052757930010557175
381 | v -0.77135163545608521 0.53410232067108154 -0.30612275004386902
382 | v -0.92014592885971069 -0.066321372985839844 -0.34312376379966736
383 | v -0.59350329637527466 -0.73850661516189575 -0.28407388925552368
384 | v -0.90059554576873779 0.050862774252891541 -0.39353367686271667
385 | v -0.83160156011581421 0.088830426335334778 -0.5201643705368042
386 | v -0.75439846515655518 -0.062965825200080872 -0.62895512580871582
387 | v -0.34728115797042847 0.87474864721298218 -0.30827808380126953
388 | v -0.58174681663513184 -0.60793668031692505 -0.51713073253631592
389 | v -0.51549285650253296 -0.71126788854598999 -0.4540218710899353
390 | v -0.54982477426528931 0.52680331468582153 -0.62781405448913574
391 | v -0.27869173884391785 -0.89020001888275146 -0.33370611071586609
392 | v -0.60068392753601074 -0.017326723784208298 -0.77991384267807007
393 | v -0.4778934121131897 0.19751812517642975 -0.83805477619171143
394 | v -0.37492424249649048 -0.37761962413787842 -0.82948839664459229
395 | v -0.40415170788764954 0.63598757982254028 -0.63801819086074829
396 | v -0.24058282375335693 -0.77840369939804077 -0.56165933609008789
397 | v -0.19218046963214874 -0.65707838535308838 -0.71315884590148926
398 | v -0.14307823777198792 -0.84711408615112305 -0.49307653307914734
399 | v -0.41650471091270447 0.076930209994316101 -0.88906466960906982
400 | v -0.15749070048332214 0.91674917936325073 -0.34291622042655945
401 | v -0.022134251892566681 -0.33814948797225952 -0.92527741193771362
402 | v -0.136788010597229 -0.49684137105941772 -0.84172588586807251
403 | v -0.13935847580432892 -0.41708210110664368 -0.88225096464157104
404 | v -0.067872248589992523 -0.70935481786727905 -0.68574762344360352
405 | v 0.043986450880765915 -0.96247607469558716 -0.24266371130943298
406 | v 0.00356283038854599 0.96364784240722656 -0.24050030112266541
407 | v 0.22243620455265045 -0.10138267278671265 -0.95376414060592651
408 | v 0.023359466344118118 0.87511956691741943 -0.46437272429466248
409 | v 0.078281447291374207 -0.5380253791809082 -0.82325202226638794
410 | v -0.0039880312979221344 -0.45827946066856384 -0.87334245443344116
411 | v 0.11460927873849869 -0.68503135442733765 -0.70349884033203125
412 | v 0.1768803745508194 -0.80953842401504517 -0.54236263036727905
413 | v 0.18190069496631622 0.18305537104606628 -0.95003563165664673
414 | v 0.22164127230644226 -0.506977379322052 -0.81638073921203613
415 | v 0.16683927178382874 0.7418249249458313 -0.63316959142684937
416 | v 0.20760184526443481 0.64760082960128784 -0.71662598848342896
417 | v 0.3653741180896759 -0.76201403141021729 -0.51479899883270264
418 | v 0.22235727310180664 -0.88460314273834229 -0.38824194669723511
419 | v 0.43922466039657593 0.29463419318199158 -0.83149486780166626
420 | v 0.44358944892883301 -0.067420028150081635 -0.87567490339279175
421 | v 0.51305127143859863 -0.20982612669467926 -0.81485080718994141
422 | v 0.61311829090118408 0.32453027367591858 -0.69978982210159302
423 | v 0.55326944589614868 0.042721968144178391 -0.81304651498794556
424 | v 0.6605217456817627 -0.0082072513177990913 -0.72996938228607178
425 | v 0.48401832580566406 -0.53469753265380859 -0.67405962944030762
426 | v 0.44617363810539246 0.65880763530731201 -0.5854378342628479
427 | v 0.53006863594055176 0.64226871728897095 -0.53104472160339355
428 | v 0.42290478944778442 0.84331440925598145 -0.30036509037017822
429 | v 0.56803059577941895 -0.63818365335464478 -0.49629569053649902
430 | v 0.5550847053527832 0.67724865674972534 -0.45772060751914978
431 | v 0.69460874795913696 0.37244835495948792 -0.59243404865264893
432 | v 0.76476705074310303 0.18377886712551117 -0.59120422601699829
433 | v 0.1548035740852356 -0.96626633405685425 -0.16938322782516479
434 | v 0.82027095556259155 -0.071869611740112305 -0.53961837291717529
435 | v 0.85221511125564575 -0.15847951173782349 -0.46738937497138977
436 | v 0.86433804035186768 -0.045150376856327057 -0.46795809268951416
437 | v 0.25607654452323914 0.95320701599121094 -0.10397972166538239
438 | v 0.3414454460144043 0.88903599977493286 -0.27471128106117249
439 | v 0.64960604906082153 -0.65910220146179199 -0.34522590041160583
440 | v 0.77022862434387207 0.57244640588760376 -0.23539862036705017
441 | v 0.42113164067268372 -0.89393746852874756 -0.082149840891361237
442 | v 0.85954612493515015 0.25063389539718628 -0.41024506092071533
443 | v 0.82691127061843872 0.40032282471656799 -0.35735484957695007
444 | v 0.87246924638748169 0.31412264704704285 -0.33090907335281372
445 | v 0.97528398036956787 -0.0093096084892749786 -0.12827575206756592
446 | v 0.81093364953994751 0.55374902486801147 -0.099410369992256165
447 | v 0.86615484952926636 0.46874752640724182 -0.047940324991941452
448 | v 0.95834267139434814 0.16776716709136963 -0.1525668203830719
449 | v 0.91991317272186279 0.34101197123527527 -0.089758791029453278
450 | v 0.84430509805679321 -0.51109951734542847 0.012479484081268311
451 | v 0.82102149724960327 0.54389858245849609 0.063101634383201599
452 | v 0.52557373046875 -0.83936864137649536 -0.0025604534894227982
453 | v 0.90884774923324585 0.37979251146316528 -0.012702520005404949
454 | v 0.3848034143447876 -0.91387110948562622 0.026455776765942574
455 | v 0.97822988033294678 0.076667197048664093 0.072216972708702087
456 | v 0.97836524248123169 -0.093707755208015442 -0.05960354208946228
457 | v 0.98407632112503052 0.0026435451582074165 -0.018908930942416191
458 | v 0.96291637420654297 -0.17061024904251099 0.1112063005566597
459 | v 0.96646827459335327 -0.18535237014293671 0.022014666348695755
460 | v 0.55560594797134399 0.81850862503051758 -0.032577067613601685
461 | v 0.9470098614692688 -0.0045741093344986439 0.26707330346107483
462 | v 0.9048580527305603 -0.069915615022182465 0.38147887587547302
463 | v 0.71893453598022461 -0.61480849981307983 0.28207471966743469
464 | v 0.76761436462402344 0.60262185335159302 0.15278801321983337
465 | v 0.69465643167495728 0.66429740190505981 0.22850793600082397
466 | v 0.65900087356567383 -0.72875708341598511 0.1113431304693222
467 | v 0.68807238340377808 0.63229846954345703 0.32041281461715698
468 | v 0.34781274199485779 -0.91847097873687744 0.1377471536397934
469 | v 0.84254276752471924 0.29674068093299866 0.41537326574325562
470 | v 0.86592864990234375 -0.15782082080841064 0.44010850787162781
471 | v 0.8551255464553833 -0.32396045327186584 0.3651617169380188
472 | v 0.8193047046661377 -0.29463061690330505 0.46170306205749512
473 | v 0.3560793399810791 0.89912956953048706 0.21625101566314697
474 | v 0.79688560962677002 -0.017453305423259735 0.57713079452514648
475 | v 0.49359318614006042 0.78196388483047485 0.3536929190158844
476 | v 0.59425240755081177 -0.67560780048370361 0.40979292988777161
477 | v 0.58556300401687622 0.53132820129394531 0.59013909101486206
478 | v 0.67300325632095337 0.46695607900619507 0.54863119125366211
479 | v 0.77982383966445923 0.122031569480896 0.58885198831558228
480 | v 0.7334708571434021 0.25815650820732117 0.60553169250488281
481 | v 0.71171623468399048 0.11511535942554474 0.66945993900299072
482 | v 0.68959468603134155 -0.17912277579307556 0.67989182472229004
483 | v 0.5879477858543396 -0.18918977677822113 0.76691395044326782
484 | v 0.71843653917312622 0.011611288413405418 0.67340934276580811
485 | v 0.48009952902793884 -0.21312719583511353 0.83316761255264282
486 | v 0.49124285578727722 0.59993523359298706 0.61158472299575806
487 | v 0.40060365200042725 -0.26970371603965759 0.85863107442855835
488 | v 0.23313866555690765 0.75422871112823486 0.59683936834335327
489 | v 0.25790894031524658 -0.63576620817184448 0.71019518375396729
490 | v 0.30739143490791321 0.68917751312255859 0.63750076293945313
491 | v 0.33418720960617065 0.61414432525634766 0.69679611921310425
492 | v 0.20271646976470947 -0.80481469631195068 0.53885656595230103
493 | v 0.43418103456497192 0.084983371198177338 0.87903392314910889
494 | v 0.48556238412857056 -0.025062724947929382 0.85537177324295044
495 | v 0.47442498803138733 -0.126023069024086 0.85396939516067505
496 | v 0.16606047749519348 -0.89088797569274902 0.40041443705558777
497 | v 0.33830258250236511 0.080489613115787506 0.92126381397247314
498 | v 0.28908726572990417 -0.0052008051425218582 0.94068372249603271
499 | v 0.16867370903491974 0.014857428148388863 0.96969878673553467
500 | v 0.24599955976009369 -0.096997253596782684 0.94773542881011963
501 | v 0.19711419939994812 -0.21748800575733185 0.93984794616699219
502 | v 0.29125982522964478 -0.19799657166004181 0.91950720548629761
503 | v 0.28349560499191284 -0.29345414042472839 0.89615720510482788
504 | v 0.17952948808670044 -0.70755243301391602 0.66663694381713867
505 | v 0.11443520337343216 -0.78791749477386475 0.5878291130065918
506 | v 0.093667671084403992 -0.85599386692047119 0.4892973005771637
507 | v 0.15439854562282562 0.29151996970176697 0.92856818437576294
508 | v -0.025458607822656631 0.91787713766098022 0.37483566999435425
509 | v -0.039342381060123444 -0.97391122579574585 0.19191053509712219
510 | v -0.044141426682472229 -0.66222786903381348 0.73157846927642822
511 | v -0.16651266813278198 -0.3901558518409729 0.88999289274215698
512 | v -0.31977152824401855 -0.54358792304992676 0.75875890254974365
513 | v -0.20433281362056732 -0.68676668405532837 0.68075716495513916
514 | v -0.2825794517993927 0.11863011866807938 0.93602252006530762
515 | v -0.30276203155517578 -0.29842093586921692 0.88886523246765137
516 | v -0.403685063123703 -0.49219724535942078 0.75406903028488159
517 | v -0.34921610355377197 -0.61908310651779175 0.68597984313964844
518 | v -0.33765622973442078 -0.69618713855743408 0.61545175313949585
519 | v -0.41151320934295654 -0.63190567493438721 0.63732397556304932
520 | v -0.37963029742240906 0.54187470674514771 0.73173719644546509
521 | v -0.17865501344203949 -0.87404578924179077 0.43077558279037476
522 | v -0.35863602161407471 0.71647179126739502 0.5795866847038269
523 | v -0.50421243906021118 -0.60912960767745972 0.59137165546417236
524 | v -0.15412262082099915 -0.93312209844589233 0.29765167832374573
525 | v -0.6474306583404541 0.13066785037517548 0.7292097806930542
526 | v -0.5766945481300354 -0.071577161550521851 0.79409533739089966
527 | v -0.27557575702667236 0.89752781391143799 0.31962347030639648
528 | v -0.67434024810791016 -0.22289837896823883 0.68152278661727905
529 | v -0.48204299807548523 0.82356470823287964 0.26498091220855713
530 | v -0.67304831743240356 0.59326499700546265 0.41191604733467102
531 | v -0.66104918718338013 0.4714755117893219 0.55919063091278076
532 | v -0.78729820251464844 0.27164465188980103 0.52614682912826538
533 | v -0.67594695091247559 -0.59967488050460815 0.39677104353904724
534 | v -0.81195420026779175 0.37214654684066772 0.41704255342483521
535 | v -0.81432199478149414 -0.16871543228626251 0.52763283252716064
536 | v -0.87410813570022583 -0.092463880777359009 0.44397976994514465
537 | v -0.94074529409408569 -0.039057955145835876 0.28615134954452515
538 | v -0.71739017963409424 -0.60857152938842773 0.30060943961143494
539 | v -0.78591752052307129 -0.59006589651107788 0.096157409250736237
540 | v -0.66998070478439331 0.69912582635879517 0.1987275630235672
541 | v -0.5943906307220459 -0.75839215517044067 0.22169511020183563
542 | v -0.93253189325332642 0.29395908117294312 0.11610720306634903
543 | v -0.94823437929153442 0.073748722672462463 0.25526902079582214
544 | v -0.95255053043365479 -0.12667737901210785 0.21271200478076935
545 | v -0.97182738780975342 -0.11347457021474838 0.11147109419107437
546 | v -0.67087638378143311 0.71960687637329102 0.094663359224796295
547 | v -0.87845265865325928 -0.4461931586265564 0.037521619349718094
548 | v -0.64499175548553467 -0.74832040071487427 0.058298315852880478
549 | v -0.94241541624069214 0.2769550085067749 -0.076250612735748291
550 | v -0.9793848991394043 0.095073282718658447 -0.01339314877986908
551 | v -0.96702563762664795 0.14265282452106476 -0.11391996592283249
552 | v -0.9826166033744812 0.029519690200686455 -0.058095812797546387
553 | v -0.87427949905395508 0.26711702346801758 -0.36539113521575928
554 | v -0.9052046537399292 0.1402534693479538 -0.36059108376502991
555 | v -0.95679843425750732 -0.027510050684213638 -0.231209397315979
556 | v -0.7589266300201416 -0.6008681058883667 -0.1942690908908844
557 | v -0.75680327415466309 0.61209529638290405 -0.1665520966053009
558 | v -0.71666741371154785 0.62337237596511841 -0.26868817210197449
559 | v -0.74836814403533936 -0.55054992437362671 -0.33376801013946533
560 | v -0.82120651006698608 -0.43108680844306946 -0.3332294225692749
561 | v -0.71628439426422119 -0.49417361617088318 -0.46455091238021851
562 | v -0.64649629592895508 0.70816385746002197 -0.2420593798160553
563 | v -0.48728856444358826 0.83042216300964355 -0.23108823597431183
564 | v -0.72334086894989014 0.54622840881347656 -0.39104199409484863
565 | v -0.6368374228477478 0.65320789813995361 -0.38042834401130676
566 | v -0.78013217449188232 0.44956895709037781 -0.40282019972801208
567 | v -0.64962011575698853 0.31002920866012573 -0.67350107431411743
568 | v -0.30086863040924072 -0.93373745679855347 -0.14523041248321533
569 | v -0.69168770313262939 0.09655144065618515 -0.69336968660354614
570 | v -0.43367215991020203 0.82410472631454468 -0.33545172214508057
571 | v -0.64044266939163208 -0.4766172468662262 -0.57959753274917603
572 | v -0.49084237217903137 0.72258585691452026 -0.46294233202934265
573 | v -0.63192403316497803 -0.17823909223079681 -0.7343909740447998
574 | v -0.48027971386909485 -0.358904629945755 -0.78146809339523315
575 | v -0.25966119766235352 0.9098132848739624 -0.29695248603820801
576 | v -0.51439231634140015 -0.6080547571182251 -0.5837780237197876
577 | v -0.45438331365585327 -0.68130660057067871 -0.55256348848342896
578 | v -0.5009770393371582 0.39630860090255737 -0.75047492980957031
579 | v -0.6085582971572876 0.18915878236293793 -0.75069361925125122
580 | v -0.51459336280822754 0.28660038113594055 -0.78929662704467773
581 | v -0.67962068319320679 -0.012682782486081123 -0.71133458614349365
582 | v -0.62130147218704224 0.084565669298171997 -0.75810533761978149
583 | v -0.54157340526580811 -0.097420185804367065 -0.81614077091217041
584 | v 0.027505544945597649 -0.98533076047897339 -0.1300647109746933
585 | v -0.36372411251068115 -0.73346394300460815 -0.55547982454299927
586 | v -0.25521576404571533 -0.81675761938095093 -0.49709621071815491
587 | v -0.23871564865112305 0.45911732316017151 -0.83967185020446777
588 | v -0.17746242880821228 0.28342258930206299 -0.92647510766983032
589 | v -0.33216306567192078 -0.12144125252962112 -0.91875243186950684
590 | v -0.012144500389695168 0.17000120878219604 -0.96940100193023682
591 | v -0.17142796516418457 -0.028398441150784492 -0.96850705146789551
592 | v -0.061346292495727539 0.01088019460439682 -0.98236256837844849
593 | v -0.088137440383434296 -0.23151008784770966 -0.95279872417449951
594 | v -0.074759125709533691 0.74880248308181763 -0.64187765121459961
595 | v 0.021540209650993347 0.80535304546356201 -0.57466727495193481
596 | v -0.02692774124443531 -0.92898392677307129 -0.34681889414787292
597 | v -0.16897721588611603 0.41897168755531311 -0.87629538774490356
598 | v 0.058660600334405899 0.26802954077720642 -0.94553768634796143
599 | v 0.082732893526554108 0.1710965633392334 -0.96572196483612061
600 | v 0.1250767856836319 0.057256106287240982 -0.97490996122360229
601 | v 0.082729250192642212 -0.21180267632007599 -0.95817023515701294
602 | v 0.18356327712535858 0.0017721932381391525 -0.96680819988250732
603 | v 0.11117570847272873 -0.098560407757759094 -0.97282147407531738
604 | v 0.061959195882081985 -0.3380381166934967 -0.92389148473739624
605 | v 0.0028312429785728455 0.69166058301925659 -0.70658421516418457
606 | v 0.099422648549079895 0.68169546127319336 -0.70897567272186279
607 | v 0.14205636084079742 -0.60164260864257813 -0.76994144916534424
608 | v 0.24344807863235474 0.28632652759552002 -0.91026127338409424
609 | v 0.36541092395782471 -0.12021304666996002 -0.90706491470336914
610 | v 0.30882909893989563 -0.62366175651550293 -0.70086544752120972
611 | v 0.16229155659675598 0.5808289647102356 -0.78126049041748047
612 | v 0.28931999206542969 0.59628301858901978 -0.73179876804351807
613 | v 0.2888348400592804 0.52497714757919312 -0.78452497720718384
614 | v 0.45272007584571838 -0.35710036754608154 -0.7997584342956543
615 | v 0.3339325487613678 0.79697602987289429 -0.483437180519104
616 | v 0.43955960869789124 0.190994992852211 -0.85972487926483154
617 | v 0.48758378624916077 0.11248277872800827 -0.84750241041183472
618 | v 0.52953064441680908 0.20702674984931946 -0.80372220277786255
619 | v 0.58243441581726074 0.13714534044265747 -0.78130495548248291
620 | v 0.65357953310012817 0.078756235539913177 -0.73126751184463501
621 | v 0.5971643328666687 -0.070900760591030121 -0.77890616655349731
622 | v 0.16791506111621857 0.96206337213516235 -0.17752783000469208
623 | v 0.54223924875259399 -0.56734508275985718 -0.59828484058380127
624 | v 0.43977203965187073 0.73595064878463745 -0.49259907007217407
625 | v 0.39622032642364502 -0.62935680150985718 -0.64983350038528442
626 | v 0.40942037105560303 0.57067358493804932 -0.69349449872970581
627 | v 0.61318677663803101 0.43179807066917419 -0.64030081033706665
628 | v 0.62729966640472412 -0.48038187623023987 -0.58957678079605103
629 | v 0.64375096559524536 -0.53072977066040039 -0.52699172496795654
630 | v 0.50769567489624023 0.73619377613067627 -0.4213482141494751
631 | v 0.74728912115097046 0.43404915928840637 -0.47484791278839111
632 | v 0.79738342761993408 0.25391408801078796 -0.51995635032653809
633 | v 0.82819700241088867 0.15214261412620544 -0.50940734148025513
634 | v 0.90833002328872681 0.1533554345369339 -0.34826579689979553
635 | v 0.85072177648544312 -0.29696264863014221 -0.39928671717643738
636 | v 0.52139127254486084 0.7921566367149353 -0.28251641988754272
637 | v 0.73340415954589844 -0.60805982351303101 -0.26126366853713989
638 | v 0.6422685980796814 0.64099210500717163 -0.39046445488929749
639 | v 0.48673692345619202 -0.83933234214782715 -0.19692909717559814
640 | v 0.77024626731872559 0.47982925176620483 -0.38646242022514343
641 | v 0.42452913522720337 -0.85119760036468506 -0.2742074728012085
642 | v 0.81618332862854004 -0.52087324857711792 -0.18740662932395935
643 | v 0.61083877086639404 0.7516249418258667 -0.20180128514766693
644 | v 0.7823939323425293 0.5394100546836853 -0.26661980152130127
645 | v 0.58264338970184326 -0.74435657262802124 -0.29015663266181946
646 | v 0.63659018278121948 -0.75367856025695801 -0.080599263310432434
647 | v 0.56390058994293213 -0.79019123315811157 -0.18989674746990204
648 | v 0.94336539506912231 0.12699617445468903 -0.25074481964111328
649 | v 0.13167981803417206 0.98187273740768433 -0.088106334209442139
650 | v 0.93831533193588257 -0.083758227527141571 -0.2844347357749939
651 | v 0.90012532472610474 -0.26403537392616272 -0.29912969470024109
652 | v 0.97512602806091309 0.13235607743263245 0.0014131378848105669
653 | v 0.97643089294433594 0.087936364114284515 -0.086531400680541992
654 | v 0.48186305165290833 0.8659711480140686 0.013143366202712059
655 | v 0.72143948078155518 0.6686023473739624 -0.098101645708084106
656 | v 0.69599151611328125 -0.69831180572509766 -0.071456849575042725
657 | v 0.95782846212387085 0.2213970422744751 -0.052497871220111847
658 | v 0.74275606870651245 -0.65151023864746094 0.021301468834280968
659 | v 0.68737268447875977 0.70312511920928955 0.10214928537607193
660 | v 0.46151551604270935 -0.86916369199752808 0.11715197563171387
661 | v 0.96318280696868896 0.18547171354293823 0.08193235844373703
662 | v 0.98018419742584229 -0.056344076991081238 0.07314542680978775
663 | v 0.96473187208175659 -0.060568016022443771 0.18544241786003113
664 | v 0.8041343092918396 -0.56135296821594238 0.11084536463022232
665 | v 0.9006461501121521 0.14057724177837372 0.37141865491867065
666 | v 0.92852967977523804 -0.1202901229262352 0.30417576432228088
667 | v 0.90676814317703247 -0.22468605637550354 0.30998861789703369
668 | v 0.94677925109863281 0.1790388822555542 0.20095917582511902
669 | v 0.86274051666259766 0.35256242752075195 0.31803154945373535
670 | v 0.53853070735931396 -0.77070504426956177 0.30770546197891235
671 | v 0.099499888718128204 -0.98480457067489624 0.088081814348697662
672 | v 0.40894734859466553 0.85718148946762085 0.28037473559379578
673 | v 0.23587708175182343 0.95261269807815552 0.15026634931564331
674 | v 0.70452755689620972 -0.46114376187324524 0.51387327909469604
675 | v 0.56284713745117188 -0.61953228712081909 0.52341049909591675
676 | v 0.67187821865081787 0.3932684063911438 0.60390430688858032
677 | v 0.64399540424346924 0.19492806494235992 0.71940374374389648
678 | v 0.4892515242099762 0.32009169459342957 0.7930905818939209
679 | v 0.59518551826477051 0.24402917921543121 0.74603563547134399
680 | v 0.59259521961212158 -0.00043227290734648705 0.78559416532516479
681 | v 0.033328603953123093 0.98536878824234009 0.12953601777553558
682 | v 0.64384990930557251 -0.072325311601161957 0.74056112766265869
683 | v 0.5703696608543396 -0.083079524338245392 0.79744410514831543
684 | v 0.54430514574050903 -0.29112401604652405 0.76691418886184692
685 | v 0.57263475656509399 -0.36641794443130493 0.71279597282409668
686 | v 0.40386974811553955 0.80707055330276489 0.40713039040565491
687 | v 0.52476972341537476 0.64614874124526978 0.53251463174819946
688 | v 0.41362559795379639 -0.4337596595287323 0.78234618902206421
689 | v 0.22771641612052917 -0.83578395843505859 0.48026075959205627
690 | v 0.46629324555397034 0.50716429948806763 0.70614355802536011
691 | v 0.48063209652900696 0.19078846275806427 0.83830922842025757
692 | v 0.28334718942642212 0.24899600446224213 0.90959763526916504
693 | v 0.19579923152923584 0.087094150483608246 0.96075016260147095
694 | v 0.35080134868621826 -0.13866706192493439 0.90946215391159058
695 | v 0.24410012364387512 -0.47421565651893616 0.82990598678588867
696 | v 0.17287491261959076 -0.55256599187850952 0.79982006549835205
697 | v 0.14566595852375031 -0.66271775960922241 0.71836394071578979
698 | v 0.11406984180212021 -0.25385373830795288 0.94417822360992432
699 | v 0.011973792687058449 -0.32794931530952454 0.92895799875259399
700 | v 0.13576485216617584 -0.44498422741889954 0.86890220642089844
701 | v 0.096653908491134644 0.41621515154838562 0.88899880647659302
702 | v 0.16004352271556854 0.53588414192199707 0.81364184617996216
703 | v 0.041867997497320175 0.55181211233139038 0.81784248352050781
704 | v 0.0019366182386875153 -0.22149860858917236 0.95993310213088989
705 | v -0.086582742631435394 -0.4980664849281311 0.84703058004379272
706 | v -0.18792763352394104 0.63682830333709717 0.7312818169593811
707 | v -0.35586047172546387 0.23743817210197449 0.88713204860687256
708 | v -0.23281019926071167 -0.12741199135780334 0.94819694757461548
709 | v -0.51825982332229614 0.20343056321144104 0.81162077188491821
710 | v -0.056653693318367004 0.96093523502349854 0.24515189230442047
711 | v -0.39470270276069641 -0.23971252143383026 0.87041836977005005
712 | v -0.29744252562522888 -0.80500185489654541 0.49225008487701416
713 | v -0.41370415687561035 0.76502764225006104 0.47076964378356934
714 | v -0.61410248279571533 0.20733754336833954 0.74117845296859741
715 | v -0.62176513671875 0.018580552190542221 0.76315683126449585
716 | v -0.066270560026168823 0.99110150337219238 0.044045209884643555
717 | v -0.61745345592498779 -0.32908320426940918 0.69316822290420532
718 | v -0.22962875664234161 -0.93989640474319458 0.21786060929298401
719 | v -0.77294248342514038 0.080444782972335815 0.6041749119758606
720 | v -0.69629442691802979 0.043473195284605026 0.69424045085906982
721 | v -0.83790469169616699 -0.0072983624413609505 0.51690679788589478
722 | v -0.78893148899078369 -0.080705367028713226 0.58246546983718872
723 | v -0.62332290410995483 0.56337696313858032 0.51755046844482422
724 | v -0.57387000322341919 0.64037400484085083 0.4852219820022583
725 | v -0.43230614066123962 -0.82514059543609619 0.33683094382286072
726 | v -0.70767438411712646 0.28855079412460327 0.62102437019348145
727 | v -0.76303207874298096 0.32674777507781982 0.5301971435546875
728 | v -0.68308156728744507 0.64564239978790283 0.30341070890426636
729 | v -0.53470730781555176 -0.77223479747772217 0.31112468242645264
730 | v -0.78084653615951538 0.46591538190841675 0.38182607293128967
731 | v -0.75404995679855347 0.57274407148361206 0.28068572282791138
732 | v -0.86522632837295532 0.25914499163627625 0.39301654696464539
733 | v -0.86940735578536987 0.096825204789638519 0.45023968815803528
734 | v -0.40853419899940491 0.87378787994384766 0.22431398928165436
735 | v -0.90912729501724243 -0.068458192050457001 0.3705403208732605
736 | v -0.91353112459182739 -0.24421733617782593 0.27530288696289063
737 | v -0.89688903093338013 -0.3556067943572998 0.20117232203483582
738 | v -0.65714567899703979 -0.69423127174377441 0.25049296021461487
739 | v -0.71845102310180664 0.65432465076446533 0.17749039828777313
740 | v -0.65352344512939453 -0.72040945291519165 0.17650191485881805
741 | v -0.81968355178833008 0.46782127022743225 0.28800776600837708
742 | v -0.8378748893737793 0.47795987129211426 0.2032431960105896
743 | v -0.43501541018486023 -0.86693155765533447 0.2037094384431839
744 | v -0.87503647804260254 0.3308834433555603 0.30953547358512878
745 | v -0.89576983451843262 0.35457965731620789 0.20778845250606537
746 | v -0.9536052942276001 0.16437871754169464 0.18304590880870819
747 | v -0.87680333852767944 0.43598377704620361 0.11813568323850632
748 | v -0.80028504133224487 0.5572168231010437 0.15292473137378693
749 | v -0.82099407911300659 0.546092689037323 0.030729582533240318
750 | v -0.97890704870223999 0.029518131166696548 0.098946228623390198
751 | v -0.92780733108520508 -0.32634490728378296 0.058167748153209686
752 | v -0.8439640998840332 -0.47807100415229797 0.1804671436548233
753 | v -0.97632360458374023 -0.058928228914737701 -0.1103024035692215
754 | v -0.96646958589553833 -0.1649274080991745 -0.08531554788351059
755 | v -0.72618389129638672 0.66999495029449463 -0.028644517064094543
756 | v -0.69536560773849487 0.68710929155349731 -0.14562132954597473
757 | v -0.7896924614906311 -0.59099376201629639 -0.049991346895694733
758 | v -0.71734786033630371 -0.67699950933456421 -0.065412767231464386
759 | v -0.14163641631603241 -0.98452907800674438 -0.011639101430773735
760 | v -0.90732836723327637 0.32111617922782898 -0.20906972885131836
761 | v -0.94645202159881592 0.1471935510635376 -0.22822639346122742
762 | v -0.93499892950057983 0.032903064042329788 -0.30378517508506775
763 | v -0.94669198989868164 -0.16346733272075653 -0.2184440940618515
764 | v -0.8994826078414917 -0.31091406941413879 -0.25309237837791443
765 | v -0.4190768301486969 0.8923335075378418 -0.10578062385320663
766 | v -0.85484480857849121 -0.37114819884300232 -0.32068097591400146
767 | v -0.81035840511322021 -0.4976692795753479 -0.26119345426559448
768 | v -0.69665533304214478 -0.67304998636245728 -0.19434857368469238
769 | v -0.57309186458587646 0.71337407827377319 -0.3742777407169342
770 | v -0.64725685119628906 0.58501505851745605 -0.46140420436859131
771 | v -0.50388872623443604 -0.82333695888519287 -0.22197726368904114
772 | v -0.8776925802230835 -0.019514944404363632 -0.44424781203269958
773 | v -0.8204612135887146 -0.027861744165420532 -0.54263556003570557
774 | v -0.82666653394699097 -0.20997501909732819 -0.49219140410423279
775 | v -0.2173609733581543 -0.93106919527053833 -0.26272884011268616
776 | v -0.74007123708724976 0.025457628071308136 -0.64790040254592896
777 | v -0.74965190887451172 -0.19738446176052094 -0.60751265287399292
778 | v -0.62512856721878052 -0.29071664810180664 -0.70355302095413208
779 | v -0.34119808673858643 0.84001213312149048 -0.3997943103313446
780 | v -0.40310344099998474 0.73797869682312012 -0.52139192819595337
781 | v -0.53918188810348511 -0.53289902210235596 -0.63211852312088013
782 | v -0.42118942737579346 -0.7718498706817627 -0.45406335592269897
783 | v -0.2305670827627182 -0.86851048469543457 -0.41656953096389771
784 | v -0.39039456844329834 0.29786494374275208 -0.85387927293777466
785 | v -0.45083525776863098 -0.10742104053497314 -0.86815911531448364
786 | v -0.52490502595901489 -0.25056007504463196 -0.79512953758239746
787 | v -0.31329420208930969 0.70089536905288696 -0.62305068969726563
788 | v -0.36134710907936096 0.40802097320556641 -0.82076740264892578
789 | v -0.29128506779670715 0.53211492300033569 -0.77769458293914795
790 | v -0.21758626401424408 0.66472798585891724 -0.69804787635803223
791 | v -0.18767516314983368 0.56864291429519653 -0.78509920835494995
792 | v -0.26902332901954651 0.35802152752876282 -0.87809020280838013
793 | v -0.27779608964920044 -0.23895449936389923 -0.91422861814498901
794 | v -0.12303326278924942 0.85423672199249268 -0.48577007651329041
795 | v -0.0079892389476299286 0.073062941431999207 -0.98189103603363037
796 | v -0.095746167004108429 -0.10957827419042587 -0.97383975982666016
797 | v 0.02751532755792141 -0.070130228996276855 -0.98158323764801025
798 | v -0.0097298519685864449 -0.19717144966125488 -0.96436542272567749
799 | v -0.12329110503196716 0.66861683130264282 -0.71642661094665527
800 | v 0.0014658945146948099 0.61835247278213501 -0.76975071430206299
801 | v -0.090948387980461121 0.47569093108177185 -0.8593132495880127
802 | v -0.007625676691532135 0.40972161293029785 -0.89656805992126465
803 | v -0.21831245720386505 0.17280259728431702 -0.94451868534088135
804 | v 0.18162669241428375 -0.18509998917579651 -0.94956099987030029
805 | v 0.04689924418926239 -0.91763979196548462 -0.37161910533905029
806 | v 0.24773024022579193 0.86988341808319092 -0.40511828660964966
807 | v 0.41627833247184753 0.028124639764428139 -0.89114677906036377
808 | v 0.2639278769493103 -0.56677180528640747 -0.76355510950088501
809 | v 0.81461238861083984 0.32422804832458496 -0.44841903448104858
810 | v 0.70565605163574219 0.66980677843093872 -0.17112654447555542
811 | v 0.7101215124130249 -0.66116762161254883 -0.18480189144611359
812 | v 0.36121389269828796 0.92166149616241455 -0.048885289579629898
813 | v 0.28818348050117493 -0.94899964332580566 -0.036195792257785797
814 | v 0.96100467443466187 -0.19011156260967255 -0.096355848014354706
815 | v 0.3142414391040802 0.93413901329040527 0.11248017102479935
816 | v 0.76289767026901245 0.57224559783935547 0.25481966137886047
817 | v 0.84092593193054199 -0.43029335141181946 0.28318494558334351
818 | v 0.56084573268890381 0.68512594699859619 0.43934190273284912
819 | v 0.78599494695663452 0.40681588649749756 0.43470627069473267
820 | v 0.65634071826934814 0.09497687965631485 0.7278512716293335
821 | v 0.51083940267562866 0.42753994464874268 0.72606140375137329
822 | v 0.35665294528007507 -0.6908075213432312 0.60961759090423584
823 | v 0.26309916377067566 0.56564992666244507 0.76465797424316406
824 | v 0.17675696313381195 0.68298792839050293 0.69165444374084473
825 | v 0.25022190809249878 0.18149358034133911 0.93459469079971313
826 | v -0.049103222787380219 -0.5782548189163208 0.79868233203887939
827 | v -0.068107195198535919 -0.40508365631103516 0.89543181657791138
828 | v -0.22307431697845459 -0.90829038619995117 0.32892733812332153
829 | v -0.35671669244766235 0.86463445425033569 0.32672956585884094
830 | v -0.61274600028991699 -0.68606185913085938 0.36257347464561462
831 | v -0.72561353445053101 -0.53083038330078125 0.4068472683429718
832 | v -0.96712422370910645 -0.012909349054098129 0.18078871071338654
833 | v -0.96799129247665405 0.17859253287315369 -0.019141234457492828
834 | v -0.73110342025756836 -0.66379237174987793 0.013629132881760597
835 | v -0.6874234676361084 -0.66396945714950562 -0.2544669508934021
836 | v -0.71147817373275757 0.19890274107456207 -0.65131330490112305
837 | v -0.73795944452285767 -0.39600905776023865 -0.52023392915725708
838 | v 0.13572521507740021 0.30387008190155029 -0.92737495899200439
839 | v 0.31662052869796753 0.32349911332130432 -0.87492227554321289
840 | v 0.61440503597259521 -0.31756743788719177 -0.70149290561676025
841 | v 0.72781831026077271 -0.64127391576766968 0.18484731018543243
842 | v 0.83268570899963379 0.47974243760108948 0.22329026460647583
843 | v 0.62235325574874878 0.69990038871765137 0.31793281435966492
844 | v 0.64566946029663086 0.55662673711776733 0.49789085984230042
845 | v 0.57564079761505127 0.36248853802680969 0.71336036920547485
846 | v 0.37920463085174561 0.50355035066604614 0.75903451442718506
847 | v 0.069603323936462402 0.84376955032348633 0.51353180408477783
848 | v 0.065562963485717773 -0.51142948865890503 0.84074747562408447
849 | v 0.1203448697924614 0.79309946298599243 0.58028435707092285
850 | v -0.24498380720615387 -0.59709352254867554 0.74675637483596802
851 | v -0.14531950652599335 0.97916054725646973 0.093251869082450867
852 | v -0.3741493821144104 0.66492855548858643 0.62728500366210938
853 | v -0.38418799638748169 -0.91375970840454102 -0.019095931202173233
854 | v -0.43712574243545532 0.8892592191696167 0.024892402812838554
855 | v -0.83378982543945313 -0.52812641859054565 0.0096502229571342468
856 | v -0.95805197954177856 0.080644585192203522 -0.21159732341766357
857 | v -0.63566553592681885 -0.64217311143875122 -0.39983725547790527
858 | v -0.81571865081787109 0.33819791674613953 -0.43723934888839722
859 | v -0.29632857441902161 0.25533115863800049 -0.90333020687103271
860 | v -0.18910640478134155 0.87270826101303101 -0.42946514487266541
861 | v 0.36887872219085693 0.10140996426343918 -0.90738135576248169
862 | v 0.033875204622745514 0.9178922176361084 -0.37253928184509277
863 | v 0.26395443081855774 -0.42862200736999512 -0.84709697961807251
864 | v 0.46976578235626221 -0.46890890598297119 -0.72936266660690308
865 | v 0.31762388348579407 -0.90379083156585693 -0.25714617967605591
866 | v 0.56038397550582886 -0.35648858547210693 -0.72862571477890015
867 | v 0.61278694868087769 -0.22693988680839539 -0.73617202043533325
868 | v 0.21638184785842896 0.91649925708770752 -0.30882266163825989
869 | v 0.72154855728149414 0.26242631673812866 -0.61677896976470947
870 | v 0.73252731561660767 0.044555444270372391 -0.65539330244064331
871 | v 0.83246397972106934 0.45681369304656982 -0.25975140929222107
872 | v 0.87640869617462158 0.38209092617034912 -0.23936139047145844
873 | v 0.90086454153060913 -0.14166346192359924 -0.37145704030990601
874 | v 0.92636799812316895 -0.30308869481086731 -0.14649105072021484
875 | v 0.46253690123558044 0.87074905633926392 -0.099892504513263702
876 | v 0.51483148336410522 0.82909458875656128 -0.17013843357563019
877 | v 0.66159725189208984 0.73536348342895508 -0.0074480697512626648
878 | v 0.85936534404754639 -0.4715212881565094 0.1064097136259079
879 | v 0.54170948266983032 -0.81093060970306396 0.17091047763824463
880 | v 0.8873286247253418 0.24710939824581146 0.34873008728027344
881 | v 0.11662551760673523 0.98726022243499756 0.023915573954582214
882 | v 0.5811273455619812 0.46367022395133972 0.64800405502319336
883 | v 0.34718659520149231 -0.78647458553314209 0.48997631669044495
884 | v 0.42093390226364136 0.38759779930114746 0.80279064178466797
885 | v 0.092094533145427704 -0.92418617010116577 0.34669572114944458
886 | v 0.076093614101409912 0.93051791191101074 0.33481276035308838
887 | v -0.0029124878346920013 -0.82336103916168213 0.549735426902771
888 | v -0.2243582159280777 0.24635942280292511 0.92730998992919922
889 | v -0.021480843424797058 -0.98956173658370972 0.098266586661338806
890 | v -0.094700612127780914 -0.30007386207580566 0.93325746059417725
891 | v -0.06407938152551651 0.5009801983833313 0.8470456600189209
892 | v -0.032798077911138535 0.44706526398658752 0.878226637840271
893 | v -0.12396425753831863 0.81348329782485962 0.55068647861480713
894 | v -0.26117280125617981 0.85322356224060059 0.43027079105377197
895 | v -0.65652519464492798 -0.52104192972183228 0.5198444128036499
896 | v -0.58322632312774658 0.49026143550872803 0.62710928916931152
897 | v -0.60596412420272827 0.72660601139068604 0.28860300779342651
898 | v -0.15824532508850098 -0.97765374183654785 0.084863141179084778
899 | v -0.54914242029190063 -0.80624908208847046 0.17039777338504791
900 | v -0.38596898317337036 -0.9062124490737915 0.11166795343160629
901 | v -0.10970756411552429 0.9863661527633667 -0.060175534337759018
902 | v -0.52056550979614258 0.83506041765213013 -0.11275071650743484
903 | v -0.90601283311843872 0.36870589852333069 -0.11817630380392075
904 | v -0.34896087646484375 -0.90190839767456055 -0.22037629783153534
905 | v -0.88042593002319336 0.3350643515586853 -0.28748446702957153
906 | v -0.37515902519226074 0.89182198047637939 -0.21663229167461395
907 | v -0.83194905519485474 0.37751302123069763 -0.36794751882553101
908 | v -0.75682830810546875 0.29776239395141602 -0.55600517988204956
909 | v -0.80816066265106201 -0.10372841358184814 -0.55280381441116333
910 | v -0.78360658884048462 0.096916861832141876 -0.58863639831542969
911 | v -0.54851138591766357 -0.45961055159568787 -0.67763358354568481
912 | v -0.14193850755691528 -0.92239415645599365 -0.33605185151100159
913 | v -0.44988706707954407 0.36905443668365479 -0.79527902603149414
914 | v -0.08337007462978363 0.82274150848388672 -0.54483360052108765
915 | v -0.11161582916975021 -0.89978933334350586 -0.3995029628276825
916 | v -0.17665034532546997 -0.20500940084457397 -0.94694435596466064
917 | v -0.27605706453323364 0.82182741165161133 -0.47922322154045105
918 | v -0.044377151876688004 0.28161787986755371 -0.94308775663375854
919 | v 0.042318020015954971 0.75411683320999146 -0.6380581259727478
920 | v 0.18447135388851166 -0.93474459648132324 -0.27707958221435547
921 | v 0.27502697706222534 -0.23266476392745972 -0.91656768321990967
922 | v 0.35852590203285217 -0.27946200966835022 -0.87316924333572388
923 | v 0.53551352024078369 0.29985746741294861 -0.77042621374130249
924 | v 0.7800145149230957 -0.21824364364147186 -0.56032025814056396
925 | v 0.790272057056427 -0.41514268517494202 -0.41855233907699585
926 | v 0.64264106750488281 -0.71790856122970581 -0.22265852987766266
927 | v 0.26604929566383362 -0.94609558582305908 -0.13858307898044586
928 | v 0.32595258951187134 0.92561596632003784 -0.14137460291385651
929 | v 0.27519109845161438 0.9533647894859314 -0.015910148620605469
930 | v 0.18056823313236237 -0.97696202993392944 -0.032586902379989624
931 | v 0.092016428709030151 -0.98955816030502319 -0.041367817670106888
932 | v 0.17782479524612427 -0.97369951009750366 0.090855799615383148
933 | v 0.74744617938995361 0.37746015191078186 0.52049285173416138
934 | v 0.49803060293197632 0.82241004705429077 0.23461975157260895
935 | v 0.72270381450653076 -0.089867629110813141 0.66237443685531616
936 | v 0.79972827434539795 -0.149312824010849 0.55549740791320801
937 | v 0.67254966497421265 0.31747356057167053 0.64662420749664307
938 | v 0.52815663814544678 -0.5388062596321106 0.63606524467468262
939 | v 0.67421650886535645 -0.34459054470062256 0.63067334890365601
940 | v 0.55223405361175537 -0.46788311004638672 0.66928267478942871
941 | v 0.46265655755996704 -0.62438136339187622 0.60978347063064575
942 | v 0.16048148274421692 0.94713151454925537 0.24966214597225189
943 | v 0.38765734434127808 0.254619300365448 0.86887568235397339
944 | v 0.18432262539863586 -0.92562216520309448 0.30316963791847229
945 | v 0.31267300248146057 0.46524778008460999 0.81201738119125366
946 | v 0.069427825510501862 0.96303695440292358 0.22981639206409454
947 | v 0.098574250936508179 0.88608247041702271 0.43177357316017151
948 | v 0.19936108589172363 -0.35107743740081787 0.89904528856277466
949 | v -0.015865039080381393 0.86761480569839478 0.47787103056907654
950 | v 0.083038181066513062 0.747702956199646 0.64215189218521118
951 | v -0.036851938813924789 0.20069237053394318 0.96347916126251221
952 | v -0.02312946692109108 -0.9408450722694397 0.31469738483428955
953 | v 0.026179078966379166 0.30696007609367371 0.93578404188156128
954 | v -0.097901545464992523 -0.15682896971702576 0.96736419200897217
955 | v -0.09841618686914444 -0.71084284782409668 0.68071532249450684
956 | v -0.10309699177742004 -0.85347330570220947 0.49252262711524963
957 | v -0.37207525968551636 0.062697350978851318 0.9088592529296875
958 | v -0.37363001704216003 0.32739996910095215 0.85013985633850098
959 | v -0.32924538850784302 -0.83967763185501099 0.40858927369117737
960 | v -0.073613427579402924 0.97913205623626709 0.15589761734008789
961 | v -0.19447165727615356 0.93190991878509521 0.27836859226226807
962 | v -0.31899803876876831 -0.91372501850128174 0.21398788690567017
963 | v -0.72101205587387085 -0.132546067237854 0.65635907649993896
964 | v -0.19111590087413788 0.9585411548614502 0.17345046997070313
965 | v -0.31407687067985535 0.92010194063186646 0.19520227611064911
966 | v -0.51626908779144287 0.75596362352371216 0.3751254677772522
967 | v -0.33181264996528625 -0.881256103515625 0.30864745378494263
968 | v -0.84157192707061768 0.19781523942947388 0.47176223993301392
969 | v -0.78908401727676392 -0.40670004487037659 0.42884644865989685
970 | v -0.91792947053909302 -0.1479429304599762 0.32507142424583435
971 | v -0.75537681579589844 0.63022774457931519 0.084739148616790771
972 | v -0.87449657917022705 0.45618465542793274 -0.016915176063776016
973 | v -0.31733137369155884 0.93927055597305298 -0.033624060451984406
974 | v -0.93883669376373291 -0.28493580222129822 -0.092493064701557159
975 | v -0.42922163009643555 -0.88574552536010742 -0.11725261062383652
976 | v -0.9365275502204895 0.24694448709487915 -0.17609864473342896
977 | v -0.18617166578769684 -0.9650418758392334 -0.14633330702781677
978 | v -0.22228787839412689 0.96770864725112915 -0.039720151573419571
979 | v -0.71116036176681519 -0.5655708909034729 -0.38441136479377747
980 | v -0.30017301440238953 0.93329209089279175 -0.15473921597003937
981 | v -0.57923084497451782 -0.36340877413749695 -0.71002280712127686
982 | v -0.080188296735286713 -0.98757851123809814 -0.08118235319852829
983 | v -0.15987737476825714 0.96697074174880981 -0.16204248368740082
984 | v -0.085041403770446777 -0.96859312057495117 -0.20554301142692566
985 | v -0.15909790992736816 0.94498789310455322 -0.255615234375
986 | v -0.36106640100479126 -0.4614797830581665 -0.79268169403076172
987 | v -0.34351587295532227 -0.66905289888381958 -0.64018005132675171
988 | v -0.45974665880203247 0.54981410503387451 -0.67887717485427856
989 | v -0.25884050130844116 -0.69389581680297852 -0.65502899885177612
990 | v -0.081202350556850433 0.96837329864501953 -0.20444600284099579
991 | v -0.34657418727874756 -0.020276784896850586 -0.92122071981430054
992 | v -0.23605531454086304 -0.073844321072101593 -0.95335906744003296
993 | v -0.15440733730792999 0.076573140919208527 -0.96874797344207764
994 | v -0.052439909428358078 0.54781574010848999 -0.818733811378479
995 | v -0.046450082212686539 -0.86396682262420654 -0.48205634951591492
996 | v 0.83855563402175903 0.08537253737449646 0.5086514949798584
997 | v 0.28881150484085083 -0.75102543830871582 0.57473176717758179
998 | v 0.28802973031997681 -0.87082606554031372 0.37589037418365479
999 | v 0.004671639297157526 -0.99552458524703979 -0.0030334345065057278
1000 | v 0.0060232668183743954 0.99563485383987427 -0.0094096669927239418
1001 | f 590 918 598
1002 | f 598 53 838
1003 | f 795 797 592
1004 | f 795 599 600
1005 | f 599 413 600
1006 | f 11 604 52
1007 | f 207 595 408
1008 | f 120 408 316
1009 | f 409 10 410
1010 | f 410 401 604
1011 | f 409 305 607
1012 | f 415 919 595
1013 | f 207 415 595
1014 | f 605 919 606
1015 | f 306 411 116
1016 | f 800 605 606
1017 | f 802 307 53
1018 | f 204 304 412
1019 | f 55 309 311
1020 | f 55 412 309
1021 | f 54 413 608
1022 | f 839 608 205
1023 | f 839 54 608
1024 | f 805 175 405
1025 | f 200 413 54
1026 | f 921 804 407
1027 | f 316 862 56
1028 | f 11 52 921
1029 | f 52 804 921
1030 | f 210 202 415
1031 | f 311 808 610
1032 | f 416 415 202
1033 | f 922 614 206
1034 | f 312 922 209
1035 | f 614 421 866
1036 | f 121 206 614
1037 | f 625 314 610
1038 | f 610 314 311
1039 | f 610 808 313
1040 | f 625 610 313
1041 | f 612 317 626
1042 | f 613 626 315
1043 | f 920 175 418
1044 | f 122 419 203
1045 | f 618 616 419
1046 | f 423 807 617
1047 | f 807 420 609
1048 | f 421 312 209
1049 | f 423 620 424
1050 | f 423 621 58
1051 | f 60 127 123
1052 | f 321 868 56
1053 | f 56 622 321
1054 | f 217 37 840
1055 | f 864 614 866
1056 | f 37 866 840
1057 | f 623 37 628
1058 | f 624 615 214
1059 | f 429 14 623
1060 | f 626 317 426
1061 | f 624 427 426
1062 | f 422 125 627
1063 | f 214 428 636
1064 | f 217 215 37
1065 | f 629 215 324
1066 | f 324 63 629
1067 | f 429 216 213
1068 | f 429 623 629
1069 | f 64 632 869
1070 | f 432 319 219
1071 | f 319 432 633
1072 | f 633 432 632
1073 | f 15 60 424
1074 | f 424 870 320
1075 | f 15 320 434
1076 | f 930 433 927
1077 | f 319 633 322
1078 | f 442 322 633
1079 | f 435 436 873
1080 | f 435 62 924
1081 | f 428 323 876
1082 | f 876 323 875
1083 | f 324 925 221
1084 | f 325 636 643
1085 | f 222 63 324
1086 | f 63 439 216
1087 | f 637 439 222
1088 | f 440 218 325
1089 | f 16 126 645
1090 | f 631 640 443
1091 | f 38 179 2
1092 | f 2 642 38
1093 | f 66 643 876
1094 | f 325 643 810
1095 | f 440 810 655
1096 | f 639 647 17
1097 | f 926 647 645
1098 | f 647 926 17
1099 | f 872 443 871
1100 | f 872 444 443
1101 | f 177 444 872
1102 | f 881 117 649
1103 | f 178 131 67
1104 | f 437 649 929
1105 | f 812 928 437
1106 | f 651 65 635
1107 | f 635 873 651
1108 | f 874 178 67
1109 | f 445 130 653
1110 | f 653 457 445
1111 | f 130 445 131
1112 | f 649 117 929
1113 | f 2 179 874
1114 | f 133 327 326
1115 | f 460 875 654
1116 | f 133 450 327
1117 | f 810 66 655
1118 | f 811 656 646
1119 | f 129 642 70
1120 | f 70 450 658
1121 | f 129 70 658
1122 | f 18 646 656
1123 | f 132 447 449
1124 | f 454 441 452
1125 | f 448 39 657
1126 | f 657 39 449
1127 | f 659 877 328
1128 | f 329 658 664
1129 | f 646 18 452
1130 | f 668 661 180
1131 | f 181 662 455
1132 | f 662 459 456
1133 | f 457 662 456
1134 | f 662 181 663
1135 | f 815 929 117
1136 | f 459 182 326
1137 | f 182 458 134
1138 | f 226 229 182
1139 | f 230 654 333
1140 | f 664 878 73
1141 | f 73 136 664
1142 | f 665 332 880
1143 | f 20 461 332
1144 | f 134 667 135
1145 | f 667 134 666
1146 | f 226 182 135
1147 | f 817 471 4
1148 | f 227 230 333
1149 | f 229 73 878
1150 | f 229 817 73
1151 | f 934 71 230
1152 | f 664 841 329
1153 | f 841 664 136
1154 | f 842 464 816
1155 | f 467 816 465
1156 | f 669 225 74
1157 | f 660 879 336
1158 | f 880 180 669
1159 | f 463 334 75
1160 | f 334 76 476
1161 | f 465 843 467
1162 | f 843 339 467
1163 | f 818 339 843
1164 | f 670 137 75
1165 | f 335 819 337
1166 | f 469 231 77
1167 | f 996 20 77
1168 | f 241 673 117
1169 | f 881 241 117
1170 | f 999 931 671
1171 | f 932 671 931
1172 | f 470 232 936
1173 | f 471 472 4
1174 | f 228 470 472
1175 | f 672 227 473
1176 | f 934 672 475
1177 | f 19 817 4
1178 | f 19 4 674
1179 | f 234 674 4
1180 | f 338 71 934
1181 | f 935 474 484
1182 | f 138 672 342
1183 | f 234 939 79
1184 | f 674 79 236
1185 | f 818 475 344
1186 | f 183 476 675
1187 | f 844 339 818
1188 | f 477 844 687
1189 | f 80 670 235
1190 | f 80 235 21
1191 | f 844 477 478
1192 | f 676 933 478
1193 | f 479 231 480
1194 | f 480 933 937
1195 | f 677 480 937
1196 | f 479 996 231
1197 | f 681 881 1000
1198 | f 21 235 341
1199 | f 486 882 477
1200 | f 882 486 690
1201 | f 845 882 821
1202 | f 691 679 678
1203 | f 184 932 340
1204 | f 484 820 680
1205 | f 820 677 5
1206 | f 679 5 677
1207 | f 671 932 184
1208 | f 680 683 682
1209 | f 483 683 495
1210 | f 942 673 241
1211 | f 83 685 684
1212 | f 342 343 138
1213 | f 79 940 236
1214 | f 83 940 685
1215 | f 938 140 242
1216 | f 84 344 243
1217 | f 341 183 941
1218 | f 675 236 938
1219 | f 242 941 938
1220 | f 84 486 687
1221 | f 684 139 83
1222 | f 139 684 485
1223 | f 138 343 347
1224 | f 140 346 242
1225 | f 688 140 83
1226 | f 240 688 239
1227 | f 488 345 347
1228 | f 489 242 346
1229 | f 822 242 246
1230 | f 997 341 822
1231 | f 689 997 492
1232 | f 944 496 885
1233 | f 22 493 691
1234 | f 244 493 497
1235 | f 494 680 5
1236 | f 694 485 495
1237 | f 702 945 823
1238 | f 943 238 692
1239 | f 692 238 507
1240 | f 507 825 692
1241 | f 825 22 692
1242 | f 693 497 825
1243 | f 498 500 694
1244 | f 694 502 487
1245 | f 503 501 948
1246 | f 847 347 947
1247 | f 347 847 849
1248 | f 695 700 696
1249 | f 488 347 849
1250 | f 824 488 950
1251 | f 490 488 82
1252 | f 847 947 949
1253 | f 949 947 508
1254 | f 847 949 87
1255 | f 700 948 247
1256 | f 699 142 247
1257 | f 848 142 826
1258 | f 950 849 87
1259 | f 87 849 847
1260 | f 143 40 510
1261 | f 703 348 354
1262 | f 505 504 143
1263 | f 507 701 953
1264 | f 693 350 499
1265 | f 145 499 350
1266 | f 349 499 145
1267 | f 499 349 141
1268 | f 146 141 349
1269 | f 351 349 145
1270 | f 351 146 349
1271 | f 952 245 150
1272 | f 150 245 956
1273 | f 25 951 248
1274 | f 888 25 248
1275 | f 351 185 249
1276 | f 951 186 185
1277 | f 186 951 25
1278 | f 681 716 960
1279 | f 954 146 351
1280 | f 352 351 249
1281 | f 954 352 708
1282 | f 511 890 250
1283 | f 893 949 148
1284 | f 148 949 24
1285 | f 826 142 705
1286 | f 827 705 142
1287 | f 705 827 511
1288 | f 705 511 41
1289 | f 353 23 87
1290 | f 353 87 893
1291 | f 826 510 40
1292 | f 354 147 891
1293 | f 892 358 356
1294 | f 892 891 358
1295 | f 508 6 24
1296 | f 90 253 515
1297 | f 41 253 512
1298 | f 26 353 893
1299 | f 26 893 148
1300 | f 513 955 251
1301 | f 850 512 517
1302 | f 513 850 517
1303 | f 357 355 955
1304 | f 357 955 513
1305 | f 359 254 358
1306 | f 150 521 828
1307 | f 524 42 952
1308 | f 249 186 187
1309 | f 252 514 707
1310 | f 360 514 957
1311 | f 708 360 255
1312 | f 89 255 360
1313 | f 515 253 250
1314 | f 711 515 255
1315 | f 957 252 151
1316 | f 89 7 526
1317 | f 363 711 260
1318 | f 24 894 148
1319 | f 512 253 516
1320 | f 90 516 253
1321 | f 516 363 95
1322 | f 256 26 894
1323 | f 95 519 517
1324 | f 364 88 852
1325 | f 365 357 518
1326 | f 365 518 96
1327 | f 959 91 712
1328 | f 270 522 713
1329 | f 519 188 518
1330 | f 523 519 95
1331 | f 188 523 99
1332 | f 852 522 189
1333 | f 724 189 270
1334 | f 91 959 828
1335 | f 714 709 93
1336 | f 257 153 93
1337 | f 262 714 153
1338 | f 524 828 718
1339 | f 42 524 718
1340 | f 720 715 525
1341 | f 526 366 362
1342 | f 266 715 720
1343 | f 717 366 528
1344 | f 263 717 528
1345 | f 256 829 269
1346 | f 262 719 192
1347 | f 266 719 721
1348 | f 266 721 722
1349 | f 961 964 965
1350 | f 535 43 369
1351 | f 269 829 529
1352 | f 529 829 734
1353 | f 895 8 98
1354 | f 270 713 966
1355 | f 99 523 8
1356 | f 371 99 8
1357 | f 831 371 895
1358 | f 729 264 99
1359 | f 532 726 727
1360 | f 267 262 532
1361 | f 267 532 968
1362 | f 538 533 831
1363 | f 530 372 728
1364 | f 541 729 830
1365 | f 732 532 534
1366 | f 367 962 900
1367 | f 968 273 733
1368 | f 732 273 968
1369 | f 535 721 536
1370 | f 970 536 735
1371 | f 970 373 536
1372 | f 158 964 851
1373 | f 831 370 969
1374 | f 897 372 966
1375 | f 966 269 529
1376 | f 897 966 529
1377 | f 737 277 736
1378 | f 373 970 736
1379 | f 272 734 374
1380 | f 374 854 272
1381 | f 274 277 752
1382 | f 277 737 752
1383 | f 378 752 737
1384 | f 752 101 274
1385 | f 101 379 538
1386 | f 740 541 738
1387 | f 742 741 748
1388 | f 27 743 899
1389 | f 743 27 900
1390 | f 273 375 543
1391 | f 543 375 746
1392 | f 971 739 546
1393 | f 279 971 755
1394 | f 746 542 376
1395 | f 542 747 28
1396 | f 376 542 28
1397 | f 750 832 543
1398 | f 750 543 746
1399 | f 833 550 157
1400 | f 901 978 851
1401 | f 832 545 544
1402 | f 545 832 750
1403 | f 973 158 978
1404 | f 737 276 377
1405 | f 547 751 380
1406 | f 278 194 103
1407 | f 755 546 278
1408 | f 552 753 159
1409 | f 280 974 751
1410 | f 104 974 763
1411 | f 104 283 974
1412 | f 902 103 854
1413 | f 854 765 902
1414 | f 30 283 284
1415 | f 757 30 556
1416 | f 768 105 758
1417 | f 755 557 279
1418 | f 31 548 758
1419 | f 31 758 105
1420 | f 551 833 549
1421 | f 549 28 903
1422 | f 903 760 549
1423 | f 551 549 976
1424 | f 193 853 44
1425 | f 761 551 976
1426 | f 161 31 105
1427 | f 383 105 835
1428 | f 105 383 771
1429 | f 771 975 161
1430 | f 976 760 195
1431 | f 856 762 555
1432 | f 384 762 554
1433 | f 763 382 106
1434 | f 104 764 283
1435 | f 764 284 283
1436 | f 764 285 766
1437 | f 556 30 767
1438 | f 767 766 560
1439 | f 767 560 559
1440 | f 768 556 835
1441 | f 559 556 767
1442 | f 556 559 835
1443 | f 558 557 756
1444 | f 557 381 160
1445 | f 381 557 558
1446 | f 980 978 983
1447 | f 766 289 560
1448 | f 289 285 288
1449 | f 285 106 32
1450 | f 774 285 32
1451 | f 563 906 570
1452 | f 559 560 46
1453 | f 837 46 289
1454 | f 561 46 837
1455 | f 979 561 9
1456 | f 562 47 769
1457 | f 165 563 570
1458 | f 769 47 165
1459 | f 9 857 979
1460 | f 383 857 107
1461 | f 771 166 35
1462 | f 907 566 858
1463 | f 904 771 35
1464 | f 553 858 290
1465 | f 385 290 162
1466 | f 773 385 910
1467 | f 982 759 977
1468 | f 772 32 382
1469 | f 772 382 384
1470 | f 34 287 286
1471 | f 34 286 163
1472 | f 34 908 287
1473 | f 568 904 775
1474 | f 910 386 773
1475 | f 909 773 386
1476 | f 581 386 776
1477 | f 386 777 909
1478 | f 33 777 386
1479 | f 837 288 164
1480 | f 164 777 292
1481 | f 573 292 777
1482 | f 575 387 906
1483 | f 779 570 387
1484 | f 9 571 388
1485 | f 781 388 571
1486 | f 572 769 165
1487 | f 389 857 388
1488 | f 9 388 857
1489 | f 576 389 388
1490 | f 770 565 291
1491 | f 163 770 291
1492 | f 778 786 981
1493 | f 779 387 575
1494 | f 574 168 981
1495 | f 781 168 111
1496 | f 780 779 917
1497 | f 576 388 781
1498 | f 988 390 196
1499 | f 395 196 780
1500 | f 395 780 787
1501 | f 585 782 577
1502 | f 391 112 783
1503 | f 167 567 294
1504 | f 110 579 580
1505 | f 581 776 569
1506 | f 392 581 582
1507 | f 569 579 582
1508 | f 110 582 579
1509 | f 293 392 110
1510 | f 392 33 581
1511 | f 293 583 392
1512 | f 575 985 400
1513 | f 391 783 912
1514 | f 915 912 783
1515 | f 298 393 784
1516 | f 912 984 775
1517 | f 293 110 399
1518 | f 901 1000 199
1519 | f 999 982 584
1520 | f 982 977 984
1521 | f 114 786 583
1522 | f 785 293 991
1523 | f 991 589 785
1524 | f 983 990 985
1525 | f 197 394 574
1526 | f 860 575 400
1527 | f 917 860 794
1528 | f 168 169 111
1529 | f 986 394 49
1530 | f 780 296 787
1531 | f 917 295 296
1532 | f 170 111 169
1533 | f 987 170 989
1534 | f 48 297 988
1535 | f 109 297 788
1536 | f 171 170 169
1537 | f 986 171 169
1538 | f 49 394 299
1539 | f 300 295 914
1540 | f 295 794 914
1541 | f 397 170 171
1542 | f 397 115 174
1543 | f 302 396 989
1544 | f 404 302 397
1545 | f 791 587 789
1546 | f 597 792 587
1547 | f 915 783 398
1548 | f 588 792 597
1549 | f 803 859 588
1550 | f 596 984 912
1551 | f 591 198 993
1552 | f 113 793 197
1553 | f 793 916 173
1554 | f 49 299 173
1555 | f 992 796 916
1556 | f 593 916 796
1557 | f 796 992 591
1558 | f 403 401 410
1559 | f 402 410 10
1560 | f 605 799 594
1561 | f 595 594 914
1562 | f 174 404 397
1563 | f 301 799 605
1564 | f 800 301 605
1565 | f 303 302 404
1566 | f 116 201 404
1567 | f 36 597 802
1568 | f 802 801 119
1569 | f 588 36 918
1570 | f 590 118 918
1571 | f 598 599 590
1572 | f 918 53 598
1573 | f 53 918 802
1574 | f 599 795 590
1575 | f 600 413 200
1576 | f 798 797 601
1577 | f 603 797 600
1578 | f 407 603 602
1579 | f 603 600 602
1580 | f 603 407 804
1581 | f 172 406 862
1582 | f 52 604 601
1583 | f 601 804 52
1584 | f 604 305 410
1585 | f 919 415 606
1586 | f 607 411 306
1587 | f 606 119 800
1588 | f 611 606 416
1589 | f 50 307 119
1590 | f 51 307 50
1591 | f 307 205 838
1592 | f 204 805 308
1593 | f 613 51 50
1594 | f 51 613 315
1595 | f 51 315 203
1596 | f 412 208 204
1597 | f 204 418 175
1598 | f 602 600 200
1599 | f 310 200 861
1600 | f 11 206 863
1601 | f 206 121 863
1602 | f 414 121 808
1603 | f 612 611 416
1604 | f 609 209 922
1605 | f 421 614 312
1606 | f 316 868 806
1607 | f 121 614 864
1608 | f 121 864 313
1609 | f 615 202 210
1610 | f 311 314 55
1611 | f 425 625 313
1612 | f 315 122 203
1613 | f 626 12 315
1614 | f 315 12 122
1615 | f 12 125 122
1616 | f 419 54 839
1617 | f 839 203 419
1618 | f 419 122 923
1619 | f 807 861 617
1620 | f 616 861 54
1621 | f 617 616 618
1622 | f 618 619 617
1623 | f 423 58 807
1624 | f 420 807 58
1625 | f 58 421 420
1626 | f 211 418 208
1627 | f 923 422 212
1628 | f 423 619 620
1629 | f 619 423 617
1630 | f 212 619 618
1631 | f 619 212 620
1632 | f 212 219 620
1633 | f 584 433 931
1634 | f 58 123 421
1635 | f 621 423 424
1636 | f 127 867 123
1637 | f 867 840 866
1638 | f 127 840 867
1639 | f 13 615 806
1640 | f 321 438 868
1641 | f 866 37 864
1642 | f 425 37 623
1643 | f 624 426 57
1644 | f 625 14 314
1645 | f 59 426 427
1646 | f 417 213 124
1647 | f 213 417 14
1648 | f 59 12 626
1649 | f 12 59 627
1650 | f 318 627 59
1651 | f 12 627 125
1652 | f 217 128 215
1653 | f 430 630 61
1654 | f 429 629 63
1655 | f 427 430 176
1656 | f 61 638 430
1657 | f 176 430 638
1658 | f 318 431 627
1659 | f 176 318 59
1660 | f 631 176 218
1661 | f 64 431 631
1662 | f 212 869 219
1663 | f 431 869 422
1664 | f 431 422 627
1665 | f 431 64 869
1666 | f 869 632 432
1667 | f 920 865 927
1668 | f 320 870 319
1669 | f 15 127 60
1670 | f 424 320 15
1671 | f 15 434 924
1672 | f 924 434 435
1673 | f 928 321 437
1674 | f 127 924 128
1675 | f 809 632 64
1676 | f 632 809 442
1677 | f 442 809 443
1678 | f 442 443 444
1679 | f 223 634 220
1680 | f 436 223 873
1681 | f 128 924 62
1682 | f 873 635 435
1683 | f 928 438 321
1684 | f 925 65 221
1685 | f 63 222 439
1686 | f 325 638 61
1687 | f 644 218 440
1688 | f 647 639 16
1689 | f 642 637 221
1690 | f 65 38 221
1691 | f 642 221 38
1692 | f 643 66 810
1693 | f 810 440 325
1694 | f 644 871 640
1695 | f 644 132 871
1696 | f 441 1 639
1697 | f 927 813 930
1698 | f 441 927 1
1699 | f 220 648 130
1700 | f 648 448 130
1701 | f 873 650 178
1702 | f 220 873 223
1703 | f 650 131 178
1704 | f 651 178 874
1705 | f 812 875 323
1706 | f 454 813 441
1707 | f 653 652 457
1708 | f 814 67 456
1709 | f 456 459 814
1710 | f 437 929 812
1711 | f 459 326 814
1712 | f 874 327 2
1713 | f 66 877 655
1714 | f 877 66 460
1715 | f 129 656 811
1716 | f 658 656 129
1717 | f 655 446 440
1718 | f 446 655 68
1719 | f 447 446 68
1720 | f 447 69 453
1721 | f 452 441 17
1722 | f 449 39 872
1723 | f 872 132 449
1724 | f 328 877 460
1725 | f 230 328 654
1726 | f 466 658 329
1727 | f 68 224 451
1728 | f 659 464 224
1729 | f 224 464 451
1730 | f 658 466 18
1731 | f 451 69 447
1732 | f 464 842 72
1733 | f 657 661 652
1734 | f 657 330 661
1735 | f 69 3 453
1736 | f 3 225 180
1737 | f 454 331 813
1738 | f 457 455 662
1739 | f 661 668 181
1740 | f 662 663 458
1741 | f 663 134 458
1742 | f 929 815 333
1743 | f 458 182 459
1744 | f 133 229 878
1745 | f 878 664 450
1746 | f 181 461 663
1747 | f 181 668 332
1748 | f 665 20 332
1749 | f 667 228 471
1750 | f 667 471 226
1751 | f 815 227 333
1752 | f 659 71 465
1753 | f 841 137 466
1754 | f 136 463 841
1755 | f 841 463 75
1756 | f 465 464 659
1757 | f 465 71 843
1758 | f 3 72 225
1759 | f 669 469 880
1760 | f 880 332 180
1761 | f 136 19 463
1762 | f 337 467 335
1763 | f 467 339 335
1764 | f 339 844 335
1765 | f 879 137 670
1766 | f 670 336 879
1767 | f 476 670 75
1768 | f 336 468 660
1769 | f 233 468 336
1770 | f 819 469 669
1771 | f 819 669 74
1772 | f 819 933 469
1773 | f 340 331 468
1774 | f 77 20 665
1775 | f 77 665 880
1776 | f 673 473 815
1777 | f 228 472 471
1778 | f 472 936 81
1779 | f 815 473 227
1780 | f 234 4 472
1781 | f 936 935 482
1782 | f 342 673 942
1783 | f 81 482 78
1784 | f 81 78 939
1785 | f 473 342 672
1786 | f 674 234 79
1787 | f 476 76 675
1788 | f 687 818 344
1789 | f 844 818 687
1790 | f 80 336 670
1791 | f 819 478 933
1792 | f 478 819 335
1793 | f 335 844 478
1794 | f 676 478 882
1795 | f 80 233 336
1796 | f 231 933 480
1797 | f 933 676 937
1798 | f 479 474 996
1799 | f 479 481 484
1800 | f 341 883 21
1801 | f 183 341 235
1802 | f 676 882 845
1803 | f 845 937 676
1804 | f 937 845 679
1805 | f 679 845 678
1806 | f 481 820 484
1807 | f 999 671 889
1808 | f 935 682 482
1809 | f 682 483 482
1810 | f 935 484 682
1811 | f 682 484 680
1812 | f 78 685 939
1813 | f 78 483 684
1814 | f 685 940 79
1815 | f 486 477 687
1816 | f 241 946 942
1817 | f 485 694 487
1818 | f 139 487 239
1819 | f 139 239 688
1820 | f 688 346 140
1821 | f 240 346 688
1822 | f 489 246 242
1823 | f 490 82 491
1824 | f 823 491 82
1825 | f 884 678 821
1826 | f 846 884 690
1827 | f 945 238 884
1828 | f 689 496 998
1829 | f 689 998 883
1830 | f 884 238 943
1831 | f 5 493 494
1832 | f 22 497 493
1833 | f 946 241 681
1834 | f 889 671 184
1835 | f 495 683 494
1836 | f 945 85 238
1837 | f 702 85 945
1838 | f 492 506 689
1839 | f 506 496 689
1840 | f 952 184 885
1841 | f 244 497 498
1842 | f 502 500 501
1843 | f 500 141 501
1844 | f 946 886 942
1845 | f 503 487 502
1846 | f 501 503 502
1847 | f 697 489 696
1848 | f 702 82 348
1849 | f 501 698 948
1850 | f 698 247 948
1851 | f 698 141 704
1852 | f 247 698 699
1853 | f 704 699 698
1854 | f 142 700 247
1855 | f 824 950 348
1856 | f 348 703 702
1857 | f 23 348 950
1858 | f 85 702 701
1859 | f 703 701 702
1860 | f 701 703 892
1861 | f 356 701 892
1862 | f 505 887 506
1863 | f 701 356 953
1864 | f 953 951 86
1865 | f 350 185 145
1866 | f 716 681 1000
1867 | f 146 704 141
1868 | f 946 710 886
1869 | f 681 710 946
1870 | f 710 508 886
1871 | f 248 356 358
1872 | f 951 185 86
1873 | f 186 25 514
1874 | f 827 699 890
1875 | f 827 890 511
1876 | f 508 24 949
1877 | f 826 705 251
1878 | f 251 510 826
1879 | f 354 891 703
1880 | f 510 955 144
1881 | f 955 355 144
1882 | f 891 892 703
1883 | f 511 253 41
1884 | f 41 512 850
1885 | f 251 850 513
1886 | f 147 706 149
1887 | f 353 706 92
1888 | f 353 88 706
1889 | f 355 357 956
1890 | f 518 357 513
1891 | f 357 365 91
1892 | f 248 358 254
1893 | f 888 707 514
1894 | f 524 952 150
1895 | f 957 514 252
1896 | f 708 255 250
1897 | f 187 352 249
1898 | f 187 360 708
1899 | f 360 957 7
1900 | f 361 252 707
1901 | f 152 958 359
1902 | f 258 93 361
1903 | f 361 93 709
1904 | f 151 7 957
1905 | f 151 252 709
1906 | f 265 151 94
1907 | f 89 526 362
1908 | f 711 89 260
1909 | f 960 964 710
1910 | f 90 711 363
1911 | f 6 961 24
1912 | f 24 961 527
1913 | f 26 256 522
1914 | f 517 518 513
1915 | f 519 518 517
1916 | f 149 364 520
1917 | f 359 149 152
1918 | f 261 190 520
1919 | f 95 98 8
1920 | f 191 717 98
1921 | f 713 522 256
1922 | f 523 95 8
1923 | f 189 190 261
1924 | f 189 896 190
1925 | f 96 959 712
1926 | f 264 959 96
1927 | f 959 967 828
1928 | f 258 257 93
1929 | f 42 367 898
1930 | f 94 715 265
1931 | f 94 714 525
1932 | f 714 262 525
1933 | f 526 368 366
1934 | f 526 265 715
1935 | f 963 528 368
1936 | f 964 961 710
1937 | f 259 717 191
1938 | f 362 366 259
1939 | f 719 720 192
1940 | f 719 266 720
1941 | f 369 963 722
1942 | f 43 263 369
1943 | f 535 268 43
1944 | f 263 268 370
1945 | f 370 895 98
1946 | f 270 966 372
1947 | f 895 371 8
1948 | f 533 830 371
1949 | f 724 723 189
1950 | f 270 372 724
1951 | f 530 724 372
1952 | f 729 725 264
1953 | f 896 531 97
1954 | f 896 723 531
1955 | f 154 723 530
1956 | f 271 531 154
1957 | f 967 962 828
1958 | f 153 726 262
1959 | f 271 726 97
1960 | f 262 726 532
1961 | f 538 738 830
1962 | f 897 540 728
1963 | f 730 271 154
1964 | f 730 534 271
1965 | f 731 741 730
1966 | f 730 741 534
1967 | f 532 732 968
1968 | f 733 102 721
1969 | f 536 373 535
1970 | f 721 535 722
1971 | f 102 536 721
1972 | f 964 158 965
1973 | f 535 373 268
1974 | f 965 734 829
1975 | f 374 734 965
1976 | f 272 529 734
1977 | f 735 537 970
1978 | f 544 970 537
1979 | f 832 544 537
1980 | f 851 978 158
1981 | f 276 736 544
1982 | f 276 737 736
1983 | f 529 272 100
1984 | f 897 100 540
1985 | f 272 194 100
1986 | f 538 379 738
1987 | f 274 101 538
1988 | f 738 379 740
1989 | f 739 731 728
1990 | f 744 534 741
1991 | f 741 742 745
1992 | f 742 747 745
1993 | f 273 732 375
1994 | f 732 744 375
1995 | f 375 275 746
1996 | f 193 898 367
1997 | f 273 543 102
1998 | f 543 832 537
1999 | f 739 971 748
2000 | f 546 739 540
2001 | f 899 29 27
2002 | f 379 548 740
2003 | f 742 748 747
2004 | f 748 749 747
2005 | f 376 833 157
2006 | f 157 550 552
2007 | f 159 545 750
2008 | f 552 159 750
2009 | f 377 545 280
2010 | f 159 280 545
2011 | f 737 751 378
2012 | f 751 974 380
2013 | f 855 752 547
2014 | f 194 278 546
2015 | f 753 754 159
2016 | f 974 280 754
2017 | f 763 974 754
2018 | f 278 281 755
2019 | f 556 758 757
2020 | f 556 768 758
2021 | f 31 161 29
2022 | f 749 279 972
2023 | f 972 160 282
2024 | f 29 161 156
2025 | f 551 856 552
2026 | f 759 982 999
2027 | f 903 282 760
2028 | f 45 282 160
2029 | f 907 45 566
2030 | f 553 905 907
2031 | f 553 554 195
2032 | f 853 975 568
2033 | f 762 856 554
2034 | f 978 980 973
2035 | f 763 285 104
2036 | f 106 285 763
2037 | f 563 902 765
2038 | f 284 766 767
2039 | f 902 563 47
2040 | f 558 756 562
2041 | f 980 906 765
2042 | f 46 561 559
2043 | f 561 979 559
2044 | f 835 857 383
2045 | f 565 564 558
2046 | f 562 769 565
2047 | f 564 566 381
2048 | f 770 286 564
2049 | f 564 286 566
2050 | f 858 566 287
2051 | f 975 771 904
2052 | f 858 553 907
2053 | f 908 858 287
2054 | f 772 385 773
2055 | f 772 909 32
2056 | f 773 909 772
2057 | f 909 774 32
2058 | f 391 35 112
2059 | f 908 836 162
2060 | f 568 775 977
2061 | f 910 385 162
2062 | f 33 573 777
2063 | f 575 980 983
2064 | f 777 164 288
2065 | f 778 108 292
2066 | f 980 575 906
2067 | f 571 837 108
2068 | f 857 389 107
2069 | f 572 291 769
2070 | f 572 196 291
2071 | f 291 390 163
2072 | f 389 782 166
2073 | f 166 782 35
2074 | f 981 108 778
2075 | f 576 577 389
2076 | f 196 390 291
2077 | f 782 585 112
2078 | f 34 390 294
2079 | f 567 167 579
2080 | f 294 578 167
2081 | f 581 569 582
2082 | f 110 392 582
2083 | f 33 392 573
2084 | f 573 583 786
2085 | f 586 783 112
2086 | f 393 110 580
2087 | f 580 578 913
2088 | f 393 298 399
2089 | f 991 293 399
2090 | f 785 114 583
2091 | f 114 785 113
2092 | f 589 113 785
2093 | f 113 197 114
2094 | f 169 168 986
2095 | f 168 574 394
2096 | f 787 790 48
2097 | f 586 585 396
2098 | f 987 989 585
2099 | f 578 109 913
2100 | f 297 109 988
2101 | f 171 49 402
2102 | f 402 115 171
2103 | f 300 790 787
2104 | f 300 594 799
2105 | f 115 397 171
2106 | f 791 789 48
2107 | f 48 790 791
2108 | f 301 790 799
2109 | f 396 398 586
2110 | f 397 302 989
2111 | f 302 303 398
2112 | f 587 792 788
2113 | f 995 915 398
2114 | f 859 298 784
2115 | f 792 859 784
2116 | f 792 784 788
2117 | f 792 588 859
2118 | f 589 991 992
2119 | f 992 916 793
2120 | f 172 400 985
2121 | f 400 172 860
2122 | f 993 795 592
2123 | f 592 796 591
2124 | f 797 798 796
2125 | f 401 173 593
2126 | f 401 403 173
2127 | f 402 10 115
2128 | f 306 404 174
2129 | f 800 119 994
2130 | f 201 303 404
2131 | f 994 801 791
2132 | f 994 119 801
2133 | f 597 801 802
2134 | f 398 303 995
2135 | f 995 304 308
2136 | f 995 308 596
2137 | f 838 599 598
2138 | f 413 599 838
2139 | f 405 596 805
2140 | f 601 603 804
2141 | f 862 406 56
2142 | f 798 601 401
2143 | f 604 401 601
2144 | f 316 408 862
2145 | f 207 408 120
2146 | f 305 409 410
2147 | f 11 305 604
2148 | f 201 411 309
2149 | f 802 119 307
2150 | f 412 201 309
2151 | f 805 204 175
2152 | f 602 310 407
2153 | f 807 609 310
2154 | f 207 120 210
2155 | f 414 305 11
2156 | f 863 414 11
2157 | f 415 207 210
2158 | f 808 311 607
2159 | f 613 611 612
2160 | f 317 416 202
2161 | f 922 312 614
2162 | f 120 806 210
2163 | f 615 210 806
2164 | f 313 808 121
2165 | f 313 864 425
2166 | f 615 57 202
2167 | f 426 317 57
2168 | f 417 55 314
2169 | f 54 419 616
2170 | f 617 861 616
2171 | f 649 199 1000
2172 | f 865 920 418
2173 | f 211 865 418
2174 | f 618 923 212
2175 | f 621 123 58
2176 | f 123 621 60
2177 | f 421 123 867
2178 | f 127 217 840
2179 | f 438 13 806
2180 | f 438 806 868
2181 | f 864 37 425
2182 | f 624 57 615
2183 | f 214 615 13
2184 | f 425 14 625
2185 | f 430 427 624
2186 | f 124 213 126
2187 | f 214 13 428
2188 | f 428 13 438
2189 | f 628 629 623
2190 | f 37 215 628
2191 | f 430 624 630
2192 | f 59 427 176
2193 | f 212 422 869
2194 | f 433 920 927
2195 | f 319 870 219
2196 | f 434 320 319
2197 | f 437 321 622
2198 | f 633 632 442
2199 | f 223 436 319
2200 | f 634 322 442
2201 | f 1000 881 649
2202 | f 436 435 434
2203 | f 622 649 437
2204 | f 323 428 438
2205 | f 876 636 428
2206 | f 324 215 925
2207 | f 128 925 215
2208 | f 221 222 324
2209 | f 325 61 636
2210 | f 216 645 126
2211 | f 218 644 640
2212 | f 809 631 443
2213 | f 639 1 641
2214 | f 221 637 222
2215 | f 38 65 179
2216 | f 811 926 637
2217 | f 129 637 642
2218 | f 646 17 926
2219 | f 443 640 871
2220 | f 639 17 441
2221 | f 39 648 177
2222 | f 650 873 220
2223 | f 130 650 220
2224 | f 650 130 131
2225 | f 651 179 65
2226 | f 178 651 873
2227 | f 874 179 651
2228 | f 812 323 928
2229 | f 657 653 448
2230 | f 657 652 653
2231 | f 456 131 445
2232 | f 457 456 445
2233 | f 814 326 874
2234 | f 326 327 874
2235 | f 460 876 875
2236 | f 70 642 2
2237 | f 450 2 327
2238 | f 70 2 450
2239 | f 66 876 460
2240 | f 447 453 449
2241 | f 328 460 654
2242 | f 71 659 328
2243 | f 664 658 450
2244 | f 224 877 659
2245 | f 72 69 451
2246 | f 660 454 452
2247 | f 3 330 453
2248 | f 932 930 331
2249 | f 181 455 661
2250 | f 932 931 930
2251 | f 326 182 133
2252 | f 135 182 134
2253 | f 878 450 133
2254 | f 668 180 332
2255 | f 663 666 134
2256 | f 666 663 461
2257 | f 462 666 461
2258 | f 817 229 226
2259 | f 817 136 73
2260 | f 136 817 19
2261 | f 71 328 230
2262 | f 75 137 841
2263 | f 465 816 464
2264 | f 18 466 137
2265 | f 337 842 816
2266 | f 842 74 225
2267 | f 225 669 180
2268 | f 454 468 331
2269 | f 76 334 19
2270 | f 816 467 337
2271 | f 77 880 469
2272 | f 231 469 933
2273 | f 996 77 231
2274 | f 20 996 232
2275 | f 996 474 232
2276 | f 232 462 20
2277 | f 815 117 673
2278 | f 234 472 81
2279 | f 230 227 934
2280 | f 674 76 19
2281 | f 843 71 338
2282 | f 475 338 934
2283 | f 936 232 474
2284 | f 474 935 936
2285 | f 81 939 234
2286 | f 138 686 672
2287 | f 475 672 686
2288 | f 675 76 236
2289 | f 670 476 235
2290 | f 468 233 340
2291 | f 233 80 998
2292 | f 474 479 484
2293 | f 821 678 845
2294 | f 340 233 998
2295 | f 340 998 944
2296 | f 5 679 691
2297 | f 881 681 241
2298 | f 684 685 78
2299 | f 345 686 138
2300 | f 940 938 236
2301 | f 685 79 939
2302 | f 140 938 83
2303 | f 345 344 686
2304 | f 941 675 938
2305 | f 341 941 822
2306 | f 237 486 84
2307 | f 243 345 488
2308 | f 488 490 243
2309 | f 941 242 822
2310 | f 237 491 846
2311 | f 997 883 341
2312 | f 821 690 884
2313 | f 944 998 496
2314 | f 943 678 884
2315 | f 184 944 885
2316 | f 5 691 493
2317 | f 22 691 943
2318 | f 244 494 493
2319 | f 483 495 485
2320 | f 680 494 683
2321 | f 245 885 496
2322 | f 825 497 22
2323 | f 497 693 498
2324 | f 502 694 500
2325 | f 500 498 499
2326 | f 487 503 239
2327 | f 239 503 948
2328 | f 947 347 343
2329 | f 240 695 346
2330 | f 696 346 695
2331 | f 695 240 239
2332 | f 239 948 695
2333 | f 700 695 948
2334 | f 696 489 346
2335 | f 348 82 824
2336 | f 492 997 246
2337 | f 505 246 504
2338 | f 143 697 40
2339 | f 696 40 697
2340 | f 40 848 826
2341 | f 354 348 23
2342 | f 350 825 507
2343 | f 350 507 86
2344 | f 507 953 86
2345 | f 956 245 887
2346 | f 248 951 953
2347 | f 248 953 356
2348 | f 186 249 185
2349 | f 710 681 960
2350 | f 954 704 146
2351 | f 6 508 710
2352 | f 890 699 704
2353 | f 890 954 250
2354 | f 893 87 949
2355 | f 699 827 142
2356 | f 92 23 353
2357 | f 251 705 41
2358 | f 955 510 251
2359 | f 706 354 92
2360 | f 355 887 144
2361 | f 956 887 355
2362 | f 850 251 41
2363 | f 147 149 359
2364 | f 524 150 828
2365 | f 707 888 254
2366 | f 954 708 250
2367 | f 187 708 352
2368 | f 250 253 511
2369 | f 90 515 711
2370 | f 258 958 152
2371 | f 361 958 258
2372 | f 361 709 252
2373 | f 94 151 709
2374 | f 265 7 151
2375 | f 89 711 255
2376 | f 7 89 360
2377 | f 260 89 362
2378 | f 260 362 259
2379 | f 259 191 260
2380 | f 363 260 191
2381 | f 26 148 894
2382 | f 894 24 527
2383 | f 363 516 90
2384 | f 95 363 191
2385 | f 516 517 512
2386 | f 852 261 364
2387 | f 712 365 96
2388 | f 521 91 828
2389 | f 98 95 191
2390 | f 713 256 269
2391 | f 523 188 519
2392 | f 261 852 189
2393 | f 270 189 522
2394 | f 99 96 188
2395 | f 257 190 896
2396 | f 153 714 93
2397 | f 97 153 257
2398 | f 525 715 94
2399 | f 709 714 94
2400 | f 851 960 716
2401 | f 368 715 266
2402 | f 366 368 528
2403 | f 98 717 263
2404 | f 262 267 719
2405 | f 963 369 528
2406 | f 965 527 961
2407 | f 369 263 528
2408 | f 829 527 965
2409 | f 831 895 370
2410 | f 269 966 713
2411 | f 99 264 96
2412 | f 830 729 99
2413 | f 718 828 962
2414 | f 271 727 726
2415 | f 831 533 371
2416 | f 731 154 530
2417 | f 541 830 738
2418 | f 541 899 729
2419 | f 900 962 743
2420 | f 727 271 534
2421 | f 733 721 267
2422 | f 889 898 759
2423 | f 735 536 102
2424 | f 274 831 969
2425 | f 268 969 370
2426 | f 831 274 538
2427 | f 736 277 155
2428 | f 373 736 155
2429 | f 748 731 739
2430 | f 899 740 548
2431 | f 741 745 744
2432 | f 744 275 375
2433 | f 543 537 102
2434 | f 749 748 971
2435 | f 279 749 971
2436 | f 899 548 29
2437 | f 972 28 747
2438 | f 193 900 853
2439 | f 746 275 542
2440 | f 745 747 542
2441 | f 898 193 759
2442 | f 376 157 746
2443 | f 157 552 750
2444 | f 851 716 901
2445 | f 751 377 280
2446 | f 103 194 272
2447 | f 539 101 752
2448 | f 855 539 752
2449 | f 547 752 378
2450 | f 539 855 757
2451 | f 834 539 757
2452 | f 834 548 379
2453 | f 539 834 379
2454 | f 555 763 753
2455 | f 854 973 765
2456 | f 380 855 547
2457 | f 30 855 380
2458 | f 30 380 283
2459 | f 757 855 30
2460 | f 278 103 281
2461 | f 281 103 902
2462 | f 756 755 281
2463 | f 29 548 31
2464 | f 903 972 282
2465 | f 975 853 156
2466 | f 551 552 550
2467 | f 550 833 551
2468 | f 753 552 555
2469 | f 835 105 768
2470 | f 381 45 160
2471 | f 905 195 760
2472 | f 553 195 905
2473 | f 44 853 568
2474 | f 554 856 761
2475 | f 195 554 761
2476 | f 555 762 382
2477 | f 766 284 764
2478 | f 563 765 906
2479 | f 767 30 284
2480 | f 562 281 47
2481 | f 756 281 562
2482 | f 281 902 47
2483 | f 289 766 285
2484 | f 46 560 289
2485 | f 563 165 47
2486 | f 857 835 559
2487 | f 770 564 565
2488 | f 166 383 107
2489 | f 554 553 290
2490 | f 858 908 162
2491 | f 858 162 290
2492 | f 391 904 35
2493 | f 910 776 386
2494 | f 910 162 836
2495 | f 909 777 774
2496 | f 386 581 33
2497 | f 108 837 164
2498 | f 292 108 164
2499 | f 570 906 387
2500 | f 561 571 9
2501 | f 837 571 561
2502 | f 163 286 770
2503 | f 389 166 107
2504 | f 778 292 573
2505 | f 786 574 981
2506 | f 911 571 981
2507 | f 571 911 781
2508 | f 108 981 571
2509 | f 911 981 168
2510 | f 168 781 911
2511 | f 196 572 780
2512 | f 165 779 780
2513 | f 781 111 576
2514 | f 904 391 775
2515 | f 578 580 167
2516 | f 167 580 579
2517 | f 984 977 775
2518 | f 579 569 836
2519 | f 573 392 583
2520 | f 912 775 391
2521 | f 398 783 586
2522 | f 784 393 580
2523 | f 293 785 583
2524 | f 394 197 299
2525 | f 917 779 860
2526 | f 986 168 394
2527 | f 111 987 585
2528 | f 170 987 111
2529 | f 988 395 48
2530 | f 586 112 585
2531 | f 109 788 913
2532 | f 171 986 49
2533 | f 403 402 49
2534 | f 914 594 300
2535 | f 799 790 300
2536 | f 301 791 790
2537 | f 788 297 587
2538 | f 298 859 803
2539 | f 912 915 596
2540 | f 198 991 399
2541 | f 198 399 298
2542 | f 803 198 298
2543 | f 992 991 198
2544 | f 984 584 982
2545 | f 985 990 172
2546 | f 406 172 990
2547 | f 299 197 793
2548 | f 403 49 173
2549 | f 794 295 917
2550 | f 405 984 596
2551 | f 795 993 118
2552 | f 590 795 118
2553 | f 796 592 797
2554 | f 401 593 798
2555 | f 408 794 172
2556 | f 408 172 862
2557 | f 794 408 914
2558 | f 116 404 306
2559 | f 596 915 995
2560 | f 803 588 118
2561 | f 118 588 918
2562 | f 795 600 797
2563 | f 601 797 603
2564 | f 607 305 414
2565 | f 409 607 10
2566 | f 306 10 607
2567 | f 50 119 611
2568 | f 119 606 611
2569 | f 411 201 116
2570 | f 838 53 307
2571 | f 205 307 51
2572 | f 201 412 304
2573 | f 304 204 308
2574 | f 311 309 411
2575 | f 611 613 50
2576 | f 839 51 203
2577 | f 838 608 413
2578 | f 205 608 838
2579 | f 51 839 205
2580 | f 175 920 405
2581 | f 54 861 200
2582 | f 861 807 310
2583 | f 931 999 584
2584 | f 602 200 310
2585 | f 609 407 310
2586 | f 407 609 921
2587 | f 199 56 406
2588 | f 609 922 921
2589 | f 11 921 206
2590 | f 921 922 206
2591 | f 120 316 806
2592 | f 863 121 414
2593 | f 607 311 411
2594 | f 414 808 607
2595 | f 415 416 606
2596 | f 416 317 612
2597 | f 612 626 613
2598 | f 57 317 202
2599 | f 412 55 208
2600 | f 417 208 55
2601 | f 208 418 204
2602 | f 923 122 125
2603 | f 419 923 618
2604 | f 920 433 405
2605 | f 649 56 199
2606 | f 622 56 649
2607 | f 405 433 584
2608 | f 209 609 420
2609 | f 209 420 421
2610 | f 316 56 868
2611 | f 125 422 923
2612 | f 424 620 870
2613 | f 621 424 60
2614 | f 421 867 866
2615 | f 425 623 14
2616 | f 426 59 626
2617 | f 417 211 208
2618 | f 124 211 417
2619 | f 314 14 417
2620 | f 628 215 629
2621 | f 214 630 624
2622 | f 630 214 61
2623 | f 14 429 213
2624 | f 429 63 216
2625 | f 218 176 638
2626 | f 213 216 126
2627 | f 124 126 16
2628 | f 318 176 631
2629 | f 318 631 431
2630 | f 641 865 211
2631 | f 211 124 641
2632 | f 124 16 641
2633 | f 865 641 1
2634 | f 869 432 219
2635 | f 620 219 870
2636 | f 931 433 930
2637 | f 127 15 924
2638 | f 217 127 128
2639 | f 64 631 809
2640 | f 865 1 927
2641 | f 223 319 322
2642 | f 223 322 634
2643 | f 319 436 434
2644 | f 925 128 62
2645 | f 925 62 635
2646 | f 435 635 62
2647 | f 438 928 323
2648 | f 635 65 925
2649 | f 636 61 214
2650 | f 637 926 439
2651 | f 638 325 218
2652 | f 216 439 645
2653 | f 926 645 439
2654 | f 645 647 16
2655 | f 218 640 631
2656 | f 641 16 639
2657 | f 636 876 643
2658 | f 811 637 129
2659 | f 811 646 926
2660 | f 132 644 440
2661 | f 132 440 446
2662 | f 871 132 872
2663 | f 634 442 177
2664 | f 442 444 177
2665 | f 177 872 39
2666 | f 927 441 813
2667 | f 634 648 220
2668 | f 177 648 634
2669 | f 648 39 448
2670 | f 448 653 130
2671 | f 67 131 456
2672 | f 874 67 814
2673 | f 875 812 654
2674 | f 812 333 654
2675 | f 655 877 224
2676 | f 655 224 68
2677 | f 17 646 452
2678 | f 658 18 656
2679 | f 132 446 447
2680 | f 330 449 453
2681 | f 449 330 657
2682 | f 68 451 447
2683 | f 451 464 72
2684 | f 3 69 72
2685 | f 452 18 660
2686 | f 18 879 660
2687 | f 180 330 3
2688 | f 330 180 661
2689 | f 813 331 930
2690 | f 457 652 455
2691 | f 661 455 652
2692 | f 459 662 458
2693 | f 929 333 812
2694 | f 182 229 133
2695 | f 181 332 461
2696 | f 462 461 20
2697 | f 228 667 666
2698 | f 135 667 226
2699 | f 471 817 226
2700 | f 329 841 466
2701 | f 137 879 18
2702 | f 72 842 225
2703 | f 74 842 337
2704 | f 454 660 468
2705 | f 334 463 19
2706 | f 334 476 75
2707 | f 74 337 819
2708 | f 666 470 228
2709 | f 470 666 462
2710 | f 470 462 232
2711 | f 673 342 473
2712 | f 470 936 472
2713 | f 934 227 672
2714 | f 843 338 818
2715 | f 81 936 482
2716 | f 674 236 76
2717 | f 475 818 338
2718 | f 475 686 344
2719 | f 476 183 235
2720 | f 882 478 477
2721 | f 932 331 340
2722 | f 481 479 480
2723 | f 480 677 481
2724 | f 481 677 820
2725 | f 882 690 821
2726 | f 21 998 80
2727 | f 21 883 998
2728 | f 937 679 677
2729 | f 680 820 5
2730 | f 483 682 683
2731 | f 942 343 342
2732 | f 78 482 483
2733 | f 485 684 483
2734 | f 83 938 940
2735 | f 344 345 243
2736 | f 675 941 183
2737 | f 344 84 687
2738 | f 690 486 237
2739 | f 942 886 343
2740 | f 485 487 139
2741 | f 347 345 138
2742 | f 688 83 139
2743 | f 690 237 846
2744 | f 490 237 84
2745 | f 84 243 490
2746 | f 237 490 491
2747 | f 823 846 491
2748 | f 883 997 689
2749 | f 246 997 822
2750 | f 823 945 846
2751 | f 945 884 846
2752 | f 678 943 691
2753 | f 184 340 944
2754 | f 494 244 495
2755 | f 244 694 495
2756 | f 492 505 506
2757 | f 496 506 245
2758 | f 943 692 22
2759 | f 507 85 701
2760 | f 238 85 507
2761 | f 693 825 350
2762 | f 499 498 693
2763 | f 244 498 694
2764 | f 499 141 500
2765 | f 343 886 947
2766 | f 950 488 849
2767 | f 489 504 246
2768 | f 504 489 697
2769 | f 82 488 824
2770 | f 82 702 823
2771 | f 492 246 505
2772 | f 698 501 141
2773 | f 886 508 947
2774 | f 696 700 848
2775 | f 700 142 848
2776 | f 950 87 23
2777 | f 40 696 848
2778 | f 505 144 887
2779 | f 697 143 504
2780 | f 505 143 144
2781 | f 506 887 245
2782 | f 952 885 245
2783 | f 185 350 86
2784 | f 889 184 509
2785 | f 184 952 509
2786 | f 952 42 509
2787 | f 351 145 185
2788 | f 352 954 351
2789 | f 704 954 890
2790 | f 354 23 92
2791 | f 354 706 147
2792 | f 143 510 144
2793 | f 891 147 358
2794 | f 26 88 353
2795 | f 706 88 364
2796 | f 364 149 706
2797 | f 956 357 91
2798 | f 358 147 359
2799 | f 521 150 956
2800 | f 956 91 521
2801 | f 248 254 888
2802 | f 958 254 359
2803 | f 254 958 707
2804 | f 186 514 187
2805 | f 888 514 25
2806 | f 360 187 514
2807 | f 515 250 255
2808 | f 707 958 361
2809 | f 889 509 42
2810 | f 526 7 265
2811 | f 710 961 6
2812 | f 26 522 88
2813 | f 95 517 516
2814 | f 520 364 261
2815 | f 88 522 852
2816 | f 365 712 91
2817 | f 520 152 149
2818 | f 520 190 152
2819 | f 257 152 190
2820 | f 152 257 258
2821 | f 518 188 96
2822 | f 959 264 725
2823 | f 97 257 896
2824 | f 718 367 42
2825 | f 525 262 192
2826 | f 192 720 525
2827 | f 889 42 898
2828 | f 526 715 368
2829 | f 259 366 717
2830 | f 829 894 527
2831 | f 894 829 256
2832 | f 721 719 267
2833 | f 851 964 960
2834 | f 759 999 889
2835 | f 368 266 963
2836 | f 963 266 722
2837 | f 369 722 535
2838 | f 43 268 263
2839 | f 263 370 98
2840 | f 371 830 99
2841 | f 189 723 896
2842 | f 724 530 723
2843 | f 531 271 97
2844 | f 723 154 531
2845 | f 725 967 959
2846 | f 743 967 725
2847 | f 153 97 726
2848 | f 830 533 538
2849 | f 897 728 372
2850 | f 731 530 728
2851 | f 725 729 899
2852 | f 730 154 731
2853 | f 967 743 962
2854 | f 899 743 725
2855 | f 534 532 727
2856 | f 534 744 732
2857 | f 718 962 367
2858 | f 968 733 267
2859 | f 733 273 102
2860 | f 374 965 158
2861 | f 268 373 155
2862 | f 268 155 969
2863 | f 155 277 969
2864 | f 969 277 274
2865 | f 529 100 897
2866 | f 735 102 537
2867 | f 544 736 970
2868 | f 854 374 158
2869 | f 540 100 546
2870 | f 539 379 101
2871 | f 540 739 728
2872 | f 740 899 541
2873 | f 731 748 741
2874 | f 744 745 275
2875 | f 193 367 900
2876 | f 546 755 971
2877 | f 834 758 548
2878 | f 747 749 972
2879 | f 156 900 27
2880 | f 900 156 853
2881 | f 27 29 156
2882 | f 745 542 275
2883 | f 549 376 28
2884 | f 746 157 750
2885 | f 544 545 276
2886 | f 158 973 854
2887 | f 751 737 377
2888 | f 276 545 377
2889 | f 272 854 103
2890 | f 751 547 378
2891 | f 194 546 100
2892 | f 280 159 754
2893 | f 754 753 763
2894 | f 974 283 380
2895 | f 757 758 834
2896 | f 557 755 756
2897 | f 160 279 557
2898 | f 972 279 160
2899 | f 975 156 161
2900 | f 376 549 833
2901 | f 972 903 28
2902 | f 976 549 760
2903 | f 193 44 759
2904 | f 551 761 856
2905 | f 555 552 856
2906 | f 716 1000 901
2907 | f 161 105 771
2908 | f 282 45 760
2909 | f 566 45 381
2910 | f 195 761 976
2911 | f 45 905 760
2912 | f 45 907 905
2913 | f 44 977 759
2914 | f 904 568 975
2915 | f 382 762 384
2916 | f 763 555 382
2917 | f 382 32 106
2918 | f 973 980 765
2919 | f 104 285 764
2920 | f 288 285 774
2921 | f 289 288 837
2922 | f 559 979 857
2923 | f 558 564 381
2924 | f 562 565 558
2925 | f 771 383 166
2926 | f 287 566 286
2927 | f 44 568 977
2928 | f 385 384 290
2929 | f 384 385 772
2930 | f 290 384 554
2931 | f 901 983 978
2932 | f 567 908 34
2933 | f 908 567 836
2934 | f 569 910 836
2935 | f 776 910 569
2936 | f 774 777 288
2937 | f 570 779 165
2938 | f 565 769 291
2939 | f 35 782 112
2940 | f 778 573 786
2941 | f 572 165 780
2942 | f 111 577 576
2943 | f 111 585 577
2944 | f 196 395 988
2945 | f 389 577 782
2946 | f 34 294 567
2947 | f 163 390 34
2948 | f 390 988 109
2949 | f 390 109 294
2950 | f 294 109 578
2951 | f 567 579 836
2952 | f 983 985 575
2953 | f 913 784 580
2954 | f 784 913 788
2955 | f 393 399 110
2956 | f 901 199 983
2957 | f 199 990 983
2958 | f 786 114 197
2959 | f 786 197 574
2960 | f 779 575 860
2961 | f 780 917 296
2962 | f 395 787 48
2963 | f 585 989 396
2964 | f 48 789 297
2965 | f 787 296 300
2966 | f 296 295 300
2967 | f 170 397 989
2968 | f 302 398 396
2969 | f 789 587 297
2970 | f 801 587 791
2971 | f 597 587 801
2972 | f 198 803 993
2973 | f 992 198 591
2974 | f 589 992 793
2975 | f 793 113 589
2976 | f 793 173 299
2977 | f 860 172 794
2978 | f 993 592 591
2979 | f 803 118 993
2980 | f 199 406 990
2981 | f 584 984 405
2982 | f 593 796 798
2983 | f 173 916 593
2984 | f 408 595 914
2985 | f 402 403 410
2986 | f 594 595 919
2987 | f 919 605 594
2988 | f 174 115 10
2989 | f 10 306 174
2990 | f 301 800 994
2991 | f 201 304 303
2992 | f 791 301 994
2993 | f 304 995 303
2994 | f 308 805 596
2995 | f 597 36 588
2996 | f 918 36 802
2997 |
--------------------------------------------------------------------------------
/func_render/texture_transfer_pMap.m:
--------------------------------------------------------------------------------
1 | function [] = texture_transfer_pMap(T12, S1, S2, B1, B2, save_path)
2 | B2_inv = pinv(B2);
3 | B1_inv = pinv(B1);
4 | % T12: maps S1 -> S2, n1-dim vector
5 | n1 = length(S1.surface.X);
6 | n2 = length(S2.surface.X);
7 | P21 = sparse(1:n1,T12, ones(1,n2), n1, n2); % n1-by-n2 matrix, maps S2 -> S1
8 | C21 = B1_inv*P21*B2; % k1-by-k2 matrix, maps S2 -> S1
9 | P21 = B1*C21*B2_inv;
10 |
11 | % % convert pMap to fMap first, then find the soft correspondence matrix
12 | % C21_new = B1\B2(T12,:);
13 | % % C21_new = mat_projection(C21_new);
14 | % P21_new = B1*C21_new*B2_inv;
15 | %% visualization: P21 for texture transfering
16 | cols = [1 2 3];
17 | texture_im = 'texture.jpg';
18 | X2 = S2.surface.VERT;
19 | [~,ic] = sort(std(X2),'descend');
20 | S2_vt = MESH_IO.generate_tex_coords(X2(:,ic), cols(1), cols(2), 1);
21 |
22 | if nargin < 6, save_path = './'; end
23 |
24 | S1_name = 'target';
25 | S2_name = 'source';
26 | if isfield(S1,'name')
27 | S1_name = [S1_name,'_', S1.name];
28 | end
29 |
30 | if isfield(S2,'name')
31 | S2_name = [S2_name,'_', S2.name];
32 | end
33 |
34 | % Source mesh
35 | MESH_IO.wobj_with_texture(S2, S2_vt, texture_im, [save_path, S2_name]);
36 |
37 | % Target mesh:
38 | MESH_IO.wobj_with_texture(S1, P21*S2_vt, texture_im, [save_path,S1_name]);
39 | % MESH_IO.wobj_with_texture(S1, P21_new*S2_vt, texture_im, [save_path,S1_name,'_fMap']);
40 |
41 | end
42 |
43 |
44 | function C = mat_projection(W)
45 | n1 = size(W,1);
46 | n2 = size(W,2);
47 | [s,~,d] = svd(W);
48 | C = s*eye(n1,n2)*d';
49 | end
--------------------------------------------------------------------------------
/results/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/llorz/MatlabRenderToolbox/096203a8294d1d13ddb57d26f40b9e08083238cc/results/.DS_Store
--------------------------------------------------------------------------------
/results/eg_shapePair.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/llorz/MatlabRenderToolbox/096203a8294d1d13ddb57d26f40b9e08083238cc/results/eg_shapePair.png
--------------------------------------------------------------------------------
/results/eg_shapeWithLandmarks.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/llorz/MatlabRenderToolbox/096203a8294d1d13ddb57d26f40b9e08083238cc/results/eg_shapeWithLandmarks.png
--------------------------------------------------------------------------------
/results/eg_singleShape_allEdges.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/llorz/MatlabRenderToolbox/096203a8294d1d13ddb57d26f40b9e08083238cc/results/eg_singleShape_allEdges.png
--------------------------------------------------------------------------------
/results/eg_singleShape_colorFromVertex.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/llorz/MatlabRenderToolbox/096203a8294d1d13ddb57d26f40b9e08083238cc/results/eg_singleShape_colorFromVertex.png
--------------------------------------------------------------------------------
/results/eg_singleShape_colorFromVertex_v2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/llorz/MatlabRenderToolbox/096203a8294d1d13ddb57d26f40b9e08083238cc/results/eg_singleShape_colorFromVertex_v2.png
--------------------------------------------------------------------------------
/results/eg_singleShape_singleCol.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/llorz/MatlabRenderToolbox/096203a8294d1d13ddb57d26f40b9e08083238cc/results/eg_singleShape_singleCol.png
--------------------------------------------------------------------------------
/results/eg_singleShape_subsetEdges.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/llorz/MatlabRenderToolbox/096203a8294d1d13ddb57d26f40b9e08083238cc/results/eg_singleShape_subsetEdges.png
--------------------------------------------------------------------------------
/results/eg_singleShape_vectorField.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/llorz/MatlabRenderToolbox/096203a8294d1d13ddb57d26f40b9e08083238cc/results/eg_singleShape_vectorField.png
--------------------------------------------------------------------------------
/results/eg_singleShape_visualizeFunction.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/llorz/MatlabRenderToolbox/096203a8294d1d13ddb57d26f40b9e08083238cc/results/eg_singleShape_visualizeFunction.png
--------------------------------------------------------------------------------
/results/overview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/llorz/MatlabRenderToolbox/096203a8294d1d13ddb57d26f40b9e08083238cc/results/overview.png
--------------------------------------------------------------------------------