Вычисление объемов полых трехмерных геометрических объектов

Мы получили домашнее задание по Java, которое касается наследования. У меня нет проблем с программированием само по себе, но я немного не уверен в некоторых математических расчетах и ​​хотел бы получить подтверждение/исправления от кого-то более знающего.

Назначение начинается с абстрактного класса GeometricObject, который расширяется до трех двумерных объектов. Прямоугольник, круг и треугольник. Эти три затем расширяются в кубоид для прямоугольника, цилиндр и сферу для круга и треугольник в треугольную призму.

Каждый из этих трехмерных объектов является полым, имеет определенную толщину и изготовлен из специального металла, поэтому нам предстоит рассчитать их вес. И в этом заключается проблема, поскольку я немного не уверен, как мне найти «внутренний объем» на некоторых из них.

  • Кубоид: Здесь я предполагаю, что могу просто вычесть 2 * толщины из ширины, высоты и глубины, и тогда все будет выглядеть нормально.
  • Цилиндр: вычтите толщину из радиуса основания и 2*толщину из высоты.
  • Сфера: вычесть толщину из радиуса
  • Prism: Здесь я немного застрял. Каждый объект получает базовую линию, высоту треугольника и высоту всей призмы. Как я могу использовать это, чтобы найти «внутреннюю призму», представляющую внутренний объем?

Обновление: забыл упомянуть, что при создании объекта мы указываем крайние размеры, а полая часть находится внутри этого. Наоборот не допускается.

Обновить еще раз: треугольник равнобедренный.

Еще одно обновление: перепутаны радиус и диаметр окружности. Исправлено сейчас.


person Community    schedule 02.04.2009    source источник
comment
Для цилиндра и сферы: вы имеете в виду вычесть толщину из радиуса. (Или вычтите 2*толщину из диаметра.)   -  person Jason S    schedule 02.04.2009
comment
Да, конечно. Немного перепутал   -  person    schedule 05.04.2009


Ответы (3)


Я думаю, что вы не можете получить этот результат из имеющихся у вас данных (базовая длина и высота треугольника). Вы должны получить другую информацию, такую ​​как расположение точек или углы на базовой линии.

Редактировать: поскольку треугольник равнобедренный:

Как уже указывал Энтони У.Джонс, внутренний треугольник подобен внешнему треугольнику. Поэтому единственное, что вам нужно, это найти соотношение между ними.

эскиз http://img76.imageshack.us/img76/4164/g2654.png

Его легко найти с высоты. Так как треугольники CQP и ACS подобны

h2 : |PQ| = |AC| : |AS|

куда

|PQ| = h1 (= the thickness of the metal)
|AC| = sqrt(base^2/4+height^2)
|AS| = base/2

Затем вы вычисляете h2, а отношение r = (height - h1 - h2)/height представляет собой отношение между двумя треугольниками. Тогда площадь внутреннего треугольника равна r^2 * area of the outer triangle.

person jpalecek    schedule 02.04.2009
comment
Может быть полезно упомянуть, что треугольник является равнобедренным треугольником, две стороны равны по длине. Это означает, что два угла около базовой линии одинаковы. Больше ничего не дано, и это можно вычислить - person ; 02.04.2009

Получите объем фигур, как если бы они не были полыми, затем получите объем полых только (Форма - Толщина)

вычтите полный объем из полого объема, чтобы получить фактический объем металла.

Пример:

Куб:

Full Volume: Height * Width * Depth

hollow volume: (Height - Thickness) * ( Width - Thickness ) * ( Depth - Thickness)

Volume of the metal used: Full Volume - hollow Volume

Вычислите вес из объема использованного металла.


Предполагая, что ваша призма треугольная и треугольник равносторонний, базовая линия является основанием треугольника, а высота — от базовой линии до противоположной точки (а линия высоты проходит под прямым углом от базовый уровень).

Тогда полный объем будет

fv = (1/2 * baseLine * triangleHeight) * prismHeight 

полый объем будет

hv = (1/2 * (baseline - thickness) * (triangleHeight - thickness)) * (prismHeight - thickness)

После прочтения вашего комментария к jpaleck, может показаться, что ваша базовая линия — это гипотенуза треугольника (самая длинная линия), сказанное выше должно оставаться верным.


person Sekhat    schedule 02.04.2009
comment
Да, это работает для прямоугольного параллелепипеда, и именно так я это сделал. Но как это будет работать для призмы? Было бы правильно просто укоротить каждую из этих длин? - person ; 02.04.2009
comment
Предполагая, что ваша призма треугольная, а треугольник равносторонний. Тогда полный объем будет равен fv = (1/2 * baseLine * TriangleHeight) * prismHeight, полый объем будет (1/2 * (базовая линия - толщина) * (triangleHeight - толщина) * prismHeight - person Sekhat; 02.04.2009
comment
возможно, вам придется умножить толщину на два, чтобы учесть изменения длин линий с каждой стороны. Поскольку толщина равна 10, при рисовании формы, укороченной на 10 в каждом измерении, фактически получается только толщина металла 5 по всему периметру. - person Sekhat; 02.04.2009
comment
@Killersponge: Если бы треугольники были равносторонними, не было бы необходимости указывать высоту призмы, как указывает вопрос. - person AnthonyWJones; 02.04.2009
comment
Конечно. Хотя приведенная выше формула в любом случае верна, предполагается, что базовая линия является одной стороной треугольника, а высота треугольника находится от центра этой линии до точки, противоположной ей. - person Sekhat; 02.04.2009
comment
Я не гений математики, но я совершенно уверен, что вы не можете так просто рассчитать внутреннюю базовую линию. Каждый угол представляет собой трехсторонний митр, указанная высота изменит доступную внутреннюю базовую линию. Представьте, если высота призмы в сумме будет всего 3*толщина, как будет выглядеть внутренний объем? - person AnthonyWJones; 02.04.2009
comment
Мы говорим о такой призме: z.about.com/d/math/1/5/J/F/Triangularprismr.gif На этом рисунке все, к чему у меня есть доступ, это b, h и l. Остальное придется считать. Я нашел mathopenref.com/isosceles.html, так что я могу вычислить стороны. Но тогда что? - person ; 02.04.2009
comment
вам не нужно вычислять стороны, если это просто объем, все, что вам нужно, это площадь треугольника (которая составляет половину площади самого узкого прямоугольника, который вы можете поместить вокруг), умноженная на его общую высоту, а затем сократите значения, которые вы используете. Прочитайте мой ответ еще раз плюс комментарий об умножении толщины - person Sekhat; 02.04.2009
comment
Проблема с вашим подходом заключается в том, что когда вы помещаете металл толщиной h внутрь треугольника, самый узкий прямоугольник, удерживающий треугольник, будет иметь стороны не меньше h, а более чем на 2 * h. - person jpalecek; 02.04.2009
comment
@jpalecek, поэтому комментируйте дальше - person Sekhat; 08.04.2009

Одна вещь, которую вы знаете о внутренней призме, это то, что она будет иметь те же соотношения, что и внешняя призма. Другими словами, зная высоту внутренней призмы, вы можете рассчитать внутреннюю длину основания и оттуда объем.

Вы знаете, что основание будет иметь толщину 1 единицу. Итак, осталось вычислить расстояние от вершины внутренней призмы до вершины внешней призмы.

Это расстояние является гипотенузой прямоугольного треугольника. Углы треугольника известны, так как они зависят от длины основания и высоты. Одна сторона треугольника имеет длину thickness и является перпендикуляром от внутреннего края на внутренней вершине к внешнему краю. (Конечная сторона треугольника находится там, где этот перпендикуляр пересекает внешний край до внешней вершины).

Этой информации достаточно, чтобы использовать стандартный триггер для вычисления длины гипотенузы. Эта длина плюс 1 толщина (для основания), вычтенная из исходной высоты, дает внутреннюю высоту. Соотношение между внутренней и внешней высотой можно применить к базовой длине.

Там, вероятно, более умные способы сделать это, но это был бы мой общий подход.

person AnthonyWJones    schedule 02.04.2009