Corners are defined by two parameters which themselves can be functions as demonstrated in the following two figures:
Fig 1: Square rod with corner radius increasing from left to right. The
profile parameter is +0.6, nearly round. This was produced by the
following code:
Fig 2: The profile parameter goes from a negative to positive.
Discontinuities occur at a value of -1 on the left between a flat bevel
and a rounded one, and on the right between rounding of a limited depth
to hyperbolic rounding that has continue indefinitly from the corner.
The radius is constant. This figure was produced by substituting the
following code:
// Vers: 1.00 // Date: 19 Nov 2016 // Auth: John Greenwood #version 3.7 ; global_settings {assumed_gamma 1.0 } #include "Rounded_Objects.inc" camera {location <-0,20,-40> angle 10 look_at <0,0,0> } light_source {<-5,20,-20> colour rgb<1,1,1>} background { color rgb<0.2, 0.4, 0.8> } #declare R_Object2 = function(p,r,x,y,z){ R_Intersection( +R_function(p,(x +1.5) /-r) +R_function(p,(x -1.5) /+r) +R_function(p,(z +1.5) /-r) +R_function(p,(z -1.5) /+r) +R_function(p,(y +1.5) /-r) +R_function(p,(y -1.5) /+r) ) } #declare Profile = .6; // change this to change the shape of the corner. 0.6 gives very close to circular #declare Radius = 1; // radius when the corner is circular and surfaces are perpendicular isosurface { function { // start of rounded object **************************************** // R_Object2(Profile,.4*x+1.5,0,y,z) R_Object2(.4*x,Radius,0,y,z) // end of rounded object ************************** } threshold 1 max_gradient 20 contained_by { box {<-4.2,-3.2, -4.2>, <4.2,3.2,4.2>} } texture {pigment {color rgb < 1, 0.9, 0.65>}} }