POV-Ray : Newsgroups : povray.unofficial.patches : Defining new math functions Server Time
29 Mar 2024 09:35:28 EDT (-0400)
  Defining new math functions (Message 1 to 2 of 2)  
From: michaelk
Subject: Defining new math functions
Date: 20 Jul 2007 08:50:02
Message: <web.46a0aed0c23a6d9cc856a90@news.povray.org>
Hello all,
I woould like to ask how to best add support for special functions like Airy
or Bessel functions to povray. The straighforward approach would be to add a
new switch like NEED_SPECIAL (similar to NEED_INVHYP) and add these new
functions into
all the needed places, which seem to be the files:
#grep asinh `find source -name '*.*' -print`
source/express.cpp:               Val = asinh(Parse_Float_Param());
source/fnpovfpu.cpp:    asinh,          // 9
source/fnsyntax.cpp:                    result = asinh(node->child->number);
source/mathutil.cpp:DBL asinh(DBL x)
source/mathutil.h:DBL asinh(DBL x);
source/tokenize.cpp:  {ASINH_TOKEN, "asinh"},
and the (.h files). Functions of two arguments can be modelled on atan2 and
such
(by the way, what about three arguments?).

I need this for visualisation of some physical situations in physics. I
would not like to use spline approximations, the regular Bessel function
J_n(x), grows like x^n near the origin and looks like sin(x) for large
values of x, for example. While it still would be possible to define it
without resorting to source changes it would certainly be a lot slower and
more awkward.

So, is what I described above the best way to proceed or is there a better
way?

Thanks

Michael

PS: I have also posted this question to the advanced user group, since I
don't know, if I will need to patch in the end.


Post a reply to this message

From: Thorsten Froehlich
Subject: Re: Defining new math functions
Date: 20 Jul 2007 10:46:56
Message: <46a0cae0$1@news.povray.org>
michaelk wrote:
> Hello all,
> I woould like to ask how to best add support for special functions like Airy
> or Bessel functions to povray. The straighforward approach would be to add a
> new switch like NEED_SPECIAL (similar to NEED_INVHYP) and add these new
> functions into
> all the needed places, which seem to be the files:
> #grep asinh `find source -name '*.*' -print`
> source/express.cpp:               Val = asinh(Parse_Float_Param());
> source/fnpovfpu.cpp:    asinh,          // 9
> source/fnsyntax.cpp:                    result = asinh(node->child->number);
> source/mathutil.cpp:DBL asinh(DBL x)
> source/mathutil.h:DBL asinh(DBL x);
> source/tokenize.cpp:  {ASINH_TOKEN, "asinh"},
> and the (.h files). Functions of two arguments can be modelled on atan2 and
> such
> (by the way, what about three arguments?).

No, this is pretty much the wrong way to add special purpose functions. Add
them to fnintern.cpp similar to all the other special purpose functions.

	Thorsten


Post a reply to this message

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