|
|
|
|
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Hellow, I have some isosurface function fun(x,y,z) that "starts" in <0,0,0>
and ends in <0,1,0> (i.e. an isosurface cylinder <0,0,0>-<0,1,0>)
how can I transform this isosurface to get shape that starts in W1 and ends
in W2 ?
I need to transform the formula, not to use rotate, translate etc...
it would be something like
#declare a = W1.x + ......
fun( x*sin(a)+y*cos(a) .... )
TIA :)
--
#macro g(U,V)(.4*abs(sin(9*sqrt(pow(x-U,2)+pow(y-V,2))))*pow(1-min(1,(sqrt(
pow(x-U,2)+pow(y-V,2))*.3)),2)+.9)#end#macro p(c)#if(c>1)#local l=mod(c,100
);g(2*div(l,10)-8,2*mod(l,10)-8)*p(div(c,100))#else 1#end#end light_source{
y 2}sphere{z*20 9pigment{function{p(26252423)*p(36455644)*p(66656463)}}}//M
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
You can find some clues here:
http://news.povray.org/povray.general/18830/122057
Tor Olav
Rafal 'Raf256' Maj wrote:
>Hellow, I have some isosurface function fun(x,y,z) that "starts" in <0,0,0>
>and ends in <0,1,0> (i.e. an isosurface cylinder <0,0,0>-<0,1,0>)
>
>how can I transform this isosurface to get shape that starts in W1 and ends
>in W2 ?
>I need to transform the formula, not to use rotate, translate etc...
>
>it would be something like
>#declare a = W1.x + ......
>fun( x*sin(a)+y*cos(a) .... )
>
>TIA :)
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
I have put some code below that transforms a
function without using transformation keywords.
Tor Olav
Tor Olav Kristensen wrote:
>You can find some clues here:
>
>http://news.povray.org/povray.general/18830/122057
>
>
>Tor Olav
>
>
>Rafal 'Raf256' Maj wrote:
>>Hellow, I have some isosurface function fun(x,y,z) that "starts" in <0,0,0>
>>and ends in <0,1,0> (i.e. an isosurface cylinder <0,0,0>-<0,1,0>)
>>
>>how can I transform this isosurface to get shape that starts in W1 and ends
>>in W2 ?
>>I need to transform the formula, not to use rotate, translate etc...
>>
>>it would be something like
>>#declare a = W1.x + ......
>>fun( x*sin(a)+y*cos(a) .... )
>>
>>TIA :)
>
// ===== 1 ======= 3 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7 =
// Copyright 2002 by Tor Olav Kristensen
// Email: t o r _ o l a v _ k [ a t ] h o t m a i l [ d o t ] c o m
// http://home.no/t-o-k/povray
// ===== 1 ======= 3 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7 =
#version 3.5;
#include "colors.inc"
#include "functions.inc"
// ===== 1 ======= 3 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7 =
// Declare function for the shape to be transformed
#declare AnyFn = function { f_torus(x, y/3, z, 3, 0.5) }
// The sample transformation to be done is
// a 60 degree rotation around the x-axis
// ===== 1 ======= 3 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7 =
// Now you can do it in a hard way
#declare Angle = radians(60);
// "Matrix" for rotation around the x-axis
#declare vX = < 1, 0, 0>;
#declare vY = < 0, cos(Angle), sin(Angle)>;
#declare vZ = < 0, -sin(Angle), cos(Angle)>;
// Invert matrix
#declare Det = vdot(vX, vcross(vY, vZ));
#declare vA = vcross(vY, vZ)/Det;
#declare vB = vcross(vZ, vX)/Det;
#declare vC = vcross(vX, vY)/Det;
// Extract matrix elements
#declare Ax = vA.x; #declare Ay = vA.y; #declare Az = vA.z;
#declare Bx = vB.x; #declare By = vB.y; #declare Bz = vB.z;
#declare Cx = vC.x; #declare Cy = vC.y; #declare Cz = vC.z;
// Multiply location vector with matrix
#declare TransformedFn =
function {
AnyFn(
x*Ax + y*Ay + z*Az,
x*Bx + y*By + z*Bz,
x*Cx + y*Cy + z*Cz
)
}
// Use transformed function
isosurface {
function { TransformedFn(x, y, z) }
contained_by { sphere { <0, 0, 0>, 5 } }
pigment { color White }
}
// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7
// Or in a simpler way
/*
// Define a useful macro
#macro TransformFunction(Fn, Transform)
#local TT = function { transform { Transform inverse } }
function { Fn(TT(x, y, z).x, TT(x, y, z).y, TT(x, y, z).z) }
#end // macro TransformFunction
// Transform the function
#declare TheTransformedFunction =
TransformFunction(
function { AnyFn(x, y, z) },
transform { rotate 60*x }
)
// Use transformed function
isosurface {
function { TheTransformedFunction(x, y, z) }
contained_by { sphere { <0, 0, 0>, 5 } }
pigment { color rgb <1.0, 0.9, 0.8> }
}
*/
// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7
background { color Blue/2 }
light_source {
<-2, 2, -1>*100
color White
shadowless
}
camera {
location <0, 10, -16>
look_at <0, 0, 0>
}
// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Tor Olav Kristensen wrote:
>
> I have put some code below that transforms a
> function without using transformation keywords.
>
> [...]
BTW the IsoCSG library contains macros for both variations too.
Christoph
--
POV-Ray tutorials, include files, Sim-POV,
HCR-Edit and more: http://www.tu-bs.de/~y0013390/
Last updated 02 Nov. 2002 _____./\/^>_*_<^\/\.______
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
|
|