raffitz
3 years ago
3 changed files with 228 additions and 0 deletions
@ -0,0 +1,110 @@
@@ -0,0 +1,110 @@
|
||||
# Cube bounding box size: |
||||
|
||||
# Figure 1: |
||||
# _*_ - |
||||
# _/ | \_ ^ |
||||
# _/ | \_ | |
||||
# * | * h |
||||
# | | | e |
||||
# | _*_ | i |
||||
# | _/ \_ | g |
||||
# |_/ \_| h |
||||
# *_ _* t |
||||
# \_ _/ | |
||||
# \_ _/ v |
||||
# * - |
||||
# |
||||
# |<--width-->| |
||||
|
||||
# From this diagram, you can tell that the width is the diagonal of the square. |
||||
# We know as a corollary of Pythagoras's theorem that the diagonal of a square |
||||
# of side s is s * √2 |
||||
|
||||
define @width s * √2 |
||||
|
||||
# Figure 2: |
||||
# _*__ - |
||||
# / \__ ^ |
||||
# _/ \__ d |
||||
# _*__ _* e |
||||
# _/ \__ / p |
||||
# *__ \__ _/ t |
||||
# \__ _* h |
||||
# \__ _/ v |
||||
# * - |
||||
# |
||||
# |<----height----->| |
||||
|
||||
# From this diagram, you can tell that the depth is the diagonal of the cube. |
||||
# From Pythagoras's theorem we know that the diagonal of a cube of side s is |
||||
# √(((√2)^2)s^2 + s^2) = s * √3 |
||||
|
||||
define @depth s * √3 |
||||
|
||||
# If we consider the x = 0 section of the image above, we get the following: |
||||
# Figure 3: |
||||
# _*__ - |
||||
# / \__ ^ |
||||
# _/ | \__ d |
||||
# _/ b _* e |
||||
# _/ | / p |
||||
# *__ -a- -* _/ t |
||||
# \__ | _/ h |
||||
# \__c_/ v |
||||
# * - |
||||
# |
||||
# |<----height----->| |
||||
|
||||
# We know that: |
||||
# a^2 + b^2 = (s * √2)^2 |
||||
# a^2 + c^2 = s |
||||
# b + c = s * √3 |
||||
|
||||
# From that, we get that a = s * √(2/3), b = (2*s)/(√3), c = s/(√3) |
||||
# And we know that height = 2 * a |
||||
|
||||
define @half_height s * √(2/3) |
||||
|
||||
# Cube bounding box position: |
||||
|
||||
# Considering that the cube's center is the origin, we just need to negate and |
||||
# half the bounding box sizes to get the minimum boundaries for each variable. |
||||
-@width / 2 < x < @width / 2 |
||||
-@half_height < y < @half_height |
||||
-@depth / 2 < z < @depth / 2 |
||||
|
||||
# The cube is the intersection of 6 semi-spaces. |
||||
# Each semi-space is defined by an inequality based on the plane that defines |
||||
# its boundary. |
||||
# The plane equations are achieved through a point belonging to the plane, as |
||||
# well as a vector normal to the plane. |
||||
|
||||
# The easiest plane to construct is the one that is invariant in the x |
||||
# dimension, that is, parallel to the x axis. |
||||
|
||||
# For ease of calculation, the point used is the point (0,0,@half_height). |
||||
# The vector used will have the coordinates (0,-a,c) |
||||
|
||||
# This means the plane equation starts out as: |
||||
# -a*y + c*(z-((s * √3)/2)) <= 0 |
||||
# Which can be simplified to: |
||||
# -a*y + c*z <= (s^2)/2 |
||||
# Given that a and c are both expressed as functions of s, we can factor out |
||||
# the s and get the following: |
||||
# y * (-√(2/3)) + z * √(1/3) <= s / 2 |
||||
|
||||
# By using the same point and rotating the vector by +-120 degrees or +-2*pi/3 |
||||
# radians, we get the following two plane inequalities. |
||||
# (-(√2)/2) * x + y * √(1/6) + z * √(1/3) <= s / 2 |
||||
# ((√2)/2) * x + y * √(1/6) + z * √(1/3) <= s / 2 |
||||
|
||||
# By replacing the point with (0,0,-@half_height) and scaling each of the |
||||
# three vectors by (-1), we get the remaining three plane inequalities. |
||||
|
||||
y * (-√(2/3)) + z * √(1/3) <= s / 2 |
||||
(-(√2)/2) * x + y * √(1/6) + z * √(1/3) <= s / 2 |
||||
((√2)/2) * x + y * √(1/6) + z * √(1/3) <= s / 2 |
||||
|
||||
y * √(2/3) - z * √(1/3) <= s / 2 |
||||
(-(√2)/2) * x - y * √(1/6) - z * √(1/3) <= s / 2 |
||||
((√2)/2) * x - y * √(1/6) - z * √(1/3) <= s / 2 |
@ -0,0 +1,116 @@
@@ -0,0 +1,116 @@
|
||||
# Cube bounding box size: |
||||
|
||||
# Figure 1: |
||||
# _*_ - |
||||
# _/ | \_ ^ |
||||
# _/ | \_ | |
||||
# * | * h |
||||
# | | | e |
||||
# | _*_ | i |
||||
# | _/ \_ | g |
||||
# |_/ \_| h |
||||
# *_ _* t |
||||
# \_ _/ | |
||||
# \_ _/ v |
||||
# * - |
||||
# |
||||
# |<--width-->| |
||||
|
||||
# From this diagram, you can tell that the width is the diagonal of the square. |
||||
# We know as a corollary of Pythagoras's theorem that the diagonal of a square |
||||
# of side s is s * √2 |
||||
|
||||
define @width s * √2 |
||||
|
||||
# Figure 2: |
||||
# _*__ - |
||||
# / \__ ^ |
||||
# _/ \__ d |
||||
# _*__ _* e |
||||
# _/ \__ / p |
||||
# *__ \__ _/ t |
||||
# \__ _* h |
||||
# \__ _/ v |
||||
# * - |
||||
# |
||||
# |<----height----->| |
||||
|
||||
# From this diagram, you can tell that the depth is the diagonal of the cube. |
||||
# From Pythagoras's theorem we know that the diagonal of a cube of side s is |
||||
# √(((√2)^2)s^2 + s^2) = s * √3 |
||||
|
||||
define @depth s * √3 |
||||
|
||||
# If we consider the x = 0 section of the image above, we get the following: |
||||
# Figure 3: |
||||
# _*__ - |
||||
# / \__ ^ |
||||
# _/ | \__ d |
||||
# _/ b _* e |
||||
# _/ | / p |
||||
# *__ -a- -* _/ t |
||||
# \__ | _/ h |
||||
# \__c_/ v |
||||
# * - |
||||
# |
||||
# |<----height----->| |
||||
|
||||
# We know that: |
||||
# a^2 + b^2 = (s * √2)^2 |
||||
# a^2 + c^2 = s |
||||
# b + c = s * √3 |
||||
|
||||
# From that, we get that a = s * √(2/3), b = (2*s)/(√3), c = s/(√3) |
||||
# And we know that height = 2 * a |
||||
|
||||
define @half_height s * √(2/3) |
||||
|
||||
# Cube bounding box position: |
||||
|
||||
# Considering that the cube's center is the origin, we just need to negate and |
||||
# half the bounding box sizes to get the minimum boundaries for each variable. |
||||
-@width / 2 < x < @width / 2 |
||||
-@half_height < y < @half_height |
||||
-@depth / 2 < z < @depth / 2 |
||||
|
||||
# The cube is the intersection of 6 semi-spaces. |
||||
# Each semi-space is defined by an inequality based on the plane that defines |
||||
# its boundary. |
||||
# The plane equations are achieved through a point belonging to the plane, as |
||||
# well as a vector normal to the plane. |
||||
|
||||
# The easiest plane to construct is the one that is invariant in the x |
||||
# dimension, that is, parallel to the x axis. |
||||
|
||||
# For ease of calculation, the point used is the point (0,0,@half_height). |
||||
# The vector used will have the coordinates (0,-a,c) |
||||
|
||||
# This means the plane equation starts out as: |
||||
# -a*y + c*(z-((s * √3)/2)) <= 0 |
||||
# Which can be simplified to: |
||||
# -a*y + c*z <= (s^2)/2 |
||||
# Given that a and c are both expressed as functions of s, we can factor out |
||||
# the s and get the following: |
||||
# y * (-√(2/3)) + z * √(1/3) <= s / 2 |
||||
|
||||
# By using the same point and rotating the vector by +-120 degrees or +-2*pi/3 |
||||
# radians, we get the following two plane inequalities. |
||||
# (-(√2)/2) * x + y * √(1/6) + z * √(1/3) <= s / 2 |
||||
# ((√2)/2) * x + y * √(1/6) + z * √(1/3) <= s / 2 |
||||
|
||||
# By replacing the point with (0,0,-@half_height) and scaling each of the |
||||
# three vectors by (-1), we get the remaining three plane inequalities. |
||||
|
||||
{y * (-√(2/3)) + z * √(1/3) <= s / 2 ∧ \ |
||||
(-(√2)/2) * x + y * √(1/6) + z * √(1/3) <= s / 2 ∧ \ |
||||
((√2)/2) * x + y * √(1/6) + z * √(1/3) <= s / 2 ∧ \ |
||||
y * √(2/3) - z * √(1/3) <= s / 2 ∧ \ |
||||
(-(√2)/2) * x - y * √(1/6) - z * √(1/3) <= s / 2 ∧ \ |
||||
((√2)/2) * x - y * √(1/6) - z * √(1/3) <= s / 2} \ |
||||
⊻ \ |
||||
{y * (-√(2/3)) + z * √(1/3) <= (s - 2) / 2 ∧ \ |
||||
(-(√2)/2) * x + y * √(1/6) + z * √(1/3) <= (s - 2) / 2 ∧ \ |
||||
((√2)/2) * x + y * √(1/6) + z * √(1/3) <= (s - 2) / 2 ∧ \ |
||||
y * √(2/3) - z * √(1/3) <= (s - 2) / 2 ∧ \ |
||||
(-(√2)/2) * x - y * √(1/6) - z * √(1/3) <= (s - 2) / 2 ∧ \ |
||||
((√2)/2) * x - y * √(1/6) - z * √(1/3) <= (s - 2) / 2} |
Loading…
Reference in new issue