Code cleaning + add ears to the bottle clip! #22
1 changed files with 38 additions and 12 deletions
Fixing trigonometry
commit
9bebad59c3
|
|
@ -480,24 +480,50 @@ module ear(depth, thickness, side_len=30, bend_factor=0.5, stretch_factor=1.2, c
|
||||||
depth = depth == undef ? 20 : depth ;
|
depth = depth == undef ? 20 : depth ;
|
||||||
thickness = thickness == undef ? 3 : thickness ;
|
thickness = thickness == undef ? 3 : thickness ;
|
||||||
|
|
||||||
echo("Generating ONE single ear",
|
// $A and $B are the end of the ear
|
||||||
depth = depth,
|
// $C is the higher end point.
|
||||||
thickness = thickness,
|
|
||||||
side_len = side_len,
|
|
||||||
bend_factor = bend_factor,
|
|
||||||
stretch_factor = stretch_factor,
|
|
||||||
chamfer = chamfer,
|
|
||||||
chamfer_shape = chamfer_shape,
|
|
||||||
details = details
|
|
||||||
);
|
|
||||||
|
|
||||||
$A=[0, side_len/2];
|
$A=[0, side_len/2];
|
||||||
$B=[0,-side_len/2];
|
$B=[0,-side_len/2];
|
||||||
$C=[-(side_len/2/sin(120))*1.5*stretch_factor, 0];
|
// From the front, an ear looks like:
|
||||||
|
//
|
||||||
|
// $C
|
||||||
|
// /|\
|
||||||
|
// / | \
|
||||||
|
// / | \
|
||||||
|
// /---+---\
|
||||||
|
// $B c $A
|
||||||
|
//
|
||||||
|
// c is the origin of the ear.
|
||||||
|
// $Bc$C and $Ac$C are 90deg angles.
|
||||||
|
//
|
||||||
|
// The length [$B $A] is `side_len`
|
||||||
|
// Thus, [$B c] == [c $A] == side_len/2
|
||||||
|
//
|
||||||
|
// Since SOH, sin(angle) = Opposed / Hypotenuse
|
||||||
|
// sin(angle) = Opposed / Hypotenuse
|
||||||
|
// sin(angle) * Hypotenuse = Opposed
|
||||||
|
// Hypotenuse = Opposed / sin(angle)
|
||||||
|
//
|
||||||
|
// Thus, the `(side_len/2/sin(120))` implies that "The opposed side of the 120 angle is `(side_len/2)` length" and is the formula to know the size of the hypotenuse.
|
||||||
|
// Moreover, a 120deg angle in a right rectangle does not exists: the sum of all the angles of a triangle needs to be 180deg. I think the author tried, instead, to use the 60 as an angle, since the sinus is the same.
|
||||||
|
//
|
||||||
|
// The correct formula should be `((side_len/2)*tan(60))`: since $C$B$A should a 60deg angle to have an equilateral `$A$B$C` triangle, the product of the tangent ("TOA") of this angle and the adjacent segment [$B c] will give us the size of length of the opposed segment [$C c].
|
||||||
|
//
|
||||||
|
// MOREOVER, the product of the magic number `1.5` with the divisor `sin(120)`... is actually the result of the `tan(60)`!
|
||||||
|
//
|
||||||
|
// The original formula was:
|
||||||
|
// $C=[-(side_len/2/sin(120))*1.5*stretch_factor, 0];
|
||||||
|
$C=[-((side_len/2)*tan(60))*stretch_factor, 0];
|
||||||
|
|
||||||
|
// $a, $b and $c are the distance between the different points of the triangle.
|
||||||
$c=sqrt(pow($A.x-$B.x, 2)+pow($A.y-$B.y, 2));
|
$c=sqrt(pow($A.x-$B.x, 2)+pow($A.y-$B.y, 2));
|
||||||
$b=sqrt(pow($A.x-$C.x, 2)+pow($A.y-$C.y, 2));
|
$b=sqrt(pow($A.x-$C.x, 2)+pow($A.y-$C.y, 2));
|
||||||
$a=sqrt(pow($C.x-$B.x, 2)+pow($C.y-$B.y, 2));
|
$a=sqrt(pow($C.x-$B.x, 2)+pow($C.y-$B.y, 2));
|
||||||
|
|
||||||
|
// $hc is the height of $C.
|
||||||
$hc=-$C.x;
|
$hc=-$C.x;
|
||||||
|
|
||||||
|
// If I correctly understood, $alpha should be the angle of the $B$A$C. This should be 60deg... but is not. idk why.
|
||||||
$alpha=asin($hc/$b);
|
$alpha=asin($hc/$b);
|
||||||
$beta=$alpha;
|
$beta=$alpha;
|
||||||
$gamma=180-$alpha-$beta;
|
$gamma=180-$alpha-$beta;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue