POV-Ray : Newsgroups : povray.newusers : Connection gone bad... : Re: Connection gone bad... Server Time
5 Nov 2024 20:18:19 EST (-0500)
  Re: Connection gone bad...  
From: Jerry Anning
Date: 30 Jan 1999 23:21:09
Message: <36B3DA31.90365789@dhol.com>
Josh English wrote:
> 
> You want to use the CSG (Constructive Solid Geometry) functions union or
> merge, as in:
> 
> union { cylinder { <-2,0,0> <0,0,0> 1 }
>              sphere { <0,0,0> 1 }
>              cone { <0,0,0> 1 <0,2,0> 2 }
>              pigment { red 1 }
>            }
> 
> this is, of course, merely an example. You can replace union with merge,
> but this example wouldn't show the difference. It is more noticable with
> semi transparent color.
> 
> Also be sure to check the docs. The first tutorial will take you through
> the basics in a very well written manner.
> 
> Fishflake wrote:
> 
> > How can u connect a cone,sphere, and cylinder (spelling bad) to where
> > they look like the same thing.

If you mean that you want the connection to be smooth, it is a bit trickier. 
The best bet is a macro.  Try this example:

// Begin POV code

// Linkage.pov - demonstrate Linkage macro
#version 3.1;

global_settings { assumed_gamma 1.0 ambient_light <.846, 1.041, 1.041> } 

camera { up <0, 1, 0> right <4 / 3, 0, 0> 
  location <0, 0, -20> look_at <0, 0, 0> }

light_source { <20, 50, -100> color rgb <1.103, .993, .772> }

#include "colors.inc"

sky_sphere { pigment { color rgb <.846, 1.041, 1.041> } }

#macro Linkage(Cyllen, Conemajrad, Conelen, Coneminrad)
  #local Conetan = ((Conelen = 0) ? 0 : (Conemajrad - Coneminrad)
/                      Conelen);
  #local Majoff = Conemajrad * Conetan;
  #local Minoff = Coneminrad * Conetan;
  #local Cylrad = ((Conetan = 0) ? Conemajrad : sqrt((Conemajrad
*                          Conemajrad) + (Majoff * Majoff)));
  #local Litsphrad = ((Conetan = 0) ? Conemajrad : sqrt((Coneminrad *
                       Coneminrad) + (Minoff * Minoff)));
  #local Len = Cylrad + Cyllen + Majoff + Conelen - Minoff + Litsphrad;
  #local Cylbot = Cylrad - Len / 2;
  #local Cyltop = Cylbot + Cyllen;
  #local Conebot = Cyltop + Majoff;
  #local Conetop = Conebot + Conelen;
  #local Litsphloc = Conetop - Minoff;
	
union
  {
    sphere { <0, Cylbot, 0>, Cylrad }
    cylinder { <0, Cylbot, 0>, <0, Cyltop, 0>, Cylrad }
    sphere { <0, Cyltop, 0>, Cylrad }
    cone { <0, Conebot, 0>, Conemajrad, <0, Conetop, 0>, Coneminrad }
    sphere { <0, Litsphloc, 0>, Litsphrad }
  }
#end

object
  {
    Linkage(3, 4, 5, 1)
    texture
      {
        pigment
          {
            gradient y
            color_map
              {
                [ 0 color Red ]
                [ .2 color Yellow ]
                [ .4 color Green ]
                [ .6 color Cyan ]
                [ .8 color Blue ]
                [ 1 color Magenta ]
              }
            scale <1, 15, 1>
            translate <0, -7, 0>
          }
        finish { specular 1 roughness .001 crand .1 }
      }
  }

// End POV code

If you want to attach a cylinder to the *small* end of the cone, it is a bit
more complicated to do it smoothly.  If you need it, let me know and I will try
to cobble something together.

Jerry Anning
cle### [at] dholcom


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.