Utilisation : Les liens ne sont pas apparents. Pour obtenir des informations sur un mot clé, cliquez-le dans le script !
// Persistence of Vision Raytracer Version 3.5 Scene Description File // File: math.pov // Last updated: 9. Sept. 2001 // Authors: Chris Huff / Bob Hughes / Tor Olav Kristensen // Description: Graphing of functions //*********************************** #version 3.5; #include "stdinc.inc" //----------------------------------- global_settings {assumed_gamma 1} #default {finish {ambient 1 diffuse 0}} //----------------------------------- // Which graph to show. // 0 for power, 1 for trig, 2 for inverse trig, 3 for various #declare Graphic = 3; // The aspect ratio of the image. // (To get equal thickness of vertical and horizontal lines.) // E.g.: 800/600 = 4/3, 320/200 = 8/5 #declare AspectRatio = 4/3; #declare vAR = <AspectRatio, 1>; // Set to true to get a border. S L O W. #declare Border = false; // Half of the "thickness" of the lines #declare CylRadius = 0.006; //----------------------------------- #macro v2Dto3D(v0) <v0.u, v0.v, 0> #end // macro v2Dto3D #macro vNorm(v0) #local pGraphCtr = (pGraphMax + pGraphMin)/2; #local vA = (v0 - pGraphCtr)/(pGraphMax - pGraphMin); (vA*vAR) #end // macro vNorm #macro PlotPoint(p0) sphere {v2Dto3D(vNorm(p0)), CylRadius} #end // macro PlotPoint #macro PlotLine(p0, p1) cylinder {v2Dto3D(vNorm(p0)), v2Dto3D(vNorm(p1)), CylRadius} #end // macro PlotLine #macro Graph(Func, Num, Color) union { #local X = pGraphMin.u; #local pLast = <X, Func(X)>; PlotPoint(pLast) #local Xstep = (pGraphMax.u - pGraphMin.u)/(Num - 1); #local J = 1; #while(J < Num) #local X = X + Xstep; #local pNext = <X, Func(X)>; PlotLine(pLast, pNext) PlotPoint(pNext) #local pLast = pNext; #local J = J + 1; #end #if (Border) clipped_by { box { -<0.5, 0.5, CylRadius>, <0.5, 0.5, CylRadius> scale vAR + z } } #end // if pigment {color Color} } #end // macro Graph #macro GraphSetup() // Coordinate grid box { -<1, 1, 0>, <1, 1, 1> scale v2Dto3D(vAR)/2 + z/10000 texture { pigment {checker color Gray20, color White} scale v2Dto3D(GraphScale*(vNorm(<1, 1>) - vNorm(<0, 0>))) + z translate v2Dto3D(vNorm(<0, 0>)) } } // X-axis object { PlotLine(pGraphMin*u, pGraphMax*u) pigment {color Black} } // Y-axis object { PlotLine(pGraphMin*v, pGraphMax*v) pigment {color Black} } camera { orthographic right x up y scale v2Dto3D(vAR)*(Border ? 1.08 : 1) + z location -z look_at <0, 0, 0> } #if (Border) background {color Gray10 + Blue/2} #end // if #end // macro GraphSetup //----------------------------------- #switch(Graphic) #case(0) // power functions (^ operator) #declare pGraphMin = <-5,-5>; #declare pGraphMax = <5, 5>; #declare GraphScale = <1, 1>; Graph(function(x) {x}, 300, Red) Graph(function(x) {x*x}, 300, Green) Graph(function(x) {x*x*x}, 300, Blue) #break #case(1) // trigonometric functions #declare pGraphMin = <-90,-1.5>; #declare pGraphMax = <270, 1.5>; #declare GraphScale = <10, 0.1>; Graph(function(x) {sind(x)}, 300, Red) Graph(function(x) {cosd(x)}, 300, Green) Graph(function(x) {tand(x)}, 300, Blue) #break #case(2) // inverse trigonometric functions #declare pGraphMin = <-1,-180>; #declare pGraphMax = <1, 180>; #declare GraphScale = <0.1, 10>; Graph(function(x) {asind(x)}, 300, Red) Graph(function(x) {acosd(x)}, 300, Green) Graph(function(x) {atan2d(x, 1)}, 300, Blue) #break #case(3) // various functions #declare pGraphMin = <-10,-10>; #declare pGraphMax = <10, 10>; #declare GraphScale = <1, 1>; Graph(function(x) {sgn(x)}, 300, Red) Graph(function(x) {clip(x,-3, 2)}, 300, Green) Graph(function(x) {clamp(x,-3, 2) + 0.001}, 300, Blue) // +0.001 to make it visible beside clip() Graph(function(x) {adj_range(x, 3, 5)}, 300, Yellow) Graph(function(x) {adj_range2(x,-3, 2, 3, 5)}, 300, Orange) #break #end GraphSetup()
Et voici ce que nous obtenons :
