![]() |
|
![]() ![]() ![]() |
|
Нитонисе |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Пишу программу - расчет многопролетной балки. Пытаюсь применять объектный подход.
Главный объект программы - Балка. У балки может быть от одного до бесконечности Пролетов. В каждом пролете нужно построить Эпюры. Эпюра - это график распределения внутренних усилий по длине Пролета. Эпюры я выделяю в отдельный класс.
В классе Пролет имеется ссылка на объект класса Эпюра.
Как видно из кода класса Пролет (Span) все переменные класса Эпюра (Diagram) задаются вне этого класса. Что уже само по себе не удобно. При этом некоторые другие функции могут обращаться к значениям векторов X,M,Q класса Diagram, например функция отрисовка Эпюры на канве. И опять же, снаружи осуществлять доступ к отдельным элементам этих векторов неудобно. Придется писать свои функции доступа наподобие
Насколько оправдана такая структуризация данных с учетом усложненных методов доступа к данным? При этом класс Diagram обладает собственными функциями, например определение максимальных и минимальных значений из векторов M,Q. Класс может быть использован и в других программах в таком же виде. |
||||||
|
|||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
это выглядит не логичным в рамках ООП.. Добавлено через 1 минуту и 40 секунд
вот читайте что сами написали и сравните с вашим кодом.. ![]() |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
А что выглядит логичным? Определить эти функции в классе Diagram? По задумке класс Diagram - хранилище результатов расчета балки. Тобишь расчетная часть - не входит в сферу компетенции этого хранилища и реализуется в другом классе (классе Span). Либо расчеты сделать вообще внешними по отношении и к Span и к Diagram? |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
а почему если не входит в диаграм, надо обязательно засунуть в span ? Читается как, на основании пролета надо построить эпюры.. А значит пролет входит в состав диаграмы, а не диаграма входит в состав пролета.. |
|||
|
||||
Нитонисе |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Потому что по-моему логично расчеты поместить в этот объект. Для расчета этот объект обладает всем необходимым, а именно - длина пролета, вектор нагрузок (собственно больше ничего и не надо). Результаты же расчета хранятся в векторах X,M,Q. Их можно было бы объявить тоже в классе Span как атрибуты, но меня останавливает то, что точно такие же атрибуты могут быть и в другом классе и в другой программе. Тогда пришлось бы тупо дублировать собственный функции определения максимальных M,Q, что хоть в сущности нетрудоемко, но по сути считаю неправильно.
Первое предложение верно, а вот логика второго не ясна)) |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
||||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Вот есть Пролет (Span). Он характеризуется длиной (int length), приложенной к нему нагрузкой (vector<Load*> loads) и двумя значениями крайних моментов М1 и М2 (в предыдущем посте не указал, но эти значения нужны для расчета всех значений внутренних усилий по длине пролета). Нужно рассчитать внутренние усилия в сечениях балки с заданым интервалом. Набор сечений хранится в векторе X класса Diagram. Вы предлагаете вместо определения расчетной функции внутри этого класса, которая бы оперировала данными этого класса, объявить внешнюю функцию, в которую в качестве аргументов передать следующее: - длину пролета - левый крайний момент М1 - правый крайний момент М2 - вектор нагрузок на пролет - координата сечения, где определяем усилия - ссылку на объект Diagram для записи результата расчета. Не слишком ли много аргументов будет у функции? Ведь внутри класса эта функция работает без передаваемых аргументов вовсе. Хотя можно в качестве аргумента передавать объект Span... только что от этого выигрываем? Это сообщение отредактировал(а) Нитонисе - 15.11.2010, 10:59 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
с чего бы вдруг ?! не обязательно так ![]() Добавлено через 59 секунд
вот уже сколько параметров заменяются одним ![]() |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Ну с того что надо где-то хранить набор сечений)) Ну я выше предложил - можно объект Span передать в качестве аргумента и получить внутри функции доступ ко всем его данным. Только что от этого выигрывается? |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
хочу уточнить: внешнюю по отношению к Span.. но не обязательно абсолютно внешнюю.. |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Непонятно для чего. Хотелось бы иметь возможность применять данные разработки и в других программах, подключая готовый модуль, а не готовый модуль + наборы внешних функций, который вобщем-то не нужны без объекта класса Span, уж коль скоро они оперируют его данными. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
ну так кто против? или это аргумент чтоб запихнуть в Span,и еще к тому же следить за тем когда вызывать функции calc ? Добавлено через 1 минуту и 19 секунд Так нужно учитывать и кому это нужно ..Spanу оно нужно ? |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Так что ж тогда объявлять собственными функциями объекта если не функции, оперирующие собственными данными?) Каков глубинный смысл выносить такие функции за пределы класса? |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
||||
|
||||
Нитонисе |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Конечно нужны. А как же получить усилия в Spanе? Хотелось бы использовать в программе код такого типа
В вашем же случае будет
В чем преимущества этого метода? P.S. Что у вас за манера постоянно править свои посты по всей теме? Думаете так удобнее общаться? Добавлено через 44 секунды
Так расчет внутренних усилий - это и есть поведение объекта. |
||||||
|
|||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
это выражение не вяжется с функцией calcМ Добавлено через 29 секунд нет.. в моем случае будет не так ![]() Добавлено через 2 минуты и 17 секунд расчет усилия в диаграмме ? |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
вот , а в коде у Вас что ? Добавлено через 3 минуты и 27 секунд выкиньте диаграму и слова с корнем calc, но оставьте все что описывали по отношению к пролету - и будет мой случай.. ![]() |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
вот что должно быть в пролете :
Добавлено @ 12:07 диаграмма у вас является результатом операции над спаном ? Добавлено @ 12:08 насчет сечений, я из ваших постов не до конца понял.. принадлежат ли они пролету или чему то другому.. Это сообщение отредактировал(а) mes - 15.11.2010, 12:08 |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Тогда это просто структура данных без поведения. Да. Что-то мне кажется, что ваш подход к программированию не объектный, а структурный. То есть имеется набор неких данных и набор неких функций, работающих с этими данными. Добавлено через 1 минуту и 2 секунды
А куда ж мне диаграмму деть? Она сама по себе не имеет смысла без привязки к конкретному спану. |
|||
|
||||
mes |
|
||||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
разочарую Вас, подход составления классов фактически из гетеров и сеттеров как раз не объектный ![]() Добавлено @ 12:14
ну так для начала опишите словами что есть диаграмма .. пока было только то, что это результат над спаном.. но для чего она нужна, и что входит в ее задачи ? Добавлено @ 12:15
Вы делаете выводы в том, чего я на самом деле не предлагал.. Это сообщение отредактировал(а) mes - 15.11.2010, 12:16 |
||||||
|
|||||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Обязанности диаграммы - определение минимальных и максимальных усилий M,Q, а также проверка на то, есть ли экстремум в эпюре М. Экстремум - это пик графика М. Так как значения М у меня определяются с некоторым интервалом, то экстремум может оказаться как раз в каком-то промежуточке. То есть, я определяю моменты М в сечениях с шагом 50 мм, но от заданой нагрузки экстремум оказался на отметке 2330 мм. Понятно что это значение момента не попадет в вектор М, так как там будут значения при х=2300 и х=2350. Вот внутрення функция диаграммы на основе вектора Q будет выяснять есть ли экстремум М. Ну и плюс еще отрисовка диаграммы на канве. Пока еще не решил где быть этой функции. Ясно пока одно - при отрисовке нужен будет доступ к каждому значению векторов X,M,Q, поэтому желательно, чтобы доступ к этим вектором был упрощен, что может быть в случае если функция отрисовки будет объявлена методом класса диаграммы. Добавлено @ 12:36 Вот картинка с расчетом балки, если это как-то пояснит задачу. Имеется балка (объект Beam) с тремя пролетами (три объекта Span). У каждого объекта Span свой вектор нагрузок Load. В данном случае по одной нагрузке у каждого спана (нагрузки разнотипные). Ниже отрисованы эпюры (диаграммы). Они строятся на базе векторов X,M,Q объекта Diagram каждого из спанов. ![]() Это сообщение отредактировал(а) Нитонисе - 15.11.2010, 12:37 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
||||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
я пока не отрицаю что это входит в обязаности..а сомневаюсь что это обязанности, характеризующие поведение диаграммы.. Добавлено @ 12:50
уточняющий вопрос, пролет, как я понимаю это некая часть балки.. то есть простым языком фактически брусок ? просто в привычном понимании это слово ассоциируется с пространством/расстоянием.. а диаграмма , как и обычно, это график, который может быть где либо отображен.. ? уточняюю, общее ли у нас понимание терминов.. Добавлено через 8 минут и 43 секунды я так понимаю, что в данном случае у нас диаграмма характеристик пролета.. тогда назовем ее SpanDiagramm чтоб не путаться.. Добавлено через 10 минут и 1 секунду опять насчет сечений.. сечение, это диаметр среза пролета или чего то другого ? Добавлено через 14 минут и 5 секунд хотя может быть просто достаточно уточнить, что других диаграмм не предвидеться.. Добавлено через 14 минут и 49 секунд и так у нас есть пролет и диаграмма... диаграмма строиться на основе сечений.. так ? Это сообщение отредактировал(а) mes - 15.11.2010, 12:52 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
вопрос в том как все таки соотносятся сечения и пролет..
является ли утверждение "пролет характеризуется набором сечений" верным ? Это сообщение отредактировал(а) mes - 15.11.2010, 13:08 |
|||
|
||||
Нитонисе |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Пролет - это часть балки между опорами. В данном случае опоры четыре - пролета три.
Диаграмма - это график функции. Эпюра М и эпюра Q - это графики функции. Как и у любого графика, каждая его точка характеризуется двумя координатами (речь идет о двухмерных графиках). В данном случае графики строятся по Х (длина пролета) и М (момент в пролете) и по Х и Q (поперечная сила в пролете). Этот график может быть где угодно отображен по имеющимся значениям X,М,Q.
Сечение - это координата на оси пролета. У меня на картинке на двух графиках вертикальные линии - это и есть сечения. Для построения графика требуется набор сечений (вектор Х), где хранятся координаты пролета, где мы будем определять М и Q, то есть вектор Х может выглядеть таким образом: 0,50,100,150,200... и т.д., это все координаты пролета в милимметрах в данном случае с шагом 50 мм. Добавлено через 1 минуту и 28 секунд У одного пролета может быть сколько угодно сечений. Я могу разбить пролет с шагом 1 метр, а могу и с шагом 1 мм. В первом случае получится очень грубый график, так как шаг в метр очень большой, во втором случае очень детальный, так как шаг очень маленький. |
||||||
|
|||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
то есть набор сечений в сумме составляет длину пролета ? Добавлено через 1 минуту и 40 секунд для чего нужны эти сечения, кроме как указания точки расчета момента ? Добавлено через 5 минут и 6 секунд я так и чувствовал ![]() ![]() Добавлено через 5 минут и 45 секунд постепено картина начала выстраиваться ![]() |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Нет, не в сумме. На пролете 1 метр набор сечений может быть таким: 0,100,200,300,400,500,600,700,800,900,1000. Именно в этих точках будут посчитаны значения M и Q (внутренние усилия). То есть усилия будут определены прямо на левой опоре пролета, затем на расстоянии 100 мм от левой опоры, затем на расстоянии 200 мм и т.к. далее по вектору Х. Интервал - величина переменная, пользователь может всегда ее поменять. Например задать интервал 10 мм и тогда вектор Х примет вид: 0,10,20,30...980,990,1000. Теперь усилия будут определены на левой опоре пролета, на расстоянии 10 мм от левой опоры, на расстоянии 20 мм от левой опоры и т.д.
Для указания где считать M,Q, а также для последующей отрисовки эпюры M и Q. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
еще вопрос.. верно ли "пролет знает(может сообщить) моменты М и Q для любой своей точки " ?
Добавлено через 1 минуту и 33 секунды угу тут понятно.. и формула задания интервала может быть любая, в вашем случае равномерно распределенная.. |
|||
|
||||
Нитонисе |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Это в большей мере расчетная характеристика. То есть мы определяем степень детализации расчета. В контексте задачи пролет - это сущность, которая выполняет некоторые расчеты и в этом смысле набор сечений ему необходим, иначе он не будет знать где вычислять M и Q. Добавлено через 5 минут и 13 секунд
Да, у него будет функция типа getM(int X), где X - координата пролета, где требуется определить момент.
Алгоритм деления на интервалы такой: - пользователь задает максимальный интервал - функция Span::createSectionsSet() начинает создавать вектор X класса Diagram, при этом анализируется вектор нагрузок Load, ниже поясню как. Допустим пользователь задал интервал в 50 мм, а у нас есть точечная нагрузка на пролет, расположенная в 30 мм от опоры. В этом случае точка 30 мм тоже будет помещена в вектор Х. То есть получится: 0,30,50,150,200 и т.д. |
||||||
|
|||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
значит на один пролет у нас может быть несколько диаграмм построенных разным образом..
ну в принципе все..можно строить классы ![]() Добавлено через 2 минуты и 42 секунды и возвращает моменты в указанной точке.. |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
В принципе да. Только каждый объект Diagram соответствует вектору нагрузок. То есть, если на пролет задан только один вектор нагрузок, то объект диаграмм может быть в единственном числе, ну разве что наплодить таких же объектов с другим интервалом сечений, в чем, вобщем-то, нет смысла. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
и строиться на основе промежутка и интервала Добавлено через 1 минуту и 22 секунды
может у вас будет два графика разных сечений для одного пролета.. главное не в нужности, а в логичности происходящего.. |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
На самом деле ему в обязанности можно вменить гораздо больше, я просто все не расписываю, чтобы не усложнять понимание, да и со многими функциями еще сам не определился. Нет, промежуток и интервал - это в сущности одно и то же. График строится на основе X и M (эпюра М) и X и Q (эпюра Q). При этом при построении графика будут учитываться экстремумы, но о них пока не говорю, так как это усложнит картину.
Ну это возможно - имея пролет с нагрузкой построить сотню диаграмм M и Q с разными интервалами. Но это только если для понимания сути задачи, так как на практике это не нужно, диаграммы (эпюры) будут строиться с заданным интервалом в единственном числе. Другое дело, что я могу сменить нагрузку на пролет - диаграммы создадутся и отрисуются заново. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
я имел ввиду применительно к обсужденному в теме.. ![]() Добавлено через 1 минуту и 15 секунд сорри за опечатку.. span инстинктивно обратно перевел как промежуток ) на основе пролета и интервала ![]() |
|||
|
||||
Нитонисе |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Спан не нужен. Для построения графика нужны координаты его точек. В данном случае X,M и X,Q. То есть можно сказать объекту класса Diagram: "Рисуемся отсель и с таким масщтабом" - и он рисуется. В коде примерно так
|
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
ага, понимание самое главное ![]()
а как же длина пролета ? нагрузки на него ? как без этого то построить диаграмму ![]() |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
||||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
||||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
||||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
с порядком зависимости сущностей.. В первом примере кода диаграмма является составляющей пролета. плюс расчет эпюры производится спаном, что не соответствует дальнейшим описаниям.. Добавлено через 1 минуту и 13 секунд
Смысл есть.. так как эпюры не являются частью балки или спана.. Добавлено через 7 минут и 11 секунд а вот где Вы увидели неудобства ? приведите последнее представление вашего кода ![]() Добавлено через 8 минут и 1 секунду то что важно для : span beam и diagramm |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Предполагаю такую структуру
Не то что бы частью, а сопутствующим объектом имеющим четкую ассоциацию с конкретным объектом класса Span. Неудобства в том, что при работе функции greateXSet (создание набора сечений) на первом этапе данные будут заноситься во временный ыектор, а потом весь этот вектор будет копироваться в атрибут Х Diagram. Напрямую работать с вектором Х неудобно, так как потребует создания функций типа setX(int index, int value). Примерно такая же функция для считывания данных из векторов. Если представить что в программе будет 10 пролетов и у каждого пролета 100 сечений, то такие усложненные схемы доступа мне видятся неоптимальными, ведь будь эти векторы X,M,Q данными класса Span, то доступ бы был намного проще. |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
У меня дежавю? Или мы наблюдаем 2й сезон мыльной оперы?
Первый назывался 'Изобретение Паттерна Multimethod в 108 сообщениях' Второй видимо будет называться 'Изобретение Паттерна Visitor в 47 (пока) сообщениях' 2 ТС: Почитайте какую нибудь книжку по Паттернам Проектирования и заканчивайте вынос мозга участникам конфы. Все, что вам тут объясняют описано в этих Паттернах гораздо более полно и развернуто. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
ну так это ж не члены пролета.. Добавлено через 11 минут и 22 секунды ну эти неудобства вы сами себе придумали ![]() Добавлено через 11 минут и 46 секунд а можно и удобно сделать ![]() |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Что именно там описано? Тут вопрос выделения классов и установки между ними отношений. При чем тут паттерны? А куда их деть?)) Ну например? Как снаружи добраться к пятому элементу вектора, объявленного protected? |
|||
|
||||
mes |
|
||||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
Это тоже относится к паттернам (архитектурным) Добавлено через 1 минуту и 7 секунд
все зависит от интерфейса ![]() Добавлено через 3 минуты и 38 секунд
я правлю от опечаток, и двусмысленностей.. но не меняю смысла ![]() Добавлено через 5 минут и 6 секунд туда где им место.. в вашем случае в диаграмме... (если конечно ж они вобще нужны в таком виде ) |
||||||
|
|||||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
||||
|
||||
Нитонисе |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Паттерны - это некие наработки, которые можно применять в других проектах, насколько я понял. В моем случае эта задача вторична на данном этапе. Первично - организация удобных связей медлу классами. вот интерфейс класса Diagram
Только я не удивлюсь, если где-нибудь на второй странице вы добавили к своему посту еще какой-то вопрос, который для меня окажется незамеченным по понятным причинам) Добавлено через 1 минуту и 3 секунды
О, если так, то это то что нужно) посоветуйте автора. |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
Добавлено через 2 минуты и 58 секунд вопросы добавляются к посту автоматически.. в течении какого то времени, если еще никто не написал.. а не после редактирования.. редактированием я лишь иногда убираю кучу ненужных слов типо "добавлено".. Добавлено через 3 минуты и 43 секунды что делает setX ? Это сообщение отредактировал(а) mes - 15.11.2010, 16:38 |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Да уж советовал, и ссылки давал. Все впустую
![]() Вот, классика:
Еще WiKi http://c2.com/cgi/wiki?CategoryPattern Очень неплохая статья |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
он делает X[index] = val Вы на мультиметоды давали ссылки. тема интересная, но я ее пока не потяну)) А вот это скачал, буду образовываться) |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
это вопрос был не о реализации, а о смысле... для чего нужно это действие ? |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
a интервала не достаточно, для расчета этого вектора ? если нужен именно вектор, то чем не устраивает: на входе: вектор сечений и пролет, на выходе эпюра/ы ? |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Для заполнения вектора Х значениями нужен еще вектор нагрузок.
Вектор сечений еще нужно задать, а задается он функцией класса Span. Вот тут и выбор варианта - либо пользование setX для работы напрямую с вектором X класса Diagram, либо создание временного вектора внутри функции createXSet, заполнении его значениями, а потом копирование в вектор Х Diagram. |
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
Span то тут при чем ? он лишь источник данных, а не активный участник..
то есть третьего варианта не дано ? |
||||
|
|||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
В спан содержится указатель на вектор нагрузок, необходимый для формирования Х. Размещать этот указатель в объекте Diagram нелогично, потому что он представляет собой хранилище результатов расчета. В данной системе классов другого варианта не вижу. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
ну, а span передается диаграме, для формирования ее данных.. в чем проблема то ? |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Тут уже обратная проблема, напрямую не обратиться к важным параметрам - длина пролета и вектор нагрузок объекта Span при формировании вектора Х, хотя это проще, чем косвенно обращаться к вектору Х из функции объекта Span. При этом остается проблема доступа ко всем трем векторам X,M,Q из других функций. То же рисование. Или предлагаете рисование объявить методом класса Diagram? Но это нелогично, потому что Diagram - это хранилище результатов расчета, а рисунок - это графическое отображение результатов расчета. |
|||
|
||||
mes |
|
||||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
так может стоит над этой проблемой подумать ? кстати что мешает напрямую обратиться ?
не вижу проблемы? сформулируйте интерфейс так, чтоб это не было проблемой.. не важно.. зависит от модели "рисовальщика"..
да, если нужно отделить данные от вида, то рисовальшик должен быть отдельным ![]() Добавлено через 3 минуты и 15 секунд а кажись понял.. Вам мешает слово protected ? как самый простой вариант, откройте возврат константной ссылки на него ![]() Добавлено через 4 минуты и 20 секунд раз существуют понятия, которые используются более чем в одном месте, значит должен быть соответствующий тип с нужным интерфейсом .. Добавлено через 5 минут и 9 секунд для вектора можно затайпдефить std::vector, а можно написать свою обертку, если требуется более жесткие гарантии.. |
||||||
|
|||||||
Нитонисе |
|
||||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
То, что и длина и вектор нагрузок protected в классе Span.
Сделать эти вектора public?
Не понял. Добавлено через 7 минут и 20 секунд
Опять не понял.
И это тоже не понял) |
||||||||||
|
|||||||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
вариантов реализаций куча.. зависит от требований пролета предъявляемых к хранимому вектору.. ну самый самый простой вариант, устанавливать весь вектор нагрузки за один раз, т.е интерфейс будет представлять SetVector(), GetVector() второй вариант не хранить вектор в пролете, а отдавать ему только для расчета моментов.. есть и другие варианты, но для этой задачи будут избыточны.. Добавлено @ 21:05 а открыть на чтение - это vector const& get_vector() { return m_vector; } Добавлено @ 21:06 так как вектор нагрузки фактически не принадлежит спану, а устанавливается на него "голосую" за второй вариант.. ![]() Это сообщение отредактировал(а) mes - 15.11.2010, 21:35 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
еще вопрос, нагрузка может быть смежной, т.е лежать более чем на одном спане ?
и диаграмма одного спана, как нибудь зависит от состояния другого спана ? Добавлено через 3 минуты и 55 секунд и диаграмма это в принципе конечная цель ? т.е. задаете балку, сколько в ней спанов, ставите опоры прикладываете нагрузку... и получаете диаграмму и другие моменты, которые отображаете юзеру ? Добавлено через 8 минут и 48 секунд спаны и балка представлены в двумерном варианте статично или полиморфно ? нагрузка нужна только для вычисления крайних моментов на опорах, или для эпюры , мах/мин, тоже ? или график строиться исходя из значений крайних моментов ? |
|||
|
||||
Нитонисе |
|
||||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Нет.
Впринципе зависит, но эта зависимость определяется на стадии вычисления опорных моментов. Далее эти опорные моменты записываются в переменные М1 и М2 объектов класса Span и вычисление внутренних усилий в спане уже от смежных с ним спанов никак не зависит. Да.
Да.
Не совсем понял.
Для того чтобы определить макс и мин моменты нужно тупо перебрать все значения вектора М, для этого естественно нагрузка не нужна. Но есть один нюанс - максимальный момент может попасть на координату спана, не включенную в вектор Х, то есть потерянный для расчета. Для того, чтобы выяснить, потеряли ли мы такой момент - нужно проанализировать вектор Q, тут нагрузка нам также не нужна. А вот если анализируя эпюру Q выяснили, что у нас имеется потерянный момент (экстремум диаграммы М), то нужно вычислить координату этого экстремума, вот тут уже нам понадобится нагрузка. Далее, имея координату максимального момента, выполняем функцию типа getM(int X), где Х - координата спана и получаем искомый максимальный момент. Правда найденный момент не всегда будет максимальным, но всегда будет значением экстремума функции. На картинке, которую я выкладывал, во втором пролете есть такой экстремум, но как видно - он не максимальный. Только после этих вычислений мы приступаем к перебору значений вектора М, а также не забываем проверить и экстремальный момент для вычисления Ммах, это простой перебор и нагрузка тут не нужна. Добавлено через 2 минуты и 8 секунд Вычисление опорных моментов - это расчет более высокого уровня, там оперируем всеми спанами, всей нагрузкой. Вычисление же пролетных моментов (вектор М) - это уже локальная задача отдельно взятого спана с его нагрузкой. |
||||||||||
|
|||||||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
бывают разновидности пролетов или балок ? или различие только в опорах и нагрузке ? Добавлено @ 11:08 не до конца понял, имея M1 и M2 (моменты на опорах) можно построить эпюру или еще что то надо ? (ну естественно интервал и длина пролета у нас есть) Добавлено через 7 минут и 7 секунд
т.е без знаний балки нам не обойтись.. Это сообщение отредактировал(а) mes - 16.11.2010, 11:08 |
|||
|
||||
Нитонисе |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Вообще говоря для пролета (Span) не важны и опоры. Один пролет от другого отличается длиной, вектором нагрузок и опорными моментами. Знать о том какие у нас опоры важно на стадии обсчета всей балки при определении опорных моментов.
Надо еще нагрузка. Я вот думаю, может сечения балки тоже выделить в класс
из функционала - предоставление информации о своих данных... или это уже лишнее |
||||||
|
|||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
и так у нас есть..
входные данные - то что может изменять пользователь : балка состоящая из пролетов вектор нагрузки для каждого пролета интервал для эпюры выходные - то что получается в результате расчетов : моменты (крайние , мин, макс, и эпюры ) примерно так ? ничего важного не упущено ? Добавлено через 4 минуты и 8 секунд
как класс это лишнее, а вот как структуру данных вполне.. |
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Примерно так. Результаты расчетов хранятся в Diagram - это точки пролетов, где считались усилия, собственно сами эти усилия, а также координаты экстремума эпюры М (если таковой имеется) и само значение момента в точке экстремума. Ну и вычленение максимальных и минимальных значений внутренних усилий. Крайние моменты как таковые не выделяются, они войдут в эпюру М как перый элемент и последний. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 6 Всего: 250 |
ну вот не усложняйте тогда себе жизнь и отделите котлет от мух ..
вот например такой набросок интерфейса :
|
|||
|
||||
Нитонисе |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Не понравилась что-то мне эта структура классов, решил все переиначить)
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |