Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

Thread Subject:
Flattening 3d surfaces

Subject: Flattening 3d surfaces

From: Johannes Korsawe

Date: 3 Sep, 2010 10:13:22

Message: 1 of 6

Dear community,

is there any tool to unwind (simply) warped (triangulated) 3d surfaces, e.g. the surface shell of a cylinder (height h, radius r), which should then result in a rectangle of height h and width 2*pi*r.

I know that the resulting surface will be nonoverlapping only in some cases, especially not in the case of bidirectional warped surfaces.

My ideas towards such an algorithm are the following:

1. Start from some triangle of the triangulated surface.
2. go through all edges and "flatten" the adjacent triangles by rotating the non-common cornerpoint around the sharted edge.
3. mark initial triangle as "processed" and the three adjacent triangles as "to be processed"
4. handle all not yet processed triangles in the similar way as in points 2 and 3

using this as a draft for an algorithm, one would have to solve some severe inconstency as one vertex belongs to several triangles and therefore can be "rotated into the target plane" about several edges. This will result in several different projection/rotation points for this vertex. This multiplicity of results could be "solved" by using a mean value, but as this will happen during the algorithm sketched above, the handling of this vertex will also affect later rotation-results.

So, is there any idea instead of this "algorithm" or any hint on how to solve this task?

Best regards,
Johannes Korsawe

Example surface:
p=[ 619.9860 704.4850 736.7430 624.2150 694.1570 766.4950
  617.3630 707.0070 726.5200 624.6740 694.6470 765.9550
  615.6020 708.6260 719.6890 624.9150 694.9840 765.5130
  613.8320 710.1970 712.8460 625.1560 695.4750 764.7450
  624.3820 698.4300 757.0770 625.2820 695.9490 763.8770
  621.8150 701.1420 746.9160 625.3160 696.4290 762.8780
  619.2210 703.7360 736.7240 625.2680 696.8720 761.8460
  616.6020 706.2160 726.5010 625.0140 697.6770 759.7210
  614.8440 707.8090 719.6700 624.7800 698.1960 758.2440
  613.0760 709.3540 712.8270 624.2370 699.1850 755.2700
  623.8730 697.5170 758.1870 623.7870 699.8970 753.0260
  621.6000 699.9050 749.1590 623.3180 700.5950 750.7730
  619.3050 702.2020 740.1060 621.0260 703.8050 740.1240
  617.5700 703.8650 733.3010 619.2370 706.1010 732.1550
  615.8250 705.4800 726.4820 617.3650 708.2740 724.1720
  612.3020 708.5680 712.8090 615.4050 710.2880 716.2040
  623.0480 696.9460 758.1690 613.3430 712.1310 708.2160
  620.7800 699.2950 749.1410 612.9790 712.4170 706.8660
  618.4890 701.5540 740.0880 612.5880 712.6410 705.5560
  616.7570 703.1900 733.2830 612.1400 712.7640 704.2890
  615.0140 704.7790 726.4640 611.6130 712.7570 703.0730
  611.4950 707.8200 712.7920 611.3880 712.7030 702.6470
  621.8860 696.2300 758.1460 611.0040 712.5360 702.0680
  619.6230 698.5270 749.1180 610.3310 712.1280 701.3110
  617.3370 700.7360 740.0650 609.5860 711.5980 700.6980
  615.6090 702.3370 733.2590 609.1830 711.2970 700.4330
  613.8680 703.8930 726.4410 608.3830 710.6880 700.0150
  610.3540 706.8720 712.7690 607.0820 709.7100 699.5600
  621.2350 694.9970 760.3910 606.0220 708.9540 699.3290
  619.5520 696.7040 753.6400 604.3180 707.8500 699.1170
  617.8480 698.3680 746.8480 603.6580 707.4620 699.0680
  616.1300 699.9850 740.0420 602.9910 707.0930 699.0320
  612.6650 703.0760 726.4190 602.3150 706.7420 699.0060
  609.1540 705.9960 712.7480 601.4010 706.3030 698.9830
  619.9970 694.3910 760.4810 599.5250 705.5180 698.9790
  618.3440 696.0350 753.8420 598.0900 705.0120 699.0100
  616.6140 697.6920 746.9380 596.6280 704.5730 699.0630
  614.8700 699.3010 740.0210 595.1570 704.1990 699.1340
  611.4080 702.3300 726.3980 593.6660 703.8820 699.2200
  607.8980 705.1940 712.7280 592.1720 703.6200 699.3150
  619.0390 693.9780 760.5540 590.6650 703.4040 699.4200
  617.4090 695.5750 754.0040 587.6490 703.0830 699.6420
  615.6580 697.2280 747.0120 584.8690 702.8740 699.8560
  613.8930 698.8330 740.0050 587.8690 701.1170 710.5820
  610.4310 701.8170 726.3830 590.8420 699.2820 721.2860
  606.9210 704.6410 712.7140 593.7820 697.3710 731.9600
  618.0580 693.6000 760.6310 596.6880 695.3820 742.5930
  616.4510 695.1510 754.1730 597.4470 694.8450 745.3850
  614.6770 696.8010 747.0890 598.2380 694.2770 748.3010
  612.8890 698.4030 739.9910 600.6310 692.5030 757.1730
  609.4260 701.3440 726.3690 593.3530 694.0590 749.9870
  605.9150 704.1300 712.7010 591.4250 695.3940 742.8540
  616.2600 693.1570 760.3030 587.5530 697.9490 728.5500
  614.5750 694.7390 753.5380 583.6680 700.3650 714.1970
  611.1610 697.7720 739.9690 586.8360 695.0600 745.6420
  607.6940 700.6450 726.3480 583.7500 697.0510 734.2090
  604.1770 703.3710 712.6810 580.6550 698.9470 722.7460
  614.4850 692.7340 760.2830 577.5550 700.7530 711.2560
  612.7950 694.2790 753.5180 578.3940 697.2400 734.1420
  609.3730 697.2440 739.9490 575.3080 699.0370 722.6790
  605.8960 700.0550 726.3300 572.2180 700.7420 711.1900
  602.3690 702.7250 712.6640 574.3760 697.4280 734.0940
  612.6660 692.4020 760.2640 571.2970 699.1480 722.6300
  610.9690 693.9140 753.4990 568.2140 700.7710 711.1410
  607.5320 696.8160 739.9310 567.2850 699.2920 722.5810
  604.0400 699.5710 726.3130 564.2100 700.8300 711.0920
  600.4980 702.1900 712.6480 598.2380 694.2770 748.3010
  611.4290 692.2270 760.2520 597.4470 694.8450 745.3850
  609.7250 693.7190 753.4880 596.6880 695.3820 742.5930
  606.2740 696.5830 739.9200 593.7820 697.3710 731.9600
  602.7690 699.3030 726.3020 590.8420 699.2820 721.2860
  599.2140 701.8900 712.6390 587.8690 701.1170 710.5820
  610.1790 692.0890 760.2410 584.8690 702.8740 699.8560
  608.4670 693.5620 753.4770 579.0530 702.5320 700.3160
  605.0000 696.3910 739.9090 573.2360 702.2790 700.7930
  601.4790 699.0780 726.2920 568.8760 702.1390 701.1710
  597.9080 701.6340 712.6300 564.5230 702.0370 701.5860
  606.9210 693.4180 753.4630 561.6260 701.9870 701.8980
  603.4300 696.2070 739.8960 561.0450 701.9780 701.9670
  599.8850 698.8570 726.2800 560.1940 701.9640 702.0900
  596.2890 701.3780 712.6190 558.9590 701.9380 702.3430
  605.3660 693.3220 753.4500 558.1020 701.9120 702.5970
  601.8450 696.0740 739.8830 557.2910 701.8810 702.9270
  598.2710 698.6890 726.2680 557.0050 701.8670 703.0740
  594.6470 701.1780 712.6080 556.6180 701.8440 703.3130
  603.4370 693.2590 753.4320 556.1270 701.8040 703.7230
  599.8720 695.9710 739.8650 555.9700 701.7870 703.8920
  596.2540 698.5460 726.2500 555.7550 701.7600 704.1700
  592.5870 700.9960 712.5920 555.5710 701.7300 704.4690
  602.1540 693.2460 753.4190 555.4280 701.6980 704.7870
  598.5550 695.9330 739.8510 555.3200 701.6640 705.1240
  594.9030 698.4830 726.2370 555.2150 701.6100 705.6470
  591.2020 700.9070 712.5800 555.1770 701.5250 706.4660
  601.5030 692.3730 757.7440 555.2230 701.4630 707.0430
  602.2840 692.2590 758.2500 555.2660 701.4310 707.3380
  602.7130 692.1980 758.5250 555.5080 701.3160 708.3890
  603.1430 692.1380 758.8000 555.8510 701.1990 709.4140
  603.7850 692.0500 759.2070 556.2740 701.0820 710.4210
  604.4270 691.9660 759.6100 556.7580 700.9610 711.4280
  605.0710 691.8850 760.0100 559.0780 700.4080 715.8080
  605.7180 691.8080 760.4080 560.9480 699.9790 718.9800
  607.2110 691.6450 761.3140 562.9460 699.5330 722.0840
  609.4080 691.4560 762.6010 566.1430 698.8400 726.5600
  611.5760 691.3480 763.7860 569.5790 698.1180 730.8380
  613.7290 691.3390 764.8460 573.2460 697.3710 734.9260
  615.3360 691.4130 765.5440 577.1320 696.6030 738.8400
  616.6420 691.5320 766.0420 579.6210 696.1230 741.1620
  617.2980 691.6150 766.2660 580.8960 695.8810 742.3040
  617.9120 691.7080 766.4580 584.7060 695.1730 745.5510
  618.8350 691.8800 766.7070 588.6780 694.4610 748.7100
  620.2080 692.2190 766.9810 592.8010 693.7520 751.7860
  621.1890 692.5320 767.0910 596.1120 693.2070 754.1300
  622.1560 692.9120 767.1150 599.5100 692.6740 756.4310
  622.9460 693.2880 767.0530 600.6310 692.5030 757.1730
  623.6400 693.7030 766.8620 0 0 0];
p=[p(:,1:3);p(:,4:6)];p=p(1:end-1,:);

t=[ 125 124 126 1 2 130 150 57 62
   124 5 126 130 2 3 150 62 151
   126 5 127 93 89 92 4 10 138
     5 6 127 89 88 92 4 138 137
   127 6 7 92 88 91 4 137 136
   103 78 104 88 87 91 4 136 135
    78 73 104 91 87 90 4 135 134
   104 73 105 87 86 90 4 134 133
    73 68 105 89 85 88 4 133 132
   105 68 106 85 84 88 4 132 131
    68 63 106 88 84 87 4 131 130
   106 63 107 84 83 87 4 130 3
    63 58 107 87 83 86 90 86 101
   159 158 93 83 82 86 90 101 100
   158 157 93 85 81 84 90 100 99
    93 157 89 81 80 84 90 99 98
   157 156 89 84 80 83 90 98 97
    89 156 85 80 79 83 90 97 96
   151 62 152 83 79 82 90 96 95
    62 67 152 79 78 82 90 95 94
   152 67 153 81 77 80 90 94 165
    67 72 153 77 76 80 90 165 164
   153 72 154 80 76 79 90 164 163
    72 77 154 76 75 79 90 163 162
   154 77 155 79 75 78 90 162 91
    77 81 155 75 74 78 128 1 129
   155 81 156 78 74 73 160 159 93
    81 85 156 77 72 76 93 92 160
   110 109 111 72 71 76 161 160 92
   109 47 111 76 71 75 92 91 161
   111 47 112 71 70 75 162 161 91
    47 41 112 75 70 74 118 120 119
   112 41 113 70 69 74 140 16 141
    41 35 113 74 69 73 138 10 139
   113 35 29 69 68 73 188 187 189
   147 146 52 72 67 71 187 169 189
   146 46 52 67 66 71 189 169 190
    52 46 51 71 66 70 169 173 190
    46 45 51 66 65 70 190 173 191
    51 45 50 70 65 69 173 176 191
    45 44 50 65 64 69 191 176 192
    50 44 49 69 64 68 176 179 192
    44 43 49 64 63 68 168 185 167
    49 43 48 67 62 66 185 184 167
    43 42 48 62 61 66 167 184 183
    48 42 47 66 61 65 183 182 167
    42 41 47 61 60 65 182 166 167
   114 113 115 65 60 64 179 176 178
   113 29 115 60 59 64 176 175 178
   115 29 23 64 59 63 178 175 177
   144 143 34 59 58 63 175 174 177
   143 28 34 62 57 61 176 173 175
    34 28 33 57 56 61 173 172 175
    28 27 33 61 56 60 175 172 174
    33 27 32 56 55 60 172 171 174
    27 26 32 60 55 59 222 221 177
    32 26 25 55 54 59 222 177 174
   116 115 117 59 54 58 222 174 170
   115 23 117 54 53 58 222 170 223
   117 23 17 57 52 56 177 221 220
   143 142 28 52 51 56 177 220 219
   142 22 28 56 51 55 177 219 218
    28 22 27 51 50 55 177 218 180
    22 21 27 55 50 54 177 180 178
    27 21 26 50 49 54 170 174 171
    21 20 26 54 49 48 170 171 167
    26 20 25 48 47 54 170 167 166
    20 19 25 47 53 54 170 166 225
    25 19 24 46 40 45 170 225 224
    19 18 24 40 39 45 170 224 223
    24 18 23 45 39 44 229 228 227
    18 17 23 39 38 44 229 227 226
   123 122 11 44 38 43 229 226 166
   122 121 11 38 37 43 229 166 182
    11 121 17 43 37 42 181 214 213
   121 120 17 37 36 42 181 213 212
    17 120 117 42 36 41 181 212 211
   120 118 117 36 35 41 181 211 210
   142 141 22 40 34 39 181 210 209
   141 16 22 34 33 39 181 209 208
    22 16 21 39 33 38 181 208 207
    16 15 21 33 32 38 181 207 206
    21 15 20 38 32 37 181 206 205
    15 14 20 32 31 37 181 205 204
    20 14 19 37 31 36 181 204 203
    14 13 19 31 30 36 181 203 202
    19 13 18 36 30 35 181 202 201
    13 12 18 30 29 35 181 201 200
    18 12 17 32 25 31 181 200 199
    12 11 17 25 24 31 181 199 198
   140 139 16 31 24 30 181 198 197
   139 10 16 24 23 30 181 197 196
    16 10 15 30 23 29 181 196 195
    10 9 15 7 14 8 181 195 194
    15 9 8 14 15 8 181 194 193
   124 123 5 102 101 86 181 193 192
   123 11 5 102 86 82 181 192 179
     5 11 6 102 82 78 181 179 178
    11 12 6 102 78 103 181 178 180
     6 12 7 108 107 58 180 218 217
    12 13 7 108 58 53 180 217 216
     7 13 14 108 53 47 180 216 215
   128 127 1 108 47 109 180 215 214
   127 7 1 145 144 34 180 214 181
     1 7 2 145 34 40 169 187 186
     7 8 2 145 40 46 169 186 168
     2 8 3 145 46 146 186 185 168
     8 9 3 148 147 52 172 173 169
     3 9 4 148 52 57 169 168 172
     9 10 4 148 57 149 171 172 168
   129 1 130 150 149 57 168 167 171];
t=[t(:,1:3);t(:,4:6);t(:,7:9);[226,225,166]];
patch('Vertices',p,'Faces',t,'FaceColor','w','EdgeColor','k');

Subject: Flattening 3d surfaces

From: John D'Errico

Date: 3 Sep, 2010 10:38:07

Message: 2 of 6

"Johannes Korsawe" <johannes.korsawe.nospam@volkswagen.de> wrote in message <i5qho2$ihh$1@fred.mathworks.com>...
> Dear community,
>
> is there any tool to unwind (simply) warped (triangulated) 3d surfaces, e.g. the surface shell of a cylinder (height h, radius r), which should then result in a rectangle of height h and width 2*pi*r.
>
> I know that the resulting surface will be nonoverlapping only in some cases, especially not in the case of bidirectional warped surfaces.
>
> My ideas towards such an algorithm are the following:
>
> 1. Start from some triangle of the triangulated surface.
> 2. go through all edges and "flatten" the adjacent triangles by rotating the non-common cornerpoint around the sharted edge.
> 3. mark initial triangle as "processed" and the three adjacent triangles as "to be processed"
> 4. handle all not yet processed triangles in the similar way as in points 2 and 3
>
> using this as a draft for an algorithm, one would have to solve some severe inconstency as one vertex belongs to several triangles and therefore can be "rotated into the target plane" about several edges. This will result in several different projection/rotation points for this vertex. This multiplicity of results could be "solved" by using a mean value, but as this will happen during the algorithm sketched above, the handling of this vertex will also affect later rotation-results.
>
> So, is there any idea instead of this "algorithm" or any hint on how to solve this task?

Expect to see problems for this even with a singly curved
cylinder.

Imagine the path you take to a given vertex from your
starting triangle. The unrolled location of a vertex some
number of steps away from the start point will depend
on the specific sequence of triangles you choose to
unroll first. In fact, it is probably possible to choose
some degenerate case that causes some topological
strangeness.

And no matter what you do, in the end you must resolve
the topological issues when you have wrapped completely
around the surface. All of this gets worse on doubly curved
surfaces or surfaces with holes in them. The surface of a
torus or worse, a pretzel, would surely be fun here.

John

Subject: Flattening 3d surfaces

From: Johannes Korsawe

Date: 3 Sep, 2010 11:10:25

Message: 3 of 6

John,

thank you for your fast reply.
Your comments are correct as always. I even had not respected that a step-by-step rotation of single triangles while keeping the connections to the non-rotated world would also result in more and more distorted triangles the longer they wait to be hopefully rotated into the rolling plane sometimes.

I am only thinking of "slightly" bended surfaces as in the example i posted. The pretzel algorithm may have to follow later then (perhaps one should have a look on the algorithms behind PePaKuRa http://www.tamasoft.co.jp/pepakura-en).

And this brought me to the next thought. How about rotating each triangle "as it is" into the plane. Exclusively. And after that puzzling the whole stuff together by going through the triangles' and edges' indices.

If the surface is only bended and not stitched together in a weird manner this could work perhaps. The puzzle would start at one triangle and then the adjacent triangles would have to be rotated around the normal vector to the flattening plane to align the common edge with the edges of the starting triangle. and so on.

Concerns about this? (Until better ideas, i will try this anyway. I have to find at least a "low-quality" solution.)

Best regards,
Johannes

Subject: Flattening 3d surfaces

From: Steven_Lord

Date: 3 Sep, 2010 13:49:55

Message: 4 of 6



"Johannes Korsawe" <johannes.korsawe.nospam@volkswagen.de> wrote in message
news:i5qho2$ihh$1@fred.mathworks.com...
> Dear community,
>
> is there any tool to unwind (simply) warped (triangulated) 3d surfaces,
> e.g. the surface shell of a cylinder (height h, radius r), which should
> then result in a rectangle of height h and width 2*pi*r.

This doesn't sound like an easy problem; for a somewhat similar task
(creating a planar representation of an oblate spheroid) cartographers have
come up with many different techniques.

http://www.mathworks.com/help/toolbox/map/ref/f3-12193.html

http://www.mathworks.com/help/toolbox/map/f4-4154.html

*snip*

--
Steve Lord
slord@mathworks.com
comp.soft-sys.matlab (CSSM) FAQ: http://matlabwiki.mathworks.com/MATLAB_FAQ
To contact Technical Support use the Contact Us link on
http://www.mathworks.com

Subject: Flattening 3d surfaces

From: Andrea Tagliasacchi

Date: 11 May, 2011 19:33:05

Message: 5 of 6

"Johannes Korsawe" wrote in message <i5qho2$ihh$1@fred.mathworks.com>...
> Dear community,
>
> is there any tool to unwind (simply) warped (triangulated) 3d surfaces, e.g. the surface shell of a cylinder (height h, radius r), which should then result in a rectangle of height h and width 2*pi*r.
>
> I know that the resulting surface will be nonoverlapping only in some cases, especially not in the case of bidirectional warped surfaces.
>

Beside for surface of (piecewise) zero gaussian curvature (developable surface)
it's impossible to perfectly flatten a surface to a plane. On the other hand, if some distortion is allowed, you should look into the so-called "parametrization" problem.

Yes, it's VERY not trivial. It's an entire field of research in applied math which has developed in the last 10 years. I would not suggest coming up with your own heuristic.. unless you want to re-discover the wheel.

Read the parametrization chapter of this book for an easy introduction:
http://www.pmp-book.org

Subject: Flattening 3d surfaces

From: Steven_Lord

Date: 11 May, 2011 20:43:41

Message: 6 of 6



"Andrea Tagliasacchi" <andrea.tagliasacchi@gmail.com> wrote in message
news:iqeo9h$kek$1@newscl01ah.mathworks.com...
> "Johannes Korsawe" wrote in message <i5qho2$ihh$1@fred.mathworks.com>...
>> Dear community,
>>
>> is there any tool to unwind (simply) warped (triangulated) 3d surfaces,
>> e.g. the surface shell of a cylinder (height h, radius r), which should
>> then result in a rectangle of height h and width 2*pi*r.
>>
>> I know that the resulting surface will be nonoverlapping only in some
>> cases, especially not in the case of bidirectional warped surfaces.
>>
>
> Beside for surface of (piecewise) zero gaussian curvature (developable
> surface)
> it's impossible to perfectly flatten a surface to a plane. On the other
> hand, if some distortion is allowed, you should look into the so-called
> "parametrization" problem.
>
> Yes, it's VERY not trivial. It's an entire field of research in applied
> math which has developed in the last 10 years. I would not suggest coming
> up with your own heuristic.. unless you want to re-discover the wheel.
>
> Read the parametrization chapter of this book for an easy introduction:
> http://www.pmp-book.org

If I understand what the OP is asking, the problem is even older and harder
than that even for the case of an object as simple as a sphere (well,
technically an oblate spheroid, but close enough) and there are many
different solutions depending on your goal.

http://en.wikipedia.org/wiki/Map_projection

Mapping Toolbox contains several dozen such projections.

http://www.mathworks.com/help/toolbox/map/ref/maplist.html

--
Steve Lord
slord@mathworks.com
To contact Technical Support use the Contact Us link on
http://www.mathworks.com

Tags for this Thread

What are tags?

A tag is like a keyword or category label associated with each thread. Tags make it easier for you to find threads of interest.

Anyone can tag a thread. Tags are public and visible to everyone.

Contact us