Box

This topic is 4176 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

Recommended Posts

hi, i have some tricky question, i have a box, i want to find the furthest point on that box in a certain direction. for a sphere you do: center + direction*radius is there any direct formula for the box? the way i would do it, form a ray going from the box center, having the direction of the vector, and test it against the plane of the boxes. any better ideas? the box has a center, width, height, and depth. thank you in advance

Share on other sites
If you wanted to speed things up a little, (I assume this would be a slightly better way of doing it) you could represent your direction in spherical coordinates, and then project this onto the relevant plane.

For the 2-d case: Assume there is a rectangle around the origin. If your direction is the unit vector (u,v), and in polar coordinates (r, theta), then for theta between 0 and arctan(h/w), your point furthest away is (r*w/cos(theta),theta). For theta between arctan(h/w) and arctan(h/-w), your point is (r*h/sin(theta),theta). And so on. Just draw the unit circle inside the rectangle. There'll be an identical case for 3 dimensions which I can work out later if you still need it. I assumed the box was axis-aligned, but it's not a problem if it isn't.

Share on other sites
Quote:
 Original post by DaBookshahIf you wanted to speed things up a little, (I assume this would be a slightly better way of doing it) you could represent your direction in spherical coordinates, and then project this onto the relevant plane.For the 2-d case: Assume there is a rectangle around the origin. If your direction is the unit vector (u,v), and in polar coordinates (r, theta), then for theta between 0 and arctan(h/w), your point furthest away is (r*w/cos(theta),theta). For theta between arctan(h/w) and arctan(h/-w), your point is (r*h/sin(theta),theta). And so on. Just draw a circle inside the rectangle. There'll be an identical case for 3 dimensions which I can work out later if you still need it. I assumed the box was axis-aligned, but it's not a problem if it isn't.

umm, it can be any box, can you develop it for 3D please?

Share on other sites
The support mapping for an axis-aligned box is simply:
S(v) = (center.x + sign(v.x)width /2,        center.y + sign(v.y)height/2,        center.z + sign(v.z)depth /2)
Or equivalent.

You can find support mappings for various shapes in Gino van den Bergen's book 'Collision Detection in Interactive 3D Environments', as well as in the open-source versions of his SOLID collision detection library.

Share on other sites
Quote:
 Original post by jykThe support mapping for an axis-aligned box is simply:S(v) = (center.x + sign(v.x)width /2, center.y + sign(v.y)height/2, center.z + sign(v.z)depth /2)Or equivalent.You can find support mappings for various shapes in Gino van den Bergen's book 'Collision Detection in Interactive 3D Environments', as well as in the open-source versions of his SOLID collision detection library.

i'll check that out, thank you for your help,
however, what if it wasnt an aligned box? i want it to be general, and what do you mean by sign??? is it the absolute value?

Share on other sites
Convert unit vector (x,y,z) to (ρ, φ, θ). Nice picture. Take w=width, parrellel to the x-axis, d=depth parrellel to the y-axis, and h=height for the z-axis dimension of the box. The idea is to split up the area of the rectangle of values (φ, θ) [(0,0),(0,2*pi),(2*pi,2*pi),(2*pi,0)] into smaller regions where you know which plane to project onto in each case.

First case: φ<=arctan(width/height) and -arctan(depth/width) <= θ <= arctan(depth/width), we intersect the plane z=h.

Then you have to go through and enumerate all the cases. I'm not sure how many there'll be - quite a few.

EDIT: Sign function

Share on other sites
Quote:
 Original post by DaBookshahConvert unit vector (x,y,z) to (ρ, φ, θ). Nice picture. Take w=width, parrellel to the x-axis, d=depth parrellel to the y-axis, and h=height for the z-axis dimension of the box. The idea is to split up the area of the rectangle of values (φ, θ) [(0,0),(0,2*pi),(2*pi,2*pi),(2*pi,0)] into smaller regions where you know which plane to project onto in each case. First case: φ<=arctan(width/height) and -arctan(depth/width) <= θ <= arctan(depth/width), we intersect the plane z=h. Then you have to go through and enumerate all the cases. I'm not sure how many there'll be - quite a few.

i guess JYK gave me what i need, thank you though!

Share on other sites
I'm not sure that spherical coordinates are the optimal solution to this particular problem...

In any case, the support function for the axis-aligned box that I posted can easily be adapted for an oriented box by first transforming v into the local space of said box. The details will be a little different than the axis-aligned case, but I doubt you'll have much trouble working them out.

1. 1
Rutin
40
2. 2
3. 3
4. 4
5. 5

• 9
• 23
• 20
• 14
• 14
• Forum Statistics

• Total Topics
633383
• Total Posts
3011587
• Who's Online (See full list)

There are no registered users currently online

×