POV-Ray : Newsgroups : povray.bugreports : Bad values crash POV-Ray Server Time
21 Dec 2024 11:53:57 EST (-0500)
  Bad values crash POV-Ray (Message 1 to 8 of 8)  
From: Bald Eagle
Subject: Bad values crash POV-Ray
Date: 14 Oct 2024 12:20:00
Message: <web.670d43f4a74e39ded5cc4ae625979125@news.povray.org>
I was experimenting with the mapping equations in:

https://archive.bridgesmathart.org/2018/bridges2018-59.pdf

and crashed POV-Ray (3.8) about 6 times.

I'm guessing it has to do with trying to take square roots of something divided
by 0, or 0/0.
I haven't had a chance to scribble out a minimal .pov script to see what
triggers it.



I also was not able to get the mapping to work correctly - I'm guessing that I'm
going to have to apply the _inverse_ of the mapping - but I'm out of practice,
and can't see an easy way to go about that.

Any suggestions?

- BW


Post a reply to this message

From: kurtz le pirate
Subject: Re: Bad values crash POV-Ray
Date: 15 Oct 2024 09:57:49
Message: <670e74dd@news.povray.org>
On 14/10/2024 18:16, Bald Eagle wrote:
> I was experimenting with the mapping equations in:
> 
> https://archive.bridgesmathart.org/2018/bridges2018-59.pdf

Really interesting article...


> and crashed POV-Ray (3.8) about 6 times.
> 
> I'm guessing it has to do with trying to take square roots of something divided
> by 0, or 0/0.
> I haven't had a chance to scribble out a minimal .pov script to see what
> triggers it.
> 
> 
> 
> I also was not able to get the mapping to work correctly - I'm guessing that I'm
> going to have to apply the _inverse_ of the mapping - but I'm out of practice,
> and can't see an easy way to go about that.
> 
> Any suggestions?


I quickly did these two scenes.
I used the silly method that gives the images as attachments.
I don't know why you have crashes.

Here is some of my code :
-- begin code ---
#declare Sq = function(x) { x*x }

#declare fnDisc2Square = function(u,v) {
 
sgn(u*v)*sqrt(((-Sq(u)-Sq(v)+sqrt((Sq(u)+Sq(v))*(Sq(u)+Sq(v)+4*Sq(u)*Sq(v)*(Sq(u)+Sq(v)-2)))))/(2*(Sq(u)+Sq(v)-2)))
  }

#declare fnSquare2Disc = function(x,y) {
  sqrt((Sq(x)+Sq(y)-(2*Sq(x)*Sq(y)))/((Sq(x)+Sq(y))*(1-Sq(x)*Sq(y))))
  }

#macro Disc2Square(U,V)
  <fnDisc2Square(U,V)/V, fnDisc2Square(U,V)/U, -0.10>
#end

#macro Square2Disc(X,Y)
  <fnSquare2Disc(X,Y)*X, fnSquare2Disc(X,Y)*Y, -0.10>
#end
--- end code ---


Values between -1 and 1 go through zero, but I don't have any crashes.
I don't know if this will help you..


-- 
Kurtz le pirate
Compagnie de la banquise


Post a reply to this message


Attachments:
Download 'square2disc.png' (411 KB) Download 'disc2square.png' (440 KB)

Preview of image 'square2disc.png'
square2disc.png

Preview of image 'disc2square.png'
disc2square.png


 

From: Bald Eagle
Subject: Re: Bad values crash POV-Ray
Date: 15 Oct 2024 10:15:00
Message: <web.670e77c335f9a6c052b3ee0425979125@news.povray.org>
kurtz le pirate <kur### [at] gmailcom> wrote:

> I quickly did these two scenes.
> I used the silly method that gives the images as attachments.
> I don't know why you have crashes.
>
> Here is some of my code :
 ....
> Values between -1 and 1 go through zero, but I don't have any crashes.
> I don't know if this will help you..


Hey - you got it to work, which is more than I got.
When I next get a chance (it may be a while), I can compare your code to mine.

In the meantime:
Can you try a simple "scene" where you try to take the sqrt of 0, N/0, and 0/0?

Thanks

- BW


Post a reply to this message

From: kurtz le pirate
Subject: Re: Bad values crash POV-Ray
Date: 15 Oct 2024 11:10:01
Message: <670e85c9@news.povray.org>
On 15/10/2024 16:10, Bald Eagle wrote:

> In the meantime:
> Can you try a simple "scene" where you try to take the sqrt of 0, N/0, and 0/0?

Sure :

#debug "Begin -------------\n"

#declare a = sqrt(0);
#debug concat("sqrt(0) = ",str(a,0,-1),"\n")

#declare b = sqrt(1/0);
#debug concat("sqrt(1/0) = ",str(b,0,-1),"\n")

#declare c = sqrt(0/0);
#debug concat("sqrt(0/0) = ",str(c,0,-1),"\n")

#debug "End-----------------\n"

#error "nothing to draw"



Output :
Begin -------------
sqrt(0) = 0.000000
sqrt(1/0) = inf
sqrt(0/0) = inf
End-----------------

Parse Warning: Divide by zero.
Parse Warning: Divide by zero.






-- 
Kurtz le pirate
Compagnie de la banquise


Post a reply to this message

From: Bald Eagle
Subject: Re: Bad values crash POV-Ray
Date: 16 Oct 2024 17:05:00
Message: <web.67102a3535f9a6c01f9dae3025979125@news.povray.org>
So here's how I got it to NOT crash, but my mapping results suck.

Remove all of the protective select () and mod () functions, and it will crash.


#version 3.8;
global_settings {assumed_gamma 1.0 }

#include "math.inc"

#declare Zoom = 300;
camera {
 orthographic
 location <0, 0, -50>
 right x*image_width/Zoom
 up y*image_height/Zoom
 look_at <0, 0, 0>
 rotate y*0
}

light_source {<10, 10, -20> rgb 1}

sky_sphere {pigment {rgb 1}}

#declare Image = pigment {image_map {"HyperbolicSoccerBall.jpg"} translate-0.5}
#declare f_Image = function {pigment {Image}}

#declare d2s = function (M, N, U, V) {
 select (M,
  select (2*(U*U + V*V - 2),
   sgn (M) * sqrt (abs (-U*U -V*V + sqrt ((U*U + V*V)+(U*U + V*V + 4*U*U*V*V
*(U*U+V*V-2)) )  / (2*(U*U + V*V - 2))) ) / M,
   M,
   sgn (M) * sqrt (abs (-U*U -V*V + sqrt ((U*U + V*V)+(U*U + V*V + 4*U*U*V*V
*(U*U+V*V-2)) )  / (2*(U*U + V*V - 2))) ) / M
  ),
  M,
  select (2*(U*U + V*V - 2),
   sgn (M) * sqrt (abs (-U*U -V*V + sqrt ((U*U + V*V)+(U*U + V*V + 4*U*U*V*V
*(U*U+V*V-2)) )  / (2*(U*U + V*V - 2))) ) / M,
   M,
   sgn (M) * sqrt (abs (-U*U -V*V + sqrt ((U*U + V*V)+(U*U + V*V + 4*U*U*V*V
*(U*U+V*V-2)) )  / (2*(U*U + V*V - 2))) ) / M
  )
 )
}

#local FF = 0.0000001;

#declare s2d = function (M, N, X, Y) {
 select (mod (M+FF, 1),
  sqrt ((X*X + Y*Y - 2*X*X*Y*Y)/((X*X + Y*Y)*(1 - X*X*Y*Y))),
  M,
  sqrt ((X*X + Y*Y - 2*X*X*Y*Y)/((X*X + Y*Y)*(1 - X*X*Y*Y)))
 )
}

box {0, 1 translate -0.5 pigment {Image} translate -x}

//box {0, 1 translate -0.5 pigment {function {f_Image (d2s (x, y, x, y), d2s (y,
x, x, y), z).red}} }
//box {0, 1 translate -0.5 pigment {function {f_Image (s2d (x, y, x, y), s2d (y,
x, x, y), z).red}} translate x}

#declare Step = 0.01;
union {
 #for (Y, 0, 1, Step)
  #for (X, 0, 1, Step)
   #declare C = f_Image (X, Y, 0).red;
   #declare X2 = d2s (X, Y, X, Y)*Step;
   #declare Y2 = d2s (Y, X, X, Y)*Step;
   box {<X2, Y2, 0>, <X2+Step, Y2+Step, 1> pigment {rgb C}}
  #end
 #end
}

#local FF = 0.0000001;
#for (N, 0, 1, 0.1)
 #debug concat ("mod (", str(N, 0, 1),  ", 1) = ", str(mod (N+FF, 1), 0, 3),
"\n")
#end


Post a reply to this message

From: jr
Subject: Re: Bad values crash POV-Ray
Date: 18 Oct 2024 11:25:00
Message: <web.67127cf435f9a6c0bdf7d1766cde94f1@news.povray.org>
"Bald Eagle" <cre### [at] netscapenet> wrote:
> ... 0, N/0, and 0/0?

<https://www.quantamagazine.org/how-the-human-brain-contends-with-the-strangeness-of-zero-20241018/>

</grin>


regards, jr.


Post a reply to this message

From: Tor Olav Kristensen
Subject: Re: Bad values crash POV-Ray
Date: 20 Oct 2024 15:50:00
Message: <web.67155e8b35f9a6c0892957989db30a9@news.povray.org>
"Bald Eagle" <cre### [at] netscapenet> wrote:
> So here's how I got it to NOT crash, but my mapping results suck.
>
> Remove all of the protective select () and mod () functions, and it will crash.
>

Here's what you can do to make it work:

(Note that I might change my mind later about what values should
be used when the first expressions in the select statements
evaluates to zero. I may do some more testing in Python to be sure.)


> #version 3.8;

Replace with:

#version 3.7;  // I have not tested with v3.8


> #declare Zoom = 300;

Replace with:

#declare Zoom = 100;  // To see all the results


> #declare Image = pigment {image_map {"HyperbolicSoccerBall.jpg"} translate-0.5}

Replace with:

#declare Image =
    pigment {
        image_map { "HyperbolicSoccerBall.jpg" }
        scale <2, 2, 1>
        translate -<1, 1, 0>
    }
/*
To move the image from the region from x = 0 and y = 0 to
x = +1 and y = +1 into the region from x = -1 and y = -1 to
x = +1 and y = +1, as these are the intervals that the functions
below are made for.
*/


> #declare d2s = function (M, N, U, V) {
>  select (M,
>   select (2*(U*U + V*V - 2),
>    sgn (M) * sqrt (abs (-U*U -V*V + sqrt ((U*U + V*V)+(U*U + V*V + 4*U*U*V*V
> *(U*U+V*V-2)) )  / (2*(U*U + V*V - 2))) ) / M,
>    M,
>    sgn (M) * sqrt (abs (-U*U -V*V + sqrt ((U*U + V*V)+(U*U + V*V + 4*U*U*V*V
> *(U*U+V*V-2)) )  / (2*(U*U + V*V - 2))) ) / M
>   ),
>   M,
>   select (2*(U*U + V*V - 2),
>    sgn (M) * sqrt (abs (-U*U -V*V + sqrt ((U*U + V*V)+(U*U + V*V + 4*U*U*V*V
> *(U*U+V*V-2)) )  / (2*(U*U + V*V - 2))) ) / M,
>    M,
>    sgn (M) * sqrt (abs (-U*U -V*V + sqrt ((U*U + V*V)+(U*U + V*V + 4*U*U*V*V
> *(U*U+V*V-2)) )  / (2*(U*U + V*V - 2))) ) / M
>   )
>  )
> }

Replace with:

#declare d2s =
    function(U, V) {
        select(
            V,
            select(
                U*U + V*V - 2,
                sgn(U*V)*
                sqrt(
                    (
                        -U*U -V*V +
                        sqrt(
                            (U*U + V*V)*
                            (U*U + V*V + 4*U*U*V*V*(U*U + V*V - 2))
                        )
                    )/(2*(U*U + V*V - 2))
                )/V,
                U,
                sgn(U*V)*
                sqrt(
                    (
                        -U*U -V*V +
                        sqrt(
                            (U*U + V*V)*
                            (U*U + V*V + 4*U*U*V*V*(U*U + V*V - 2))
                        )
                    )/(2*(U*U + V*V - 2))
                )/V
            ),
            U,
            select(
                U*U + V*V - 2,
                sgn(U*V)*
                sqrt(
                    (
                        -U*U -V*V +
                        sqrt(
                            (U*U + V*V)*
                            (U*U + V*V + 4*U*U*V*V*(U*U + V*V - 2))
                        )
                    )/(2*(U*U + V*V - 2))
                )/V,
                U,
                sgn(U*V)*
                sqrt(
                    (
                        -U*U -V*V +
                        sqrt(
                            (U*U + V*V)*
                            (U*U + V*V + 4*U*U*V*V*(U*U + V*V - 2))
                        )
                    )/(2*(U*U + V*V - 2))
                )/V
            )
        )
    }
;
/*
Note that the plus symbols between the parentheses in the inner square roots
in your expressions are wrong; they should be multiplication symbols.
Also abs() should not be needed.
*/


> #declare s2d = function (M, N, X, Y) {
>  select (mod (M+FF, 1),
>   sqrt ((X*X + Y*Y - 2*X*X*Y*Y)/((X*X + Y*Y)*(1 - X*X*Y*Y))),
>   M,
>   sqrt ((X*X + Y*Y - 2*X*X*Y*Y)/((X*X + Y*Y)*(1 - X*X*Y*Y)))
>  )
> }

Replace with:

#declare s2d =
    function(X, Y) {
        select(
            X*X + Y*Y,
            select(
                1 - X*X*Y*Y,
                sqrt(
                    (X*X + Y*Y - 2*X*X*Y*Y)/
                     ((X*X + Y*Y)*(1 - X*X*Y*Y))
                )*X,
                sqrt(0.5)*X,
                sqrt(
                    (X*X + Y*Y - 2*X*X*Y*Y)/
                     ((X*X + Y*Y)*(1 - X*X*Y*Y))
                )*X
            )*X,
            0,
            select(
                1 - X*X*Y*Y,
                sqrt(
                    (X*X + Y*Y - 2*X*X*Y*Y)/
                     ((X*X + Y*Y)*(1 - X*X*Y*Y))
                )*X,
                sqrt(0.5)*X,
                sqrt(
                    (X*X + Y*Y - 2*X*X*Y*Y)/
                     ((X*X + Y*Y)*(1 - X*X*Y*Y))
                )*X
            )
        )
    }
;


> box {0, 1 translate -0.5 pigment {Image} translate -x}

Replace with:

box {
    -<1, 1, 0>, +<1, 1, 1>
    pigment { Image }
    translate +1.0*y
}


> //box {0, 1 translate -0.5 pigment {function {f_Image (s2d (x, y, x, y), s2d (y,
> x, x, y), z).red}} translate x}

Replace with:

box {
    -<1, 1, 0>,
    +<1, 1, 1>
    pigment {
        function {
            f_Image(
                s2d(x, y),
                s2d(y, x),
                0
            ).gray
        }
    }
    translate -2.5*x -1.0*y
}


> union {
>  #for (Y, 0, 1, Step)
>   #for (X, 0, 1, Step)
>    #declare C = f_Image (X, Y, 0).red;
>    #declare X2 = d2s (X, Y, X, Y)*Step;
>    #declare Y2 = d2s (Y, X, X, Y)*Step;
>    box {<X2, Y2, 0>, <X2+Step, Y2+Step, 1> pigment {rgb C}}
>   #end
>  #end
> }

Replace with:

union {
    #for (Y, -1, +1, Step)
        #for (X, -1, +1, Step)
            #declare C = f_Image(X, Y, 0).gray;
            #declare X2 = d2s(X, Y);
            #declare Y2 = d2s(Y, X);
            box {
                <X2, Y2, 0>, <X2 + Step, Y2 + Step, 1>
                pigment { color rgb C*<1, 1, 1> }
            }
        #end // for
    #end // for
    translate +2.5*x -1.0*y
}

--
Tor Olav
http://subcube.com
https://github.com/t-o-k


Post a reply to this message

From: Tor Olav Kristensen
Subject: Re: Bad values crash POV-Ray
Date: 20 Oct 2024 16:30:00
Message: <web.671567c235f9a6c0892957989db30a9@news.povray.org>
"Tor Olav Kristensen" <tor### [at] TOBEREMOVEDgmailcom> wrote:
> "Bald Eagle" <cre### [at] netscapenet> wrote:
> > So here's how I got it to NOT crash, but my mapping results suck.
> >
> > Remove all of the protective select () and mod () functions, and it will crash.
> >
>
> Here's what you can do to make it work:
>...

Sorry, I made a little mistake in the code below:

>...
> #declare s2d =
>     function(X, Y) {
>         select(
>             X*X + Y*Y,
>             select(
>                 1 - X*X*Y*Y,
>                 sqrt(
>                     (X*X + Y*Y - 2*X*X*Y*Y)/
>                      ((X*X + Y*Y)*(1 - X*X*Y*Y))
>                 )*X,
>                 sqrt(0.5)*X,
>                 sqrt(
>                     (X*X + Y*Y - 2*X*X*Y*Y)/
>                      ((X*X + Y*Y)*(1 - X*X*Y*Y))
>                 )*X
>             )*X,

Remove the last *X above


>             0,
>             select(
>                 1 - X*X*Y*Y,
>                 sqrt(
>                     (X*X + Y*Y - 2*X*X*Y*Y)/
>                      ((X*X + Y*Y)*(1 - X*X*Y*Y))
>                 )*X,
>                 sqrt(0.5)*X,
>                 sqrt(
>                     (X*X + Y*Y - 2*X*X*Y*Y)/
>                      ((X*X + Y*Y)*(1 - X*X*Y*Y))
>                 )*X
>             )
>         )
>     }
> ;
>...

--
Tor Olav
http://subcube.com
https://github.com/t-o-k


Post a reply to this message

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