Nothing
# testing overlap functions for 3D. Sphere, cube, shell.
test_that(
'Overlap Errors',{
expect_error(calc_overlap_3D(alpha=-1))
expect_error(calc_overlap_3D(alpha=1, r=-1))
expect_error(calc_overlap_3D(alpha=1, r=0.5, rmin=-1))
expect_error(calc_overlap_3D(alpha=1, r=0.5, rmin=1))
expect_error(calc_overlap_3D(alpha=1, bound = "triangle"))
expect_error(sphere_overlap_is(3.4, 2, 1))
}
)
test_that(
'Overlap Cube', {
#given
rad=0.5
alpha1=0.2 #0<0.4<0.5
alpha2= 0.35 #0.5< 0.7 < sqrt(2)/2
alpha3 = 0.4 #sqrt(2)/2 < 0.8 < sqrt(3)/2
alpha4 = 1
vc2 = pi*(2*alpha2-rad)^2*(4*alpha2+rad)/3
vc3 = pi*(2*alpha3-rad)^2*(4*alpha3+rad)/3
vo = cap_intersect_vol(2*alpha3, rad)
#when
overlap1 = calc_overlap_3D(alpha=alpha1, r=rad)
overlap2 = calc_overlap_3D(alpha=alpha2, r=rad)
overlap3 = calc_overlap_3D(alpha=alpha3, r=rad)
overlap4 = calc_overlap_3D(alpha=alpha4, r=rad)
#then
expect_equal(overlap1, (pi*(2*alpha1)^3/6)/0.5^3)
expect_equal(overlap2, (pi*(2*alpha2)^3/6 - 0.75*vc2)/0.5^3)
expect_equal(overlap3, (pi*(2*alpha3)^3/6-3*(0.25*vc3-vo))/0.5^3)
expect_equal(overlap4, 1)
}
)
test_that(
'Overlap Sphere', {
#given
rad=0.5
alpha1 = 0.25
alpha2 = 0.4
alpha3 = 2
total = (4/3)*pi*0.5^3
theta1 = acos(0.5)
h2 = (2*alpha1)*cos(theta1)
h1 = 2*alpha1-h2
v1 = (1/3)*pi*h1^2*(3*2*alpha1 - h1)
v2 = (1/3)*pi*h2^2*(3*rad-h2)
o1 = v1+v2
theta1 = acos(0.8)
h2 = (2*alpha2)*cos(theta1)
h1 = 2*alpha2-h2
v1 = (1/3)*pi*h1^2*(3*2*alpha2 - h1)
v2 = (1/3)*pi*h2^2*(3*rad-h2)
if (h2>rad){
h = 2*rad-h2
v2 = (4/3)*pi*rad^3 - (1/3)*pi*h^2*(3*rad-h)
}
o2 = v1+v2
#when
overlap1 = calc_overlap_3D(alpha=alpha1, r=rad, bound="sphere")
overlap2 = calc_overlap_3D(alpha=alpha2, r=rad, bound="sphere")
overlap3 = calc_overlap_3D(alpha=alpha3, r=rad, bound="sphere")
#then
expect_equal(overlap1, o1/total)
expect_equal(overlap2, o2/total)
expect_equal(overlap3, 1)
}
)
test_that(
'Overlap Shell', {
#given
R_big = 2
r_lit = 1
total = (4/3)*pi*(R_big^3-r_lit^3)
#First overlap
alpha1 = 0.25 # 0 < 0.5 < 1
alpha2 = 0.75 # 1 < 1.5 < 3
alpha5 = 1.2 # 2 < 2.4 < 3
alpha3 = 1.7 # 3 < 3.4 < 4
alpha4 = 3 # 4 < 6
theta1 = acos(0.125)
h2 = (2*alpha1)*cos(theta1)
h1 = 2*alpha1-h2
v1 = (1/3)*pi*h1^2*(3*2*alpha1 - h1)
v2 = (1/3)*pi*h2^2*(3*R_big-h2)
o1 = v1+v2
#Second overlap
theta1 = acos(0.375)
theta3 = acos(((2*alpha2)^2+R_big^2-r_lit^2)/(2*(2*alpha2)*R_big))
h2 = (2*alpha2)*cos(theta1)
h1 = 2*alpha2-h2
v1 = (1/3)*pi*h1^2*(3*2*alpha2 - h1)
v2 = (1/3)*pi*h2^2*(3*R_big-h2)
h4 = (2*alpha2)*cos(theta3)-(R_big-r_lit)
h3 = 2*alpha2-h4-(R_big-r_lit)
v3 = (1/3)*pi*h3^2*(3*2*alpha2-h3)
v4 = (1/3)*pi*h4^2*(3*r_lit-h4)
o2 = v1+v2-v3-v4
#Third overlap
theta1 = acos(0.85)
theta2 = acos(-0.445)
h2 = 2*alpha3*cos(theta1)
h1 = 2*alpha3-h2
v1 = (1/3)*pi*h1^2*(3*2*alpha3 - h1)
v2 = 0
if (h2 <= R_big){
v2 = (1/3)*pi*h2^2*(3*R_big-h2)
} else {
h2 = 2*R_big-h2
v2 = (4/3)*pi*R_big^3 - (1/3)*pi*h2^2*(3*R_big-h2)
}
o3 = v1+v2
#Fifth overlap
theta1 = acos(0.6)
theta3 = acos(((2*alpha5)^2+R_big^2-r_lit^2)/(2*(2*alpha5)*R_big))
h2 = (2*alpha5)*cos(theta1)
h1 = 2*alpha5-h2
v1 = (1/3)*pi*h1^2*(3*2*alpha5 - h1)
v2 = (1/3)*pi*h2^2*(3*R_big-h2)
h4 = (2*alpha5)*cos(theta3)-(R_big-r_lit)
h3 = 2*alpha5-h4-(R_big-r_lit)
v3 = (1/3)*pi*h3^2*(3*2*alpha5-h3)
h4 = 2*r_lit-h4
v4 = (4/3)*pi*r_lit^3 - (1/3)*pi*h4^2*(3*r_lit-h4)
o5 = v1+v2-v3-v4
#when
overlap1 = calc_overlap_3D(alpha=alpha1, r=R_big, rmin=r_lit, bound="shell")
overlap2 = calc_overlap_3D(alpha=alpha2, r=R_big, rmin=r_lit, bound="shell")
overlap3 = calc_overlap_3D(alpha=alpha3, r=R_big, rmin=r_lit, bound="shell")
overlap4 = calc_overlap_3D(alpha=alpha4, r=R_big, rmin=r_lit, bound="shell")
overlap5 = calc_overlap_3D(alpha=alpha5, r=R_big, rmin=r_lit, bound="shell")
#then
expect_equal(overlap1, o1/total)
expect_equal(overlap2, o2/total)
expect_equal(overlap3, (o3 - (4/3)*pi*r_lit^3)/total)
expect_equal(overlap4, 1)
expect_equal(overlap5, o5/total)
}
)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.