Hi again, Another METAPOST problem. For the sake of curiosity, I've been looking at and playing with the superellipse() function in plain METAPOST. This is all fine and dandy until I try values of 'superness' less than 0.5, in which case it generates shapes that are seemingly not superellipses. At s=0.5, the function generates a diamond shape -- which, AFAIK, is correct. However, s<0.5, the points of the diamond immediately turn to curves. (My knowledge of superellipses here is just from http://en.wikipedia.org/wiki/Superellipse -- try the image at http://en.wikipedia.org/wiki/File:Lame_anima.gif to see how I expect the shape to change with varying values of superness). Some code follows -- perhaps someone could run it and tell me if, for starters, they get the same as me. (See http://i49.tinypic.com/2ijqatl.jpgfor superellipse() with s=0.3). Best, James % The following is a superellipse function at < http://lists.foundry.supelec.fr/pipermail/metapost-commits/2008-June/000340....
; % I think it's the superellipse function in my copy of METAPOST; it at least has the same behaviour. % It seems to calculate the vertices correctly, but not the way they join (try changing all ... to --). % %def superellipse(expr r,t,l,b,s)= % r ... (s[xpart t,xpart r],s[ypart r,ypart t]){t-r} ... % t ... (s[xpart t,xpart l],s[ypart l,ypart t]){l-t} ... % l ... (s[xpart b,xpart l],s[ypart l,ypart b]){b-l} ... % b ... (s[xpart b,xpart r],s[ypart r,ypart b]){r-b} ... cycle %enddef;
def supertest expr s = superellipse( ( 100, 50 ), ( 50, 100 ), ( 0, 50 ), ( 50, 0 ), s ); enddef; % These >0 supernesses are fine, I think ... beginfig(0); draw supertest 2; endfig; beginfig(1); draw supertest 1.01; endfig; % The following, 0.5>=superness<=1, % are from visual reference definitely right beginfig(2); draw supertest 1; endfig; beginfig(3); draw supertest 0.99; endfig; beginfig(4); draw supertest 0.7; endfig; beginfig(5); draw supertest 0.51; endfig; beginfig(6); draw supertest 0.5; endfig; % Now, for <0.5, % things get problematic -- % the points in the shape generated by s=0.5 % should stay 'pointy' beginfig(7); draw supertest 0.49; endfig; beginfig(8); draw supertest 0.3; endfig; beginfig(9); draw supertest 0.01; endfig; beginfig(10); draw supertest 0; endfig; end;