9-6 三è??§æ?法è?計ç?å¹¾ä?

MATLAB ¥ç´£¨Ñ¤F¤@¨t¦C«ü¥O¡A¥i¥Î¨Ó¸Ñ¨M¤T¨¤¤Æ¡]Triangulation¡^¡B¾FªñÂI¡]Nearest Neighbors¡^¡A¤Î¨ä¥¦­pºâ´X¦ó¡]Computational Geometry¡^¤è­±ªº°ÝÃD¡A­º¥ý§Ú­Ì¸ÑÄÀ¦ó¿× Delaunay ¤T¨¤¤Æ¡]Trangulation¡^¡Cµ¹©w¤@²Õ X-Y ¥­­±¤WªºÂI¡ADelaunay «ü¥O¥i¶Ç¦^¤@²Õ¥Ñ³o¨ÇÂI©Ò§Î¦¨ªº¤T¨¤§Î¡A¦Ó¥B¥ô¤@ÂI§¡¤£·|¦ì©ó¥ô¤@­Ó¤T¨¤§Îªº¥~±µ¶ê¤§¤º¡C¬°®i¥Ü Delaunay ªº¥Îªk¡A­º¥ý§Ú­ÌŪ¤J¤@²Õ X-Y¥­­±¤Wªº¸ê®ÆÂI¡A¨Ã¥H´²§G¹Ïªº¤è¦¡¨Óªí¥Ü¡G

Example 1: 09-¤º´¡ªk/seamount01.mload seamount.mat plot(x, y, '.');

§Ú­Ì¥i¹ï¤W­z¸ê®ÆÂI¶i¦æ Delaunary ¤T¨¤¤Æ¡A¨Ã¨Ï¥Î triplot «ü¥Oµe¥X¨äµ²ªG¡A¦A±N­ì¥ýªº¸ê®ÆÅ|¤W¥h¡A¨Ò¦p¡G

Example 2: 09-¤º´¡ªk/triplot01.mload seamount.mat tri = delaunay(x, y); triplot(tri, x, y); hold on, plot(x, y, '.r'); hold off

§Ú­Ì¤]¥i¥H¨Ï¥Î trisurf ©Î¬O trimesh ¨Óµe¥X¨Ï¥Î¤T¨¤¤º´¡©Ò²£¥Íªº¦±­±¡A¦p¤U¡G

Example 3: 09-¤º´¡ªk/trisurf01.mload seamount.mat tri = delaunay(x, y); trisurf(tri, x, y, z); axis tight; colorbar

ŪªÌ¥i±N¤W­z½d¨Ò¤¤ªº trisurf §ï¦¨ trimesh¡A´N¥i¥H²£¥Í¤T¨¤ºôª¬¦±­±¡C­Y­n²£¥Íµ¥°ª½u¡A´N­n¨Ï¥Î¤§«e´£¨ìªº griddata «ü¥O¡A¦p¤U¡G

Example 4: 09-¤º´¡ªk/tricontour01.mload seamount.mat xi = linspace(min(x), max(x), 50); yi = linspace(min(y), max(y), 50); [xi, yi] = meshgrid(xi, yi); zi = griddata (x, y, z, xi, yi, 'cubic'); [c, h] = contourf(xi, yi, zi, 'b-'); clabel (c, h); colorbar; % Åã¥ÜÃC¦â»P¨ç¼Æ­Èªº¹ï·Óªí

¤@¥¹§¹¦¨ Delaunary ¤T¨¤¤Æ¤§«á¡A±z¥i¥H¶i¦æ¨âºØ·j´M¡G

Voronoi ¹Ï§Î©M Delaunay ¤T¨¤¤ÆÃö«Y«D±`±K¤Á¡AVoronoi ¹Ï§Î¥i±N¸ê®ÆÂI©Ò¦bªº¥­­±µe¤À¦¨¼Æ­Ó¦hÃä§Î¡A¨C¤@­Ó¦hÃä§Î¥u¥]§t¤@­Ó¸ê®ÆÂI¡A¦Ó¥Bµ¹©w¥ô¤@ÂI®É¡A¦¹ÂI©M¨ä³Ì¾Fªñªº¸ê®ÆÂI·|¸¨©ó¦P¤@­Ó¦hÃä§Î¤º¡C¨Æ¹ê¤W¡A¥u­n±N Delaunary ©Ò±oªº¦U­Ó¤T¨¤§Î¤¤¡A¹ï¨C¤@Ãäµe¥X««ª½¥­¤è½u¡A§Y¥i±o¨ì Voronoi ¹Ï§Î¡CMATLAB ªº voronoi «ü¥O¥i¥Î¨Óµe¥X Voronoi ¹Ï§Î¡AÁ|¨Ò¦p¤U¡G

Example 5: 09-¤º´¡ªk/voronoi01.mload seamount.mat voronoi(x, y);

§Ú­Ì¥i±N Voronoi ¹Ï§Î©M Delaunay ¤T¨¤§Îµe¦b¦P¤@±i¹Ï¡A¦p¤U¡G

Example 6: 09-¤º´¡ªk/voronoi02.mx = rand(20,1); y = rand(20,1); voronoi(x, y, 'b:'); tri = delaunay(x, y); hold on h = trimesh(tri, x, y, 0*x); hold off set(h, 'facecolor', 'none'); axis equal square axis([0 1 0 1]);

¦b¤W¹Ï¤¤¡A¹ê½u¬O Delaunay ¤T¨¤§Î¡Aµê½u«h¬O Voronoi ¹Ï§Î¡C¨Æ¹ê¤W¡A¨C¤@±ø Voronoi ¹Ï§Îªº½u¬q¡A³£¬O¬Y¤@­Ó¤T¨¤§Îªº¤@Ã䪺¤¤««½u¡A©Ò¥H¨C¤@­Ó Voronoi ¹Ï§Î©Ò§Î¦¨ªº¦hÃä§Îªº³»ÂI¡A³£¬O¬Y¤@­Ó¤T¨¤§Îªº¥~¤ß¡C¦¹¥~¡A¨C¤@­Ó Voronoi ¹Ï§Î©Ò§Î¦¨ªº¦hÃä§Î¡A³£¥u¦³¥]§t¤@­Ó¨ú¼Ë¸ê®ÆÂI¡A¥Nªí¦¹¨ú¼Ë¸ê®ÆÂIªº¡u¶Õ¤O½d³ò¡v¡A¦]¬°¸¨©ó¦¹¦hÃä§Î¤§¤ºªº¥ô¦óÂI¡A³£·|Â÷¦¹¨ú¼Ë¸ê®ÆÂI¸ûªñ¡A¦ÓÂ÷¨ä¥L¨ú¼Ë¸ê®ÆÂI¸û»·¡C

Hint
¦b¼Ë¦¡¿ëÃÑ¡]Pattern Recognition¡^¾Ç¬ìªºÆ[ÂI¨Ó¬Ý¡AVoronoi ¹Ï§Î´N¬O¸g¥Ñ KNNC (K-Nearest-Neighbors Classifiers) ¤ÀÃþ¤èªk¦b K µ¥©ó 1 ®É©Ò±o¨ìªºµ²ªG¡A¦pªG¦b¨Ì·Ó¤£¦PªºÃþ§O¨Ó¹ï Vornoi ¹Ï§Î¶i¦æµÛ¦â¡A´N¥i¥H±o¨ì KNNC ªº¨Mµ¦Ãä¬É¡]Decision Boundary¡^¡C

¦¹¥~¡AMATLAB ªº convhull «ü¥O¥i¥Î©ó­pºâ¤@²Õ¸ê®ÆÂIªº³Ì¤p¥Y¦hÃä§Î¡]Convex Hulls¡^¡C¨Ò¦p¡A§Ú­Ì¥i¥Î confhull «ü¥O¨Ó­pºâ¨ÃÅã¥Ü seamount ¸ê®ÆÂIªº³Ì¤p¥Y¦hÃä§Î¡A¦p¤U¡G

Example 7: 09-¤º´¡ªk/convhull01.mload seamount.mat plot(x, y, '.'); k = convhull(x, y); hold on, plot(x(k), y(k), 'r'), hold off % µe¥X³Ì¤p¥Y¦hÃä

¥t¤@­ÓÃþ¦üªº«ü¥O¬O inpolygon¡A¥i¥Î©ó­pºâ¤@­Ó¸ê®ÆÂI¬O§_¸¨©ó¤@­Ó«Ê³¬ªº¦hÃä§Î¡C¨Ò¦p¡A§Ú­Ì¥i¥H¥ý²£¥Í¤@­Ó¤»Ãä§Î¡A¦A¥Î inpolygon §ä¥X¦ì©ó¦¹¤»Ãä§Î¤º³¡ªº¸ê®ÆÂI¡AµM«á¨Ï¥Î¤£¦PªºÃC¦â¨Óµe¥X³o¨âÃþ¸ê®Æ¡A¦p¤U¡G

Example 8: 09-¤º´¡ªk/inpolygon01.mtheta = linspace(0, 2*pi, 7); xv = cos(theta); yv = sin(theta); x = randn(250,1); y = randn(250,1); in = inpolygon(x, y, xv, yv); plot(xv, yv, 'b', x(in), y(in), 'g.', x(~in), y(~in),'k.'); axis image


MATLABµ{¦¡³]­p¡G¶i¶¥½g