Рассчитать геометрию трапеции с помощью OpenSCAD - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь распечатать монтажный кронштейн для двигателя. Есть 4 отверстия для винтов в странной форме трапеции. Я думаю, что если измерить расстояние между отверстиями для винтов, а затем разрезать его пополам по диагонали и измерить это расстояние, я получу треугольник, по которому я смогу затем рассчитать углы. Это были бы следующие измерения: enter image description here

Так что я применил этот подход в своей программе OpenSCAD. Я сделал сторону a и b длиной 12,42, а затем сторону c в качестве гипотенузы длиной 18,44. Из этих измерений я вычисляю угол B, а затем беру противоположность B, вычитая ее из 180. Тогда, поскольку я знаю длину гипотенузы и 2 угла треугольника из пунктирной линии ниже, я могу вычислить расстояние в плоскости x и y от точки 0,0.

enter image description here

Но ..... когда я распечатал форму и измерил две мои стороны разной длины. Также мне пришлось повернуть зеркальную часть модели на 6 градусов, которые я не могу понять, как рассчитал.

Вопрос в том, является ли моя логика c для определения неправильной формы, моя неверная математика или просто ошибка в программе?

sideA = 12.42;
sideB = 12.42;
sideC = 18.44;

bAngle = bAngle(sideA, sideB, sideC);
bAngleOpposite = 180 - bAngle;
aAngleOpposite = 180 - bAngleOpposite - 90;

hull(){
linear_extrude(height = .6, center=true){
    generateTriangle(sideA, sideB, sideC);
    rotate(354)
    {
        translate([0,0,0]){
            mirror(v = [1,1,0]){
                generateTriangle(sideA, sideB, sideC);
            }
        }
    }
}
}

module generateTriangle(sideA, sideB, sideC)
{
    y = sideC * (sin(bAngleOpposite)/sin(90));
    x = sideC * (sin(aAngleOpposite)/sin(90));

    polygon(points=[[0,0],[sideA,0],[y,x]]);
}

function bAngle(sideA, sideB, sideC) = acos((sideA*sideA + sideC*sideC - sideB*sideB)/(2 * sideB * sideC));
...