|
|
|
|
|
|
| |
| |
|
|
From: Thomas de Groot
Subject: Strange results from min_extent and max_extent
Date: 17 Feb 2019 03:50:05
Message: <5c69203d$1@news.povray.org>
|
|
|
| |
| |
|
|
Using povray-3.8.0-alpha.10013324-av645-Win64
When using:
#local Object=
difference {
sphere {<0,0,0>, 6.0}
disc {<0,0,0>, y, 6.1}
}
//----------------------------------------
#declare Min = min_extent(Object);
#declare Max = max_extent(Object);
#debug concat("\n min_extent Object: <",vstr(3, Min, ", ", 0,3),">\n")
#debug concat(" max_extent Object: <",vstr(3, Max, ", ", 0,3),">\n\n")
//----------------------------------------
My intuition tells me that the results should be:
Min = <-6.000, 0.000, -6.000>
Max = < 6.000, 6.000, 6.000>
However, I get the following:
Min = <-6.000, -6.000, -6.000>
Max = < 6.000, 6.000, 6.000>
I never noticed this before while I extensively use these features. Is
this a bug or am I stupid?
--
Thomas
Post a reply to this message
|
|
| |
| |
|
|
From: Thomas de Groot
Subject: Re: Strange results from min_extent and max_extent
Date: 17 Feb 2019 07:46:31
Message: <5c6957a7$1@news.povray.org>
|
|
|
| |
| |
|
|
See also p.b.images and p.b.scene-files with same subject line.
--
Thomas
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Am 17.02.2019 um 09:50 schrieb Thomas de Groot:
> Using povray-3.8.0-alpha.10013324-av645-Win64
>
> When using:
>
> #local Object=
> difference {
> sphere {<0,0,0>, 6.0}
> disc {<0,0,0>, y, 6.1}
> }
> //----------------------------------------
> #declare Min = min_extent(Object);
> #declare Max = max_extent(Object);
> #debug concat("\n min_extent Object: <",vstr(3, Min, ", ", 0,3),">\n")
> #debug concat(" max_extent Object: <",vstr(3, Max, ", ", 0,3),">\n\n")
> //----------------------------------------
>
> My intuition tells me that the results should be:
> Min = <-6.000, 0.000, -6.000>
> Max = < 6.000, 6.000, 6.000>
>
> However, I get the following:
> Min = <-6.000, -6.000, -6.000>
> Max = < 6.000, 6.000, 6.000>
>
> I never noticed this before while I extensively use these features. Is
> this a bug or am I stupid?
The latter. (Hey, you asked a straightforward question, so you deserve a
straightforward answer :))
You shouldn't be using `disc` to cut away a plane. The fact that it
works is nothing more than a quirk, and the person who made it so should
be tarred and feathered. Use straightforward `plane` instead.
A couple of things to note in this context:
- The `min_extent` and `max_extent` functions are only guaranteed to
provide _bounds_ for the extent of the object. The actual extent may be
smaller. Considerably smaller in some cases.
- As a matter of fact `min_extent` and `max_extent` give you the extent
of the object's _bounding box_.
- `difference` is actually implemented as an intersection, with all
children except the first being inverted.
- The bounding box of an intersection is computed as the intersection of
the children's bounding boxes.
- Inverted objects are typically infinite
- Infinite objects have an infinite bounding box.
- The plane gets special treatment in the computation of intersection
bounding boxes because it is too useful as a cutting tool.
Post a reply to this message
|
|
| |
| |
|
|
From: Thomas de Groot
Subject: Re: Strange results from min_extent and max_extent
Date: 18 Feb 2019 02:31:55
Message: <5c6a5f6b$1@news.povray.org>
|
|
|
| |
| |
|
|
On 17-2-2019 21:14, clipka wrote:
>> I never noticed this before while I extensively use these features. Is
>> this a bug or am I stupid?
>
> The latter. (Hey, you asked a straightforward question, so you deserve a
> straightforward answer :))
I knew I had this coming of course, so you are welcome ;-)
>
> You shouldn't be using `disc` to cut away a plane. The fact that it
> works is nothing more than a quirk, and the person who made it so should
> be tarred and feathered. Use straightforward `plane` instead.
Yes, I was aware of the fact that disc is a problem child, but being
stupid of course...
>
>
> A couple of things to note in this context:
>
> - The `min_extent` and `max_extent` functions are only guaranteed to
> provide _bounds_ for the extent of the object. The actual extent may be
> smaller. Considerably smaller in some cases.
>
> - As a matter of fact `min_extent` and `max_extent` give you the extent
> of the object's _bounding box_.
>
> - `difference` is actually implemented as an intersection, with all
> children except the first being inverted.
OK. So, from the above, why is the difference sphere/box (see my example
image in p.b.i and p.b.s-f) calculating a min_extent.y location
corresponding to the base of the sphere? I do not grasp that really.
>
> - The bounding box of an intersection is computed as the intersection of
> the children's bounding boxes.
That is pretty straightforward.
>
> - Inverted objects are typically infinite
>
> - Infinite objects have an infinite bounding box.
Hmmm... ok. That makes sense and shows what can go wrong...
>
> - The plane gets special treatment in the computation of intersection
> bounding boxes because it is too useful as a cutting tool.
Yes, I fully agree with that one!
--
Thomas
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Am 18.02.2019 um 08:31 schrieb Thomas de Groot:
> OK. So, from the above, why is the difference sphere/box (see my example
> image in p.b.i and p.b.s-f) calculating a min_extent.y location
> corresponding to the base of the sphere? I do not grasp that really.
difference {
sphere { ... }
box { ... }
}
is the same as
intersection {
sphere { ... }
box { ... inverse }
}
The sphere has a bounding box of CENTER-RADIUS to CENTER+RADIUS.
The box _would_ normally have a bounding box of CORNER1 to CORNER2, but
since it's inverted, it has a bounding box of -INFINITY to +INFINITY. (*)
The intersection has a bounding box equal to the intersection between
the sphere's bounding box and the box's bounding box.
The intersection of any finite range A and an infinite range B is equal
to the finite range A.
Thus, the intersection has a bounding box of CENTER-RADIUS to
CENTER+RADIUS, just like the sphere.
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Am 18.02.2019 um 09:53 schrieb clipka:
> The box _would_ normally have a bounding box of CORNER1 to CORNER2, but
> since it's inverted, it has a bounding box of -INFINITY to +INFINITY. (*)
Forgot to mention:
(* Technically that's a simplification, and the true extent is
-BOUND_HUGE to +BOUND_HUGE - literally, because that's what the constant
is called in the source code. But the principle remains the same.)
Post a reply to this message
|
|
| |
| |
|
|
From: Thomas de Groot
Subject: Re: Strange results from min_extent and max_extent
Date: 18 Feb 2019 06:50:43
Message: <5c6a9c13$1@news.povray.org>
|
|
|
| |
| |
|
|
On 18-2-2019 10:01, clipka wrote:
> Am 18.02.2019 um 09:53 schrieb clipka:
>
>> The box _would_ normally have a bounding box of CORNER1 to CORNER2,
>> but since it's inverted, it has a bounding box of -INFINITY to
>> +INFINITY. (*)
>
> Forgot to mention:
>
> (* Technically that's a simplification, and the true extent is
> -BOUND_HUGE to +BOUND_HUGE - literally, because that's what the constant
> is called in the source code. But the principle remains the same.)
My deep felt thanks and appreciation for your patient replies,
Christoph. I certainly have learned something new here. I shall put that
to profit.
--
Thomas
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
|
|