|
|
Ok, here is a fix I like. It uses the Reorient_Trans() macro which seems
to reorient it in a logical way (ie the cone doesn't rotate oddly). It
requires an #include "transforms.inc" in shapes.inc, but that's shouldn't be
a problem.
#macro Supercone(PtA, A, B, PtB, C, D)
intersection {
quartic {
<0, 0, 0, 0, 0, 0, 0, B*B-2*B*D+D*D, 2*(B*D-B*B), B*B,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, A*A-2*A*C+C*C, 2*(A*C-A*A), A*A, 0, 0, 0, 0,
-(A*A-2*A*C+C*C)*(B*B-2*B*D+D*D),
-(2*((B*D-B*B)*(A*A-2*A*C+C*C)+(A*C-A*A)*(B*B-2*B*D+D*D))),
-(B*B*(A*A-2*A*C+C*C)+4*(A*C-A*A)*(B*D-B*B)+A*A*(B*B-2*B*D+D*D)),
-(2*(B*B*(A*C-A*A)+A*A*(B*D-B*B))), -A*A*B*B>
sturm
}
cylinder {0, z, max(max(abs(A), abs(B)), max(abs(C), abs(D)))}
bounded_by {cone {0, max(abs(A), abs(B)), z, max(abs(C), abs(D))}}
#local Dirv = PtB - PtA;
scale <1,1,vlength(Dirv)>
#local Dirv = vnormalize(Dirv);
#if(vlength(Dirv-<0,0,-1>)=0) scale <1,1,-1>
#else Reorient_Trans(z, Dirv)
#end
}
#end
--
#macro N(D,I)#if(I<6)cylinder{M()#local D[I]=div(D[I],104);M().5,2pigment{
rgb M()}}N(D,(D[I]>99?I:I+1))#end#end#macro M()<mod(D[I],13)-6,mod(div(D[I
],13),8)-3,10>#end blob{N(array[6]{11117333955,
7382340,3358,3900569407,970,4254934330},0)}// - Warp -
Post a reply to this message
|
|