Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вчленение объектов предметной области, особенности ООП 
:(
    Опции темы
Нитонисе
Дата 15.11.2010, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Пишу программу - расчет многопролетной балки. Пытаюсь применять объектный подход.
Главный объект программы - Балка. У балки может быть от одного до бесконечности Пролетов. В каждом пролете нужно построить Эпюры. Эпюра - это график распределения внутренних усилий по длине Пролета.
Эпюры я выделяю в отдельный класс.
Код

class Diagram
{
  protected:
    std::vector<int> X; // набор сечений Пролета, где мы определяем внутренние усилия, сечений может быть много, например 100
    std::vector<float> M; // значение момента в сечении
    std::vector<float> Q; // значение поперечной силы в сечении
};

В классе Пролет имеется ссылка на объект класса Эпюра.
Код

class Span
{
  public:
    void setX(); // задает набор сечений и передает скомпанованный вектор объекту Эпюра
    void calcM(); // рассчитывает моменты в сечениях и пепредает скомпанованный вектор объекту Эпюра
    void calcQ(); // рассчитывает поперечные силы в сечениях и передает скомпанованный вектор объекту Эпюра

  protected:
    Diagram *diagram;
};

Как видно из кода класса Пролет (Span) все переменные класса Эпюра (Diagram) задаются вне этого класса. Что уже само по себе не удобно. При этом некоторые другие функции могут обращаться к значениям векторов X,M,Q класса Diagram, например функция отрисовка Эпюры на канве. И опять же, снаружи осуществлять доступ к отдельным элементам этих векторов неудобно. Придется писать свои функции доступа наподобие
Код

int Diagram::getX(int index)
{
  return X[index];
}

Насколько оправдана такая структуризация данных с учетом усложненных методов доступа к данным? При этом класс Diagram обладает собственными функциями, например определение максимальных и минимальных значений из векторов M,Q. Класс может быть использован и в других программах в таком же виде.
PM MAIL   Вверх
mes
Дата 15.11.2010, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  08:51 Найти цитируемый пост)
class Span
{
  public:
    void setX(); // задает набор сечений и передает скомпанованный вектор объекту Эпюра
    void calcM(); // рассчитывает моменты в сечениях и пепредает скомпанованный вектор объекту Эпюра
    void calcQ(); 


это выглядит не логичным в рамках ООП..

Добавлено через 1 минуту и 40 секунд
Цитата(Нитонисе @  15.11.2010,  08:51 Найти цитируемый пост)
Главный объект программы - Балка. У балки может быть от одного до бесконечности Пролетов. В каждом пролете нужно построить Эпюры.

вот читайте что сами написали и сравните с вашим кодом.. smile



--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  09:56 Найти цитируемый пост)
это выглядит не логичным в рамках ООП.. 

А что выглядит логичным? Определить эти функции в классе Diagram? По задумке класс Diagram - хранилище результатов расчета балки. Тобишь расчетная часть - не входит в сферу компетенции этого хранилища и реализуется в другом классе (классе Span).

Либо расчеты сделать вообще внешними по отношении и к Span и к Diagram?
PM MAIL   Вверх
mes
Дата 15.11.2010, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  09:01 Найти цитируемый пост)
 Определить эти функции в классе Diagram? По задумке класс Diagram - хранилище результатов расчета балки. Тобишь расчетная часть - не входит в сферу компетенции этого хранилища и реализуется в другом классе (классе Span).

а почему если не входит в диаграм, надо обязательно засунуть в span ?


Цитата(Нитонисе @  15.11.2010,  08:51 Найти цитируемый пост)
. В каждом пролете нужно построить Эпюры.

Читается как, на основании пролета надо построить эпюры.. 
А значит пролет входит в состав диаграмы, а не диаграма входит в состав пролета.. 



--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  10:09 Найти цитируемый пост)
а почему если не входит в диаграм, надо обязательно засунуть в span ?

Потому что по-моему логично расчеты поместить в этот объект. Для расчета этот объект обладает всем необходимым, а именно - длина пролета, вектор нагрузок (собственно больше ничего и не надо). Результаты же расчета хранятся в векторах X,M,Q. Их можно было бы объявить тоже в классе Span как атрибуты, но меня останавливает то, что точно такие же атрибуты могут быть и в другом классе и в другой программе. Тогда пришлось бы тупо дублировать собственный функции определения максимальных M,Q, что хоть в сущности нетрудоемко, но по сути считаю неправильно.

Цитата(mes @  15.11.2010,  10:09 Найти цитируемый пост)
Читается как, на основании пролета надо построить эпюры.. А значит пролет входит в состав диаграмы, а не диаграма входит в состав пролета.. 

Первое предложение верно, а вот логика второго не ясна))
PM MAIL   Вверх
mes
Дата 15.11.2010, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  09:23 Найти цитируемый пост)
 Для расчета этот объект обладает всем необходимым, а именно - длина пролета, вектор нагрузок (собственно больше ничего и не надо). 

расчет совершается над пролетом, а не пролетом.. 


--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  10:34 Найти цитируемый пост)
расчет совершается над пролетом, а не пролетом.. 

Вот есть Пролет (Span). Он характеризуется длиной (int length), приложенной к нему нагрузкой (vector<Load*> loads) и двумя значениями крайних моментов М1 и М2 (в предыдущем посте не указал, но эти значения нужны для расчета всех значений внутренних усилий по длине пролета). Нужно рассчитать внутренние усилия в сечениях балки с заданым интервалом. Набор сечений хранится в векторе X класса Diagram.
Вы предлагаете вместо определения расчетной функции внутри этого класса, которая бы оперировала данными этого класса, объявить внешнюю функцию, в которую в качестве аргументов передать следующее:
 - длину пролета
 - левый крайний момент М1
 - правый крайний момент М2
 - вектор нагрузок на пролет
 - координата сечения, где определяем усилия
 - ссылку на объект Diagram для записи результата расчета.
Не слишком ли много аргументов будет у функции? Ведь внутри класса эта функция работает без передаваемых аргументов вовсе.

Хотя можно в качестве аргумента передавать объект Span... только что от этого выигрываем?

Это сообщение отредактировал(а) Нитонисе - 15.11.2010, 10:59
PM MAIL   Вверх
mes
Дата 15.11.2010, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  09:57 Найти цитируемый пост)
Набор сечений хранится в векторе X класса Diagram.

с чего бы вдруг ?! 

Цитата(Нитонисе @  15.11.2010,  09:57 Найти цитируемый пост)
в которую в качестве аргументов передать следующее:
 - длину пролета
 - левый крайний момент М1
 - правый крайний момент М2
 - вектор нагрузок на пролет
 - ссылку на объект Diagram для записи результата расчета.

не обязательно так smile

Добавлено через 59 секунд
Цитата(Нитонисе @  15.11.2010,  09:57 Найти цитируемый пост)
Вот есть Пролет (Span). Он характеризуется длиной (int length), приложенной к нему нагрузкой (vector<Load*> loads) и двумя значениями крайних моментов М1 и М2 

вот уже сколько параметров заменяются одним smile


--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  11:00 Найти цитируемый пост)
с чего бы вдруг ?! 

Ну с того что надо где-то хранить набор сечений))

Цитата(mes @  15.11.2010,  11:00 Найти цитируемый пост)
не обязательно так 

Ну я выше предложил - можно объект Span передать в качестве аргумента и получить внутри функции доступ ко всем его данным. Только что от этого выигрывается?
PM MAIL   Вверх
mes
Дата 15.11.2010, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  09:57 Найти цитируемый пост)
объявить внешнюю функцию, 

хочу уточнить: внешнюю по отношению к Span.. но не обязательно абсолютно внешнюю.. 




--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  11:01 Найти цитируемый пост)
хочу уточнить: внешнюю по отношению к Span.. но не обязательно абсолютно внешнюю.. 

Непонятно для чего. Хотелось бы иметь возможность применять данные разработки и в других программах, подключая готовый модуль, а не готовый модуль + наборы внешних функций, который вобщем-то не нужны без объекта класса Span, уж коль скоро они оперируют его данными.
PM MAIL   Вверх
mes
Дата 15.11.2010, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  10:06 Найти цитируемый пост)
а не готовый модуль + наборы внешних функций

ну так кто против? 
или это аргумент чтоб запихнуть в Span,и еще к тому же следить за тем когда вызывать функции calc ?

Добавлено через 1 минуту и 19 секунд
Цитата(Нитонисе @  15.11.2010,  10:06 Найти цитируемый пост)
 который вобщем-то не нужны без объекта класса Span

Так нужно учитывать и кому это нужно ..Spanу оно нужно ? 


--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  11:09 Найти цитируемый пост)
ну так кто против? или это аргумент чтоб запихнуть в Span,и еще к тому же следить за тем когда вызывать функции calc ?

Так что ж тогда объявлять собственными функциями объекта если не функции, оперирующие собственными данными?) Каков глубинный смысл выносить такие функции за пределы класса?
PM MAIL   Вверх
mes
Дата 15.11.2010, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  10:12 Найти цитируемый пост)
Так что ж тогда объявлять собственными функциями объекта если не функции, оперирующие собственными данными?)

функции описывающие внутреннее поведение объекта, а не операции над ним.. 



Это сообщение отредактировал(а) mes - 15.11.2010, 11:36


--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  11:09 Найти цитируемый пост)
Так нужно учитывать и кому это нужно ..Spanу оно нужно ? 

Конечно нужны. А как же получить усилия в Spanе?
Хотелось бы использовать в программе код такого типа
Код

// создаем вектор нагрузок
vector<Load*> loads;

// заполняем вектор нагрузок (в данном случае всего одной)
Load *load;
load = new Load;
loads.push_back(load);

// работаем с объектом Span
Span s; // создали объект
s.setLoad(loads);  // приложили нагрузку
s.calcM();  // посчитали моменты в сечениях
s.drawM();  // нарисовали эпюру моментов


В вашем же случае будет
Код

Span s;
s.setLoad(loads);
calcM(s);  // внешняя функция
s.drawM();

В чем преимущества этого метода?

P.S. Что у вас за манера постоянно править свои посты по всей теме? Думаете так удобнее общаться?

Добавлено через 44 секунды
Цитата(mes @  15.11.2010,  11:36 Найти цитируемый пост)
функции описывающие внутреннее поведение объекта, а не операции над ним.. 

Так расчет внутренних усилий - это и есть поведение объекта.
PM MAIL   Вверх
mes
Дата 15.11.2010, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  10:41 Найти цитируемый пост)
Конечно нужны. А как же получить усилия в Spanе?

это выражение не вяжется с функцией calcМ

Добавлено через 29 секунд
Цитата(Нитонисе @  15.11.2010,  10:41 Найти цитируемый пост)
В вашем же случае будет

нет.. в моем случае будет не так smile

Добавлено через 2 минуты и 17 секунд
Цитата(Нитонисе @  15.11.2010,  10:41 Найти цитируемый пост)
Так расчет внутренних усилий - это и есть поведение объекта. 

расчет усилия в  диаграмме ?


--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  11:48 Найти цитируемый пост)
это выражение не вяжется с функцией calcМ

Почему?

Цитата(mes @  15.11.2010,  11:48 Найти цитируемый пост)
нет.. в моем случае будет не так

А как будет в вашем случае?

Цитата(mes @  15.11.2010,  11:48 Найти цитируемый пост)
расчет усилия в  диаграмме ?

В пролете. Диаграмма - это результат расчета усилий в пролете.
PM MAIL   Вверх
mes
Дата 15.11.2010, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  10:57 Найти цитируемый пост)
В пролете. Диаграмма - это результат расчета усилий в пролете. 

вот , а в коде у Вас что ?

Добавлено через 3 минуты и 27 секунд
Цитата(Нитонисе @  15.11.2010,  10:57 Найти цитируемый пост)
А как будет в вашем случае?

выкиньте диаграму и слова с корнем calc, но оставьте все что описывали по отношению к пролету  - и будет мой случай.. smile



--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  12:00 Найти цитируемый пост)
вот , а в коде у Вас что ? 

А что у меня в коде? Именно так в коде и есть.
PM MAIL   Вверх
mes
Дата 15.11.2010, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



вот что должно быть в пролете : 
Цитата(Нитонисе @  15.11.2010,  09:57 Найти цитируемый пост)
Вот есть Пролет (Span). Он характеризуется длиной (int length), приложенной к нему 
нагрузкой (vector<Load*> loads) и двумя значениями крайних моментов М1 и М2


Добавлено @ 12:07
Цитата(Нитонисе @  15.11.2010,  11:04 Найти цитируемый пост)
А что у меня в коде? Именно так в коде и есть. 

диаграмма у вас является результатом операции над спаном ?

Добавлено @ 12:08
насчет сечений, я из ваших постов не до конца понял.. принадлежат ли они пролету или чему то другому..


Это сообщение отредактировал(а) mes - 15.11.2010, 12:08


--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  12:06 Найти цитируемый пост)
вот что должно быть в пролете

Тогда это просто структура данных без поведения. 

Цитата(mes @  15.11.2010,  12:06 Найти цитируемый пост)
диаграмма у вас является результатом операции над спаном ?

Да.

Что-то мне кажется, что ваш подход к программированию не объектный, а структурный. То есть имеется набор неких данных и набор неких функций, работающих с этими данными.

Добавлено через 1 минуту и 2 секунды
Цитата(mes @  15.11.2010,  12:00 Найти цитируемый пост)
выкиньте диаграму и слова с корнем calc, но оставьте все что описывали по отношению к пролету  - и будет мой случай.. 

А куда ж мне диаграмму деть? Она сама по себе не имеет смысла без привязки к конкретному спану.
PM MAIL   Вверх
mes
Дата 15.11.2010, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  11:11 Найти цитируемый пост)
то-то мне кажется, что ваш подход к программированию не объектный, а структурный. Т

разочарую Вас, подход составления классов фактически из гетеров и сеттеров как раз не объектный smile

Добавлено @ 12:14
Цитата(Нитонисе @  15.11.2010,  11:11 Найти цитируемый пост)
А куда ж мне диаграмму деть? Она сама по себе не имеет смысла без привязки к конкретному спану. 

ну так для начала опишите словами что есть диаграмма .. пока было только то, что это результат над спаном.. но для чего она нужна, и что входит в ее задачи ?

Добавлено @ 12:15
Цитата(Нитонисе @  15.11.2010,  11:11 Найти цитируемый пост)
. То есть имеется набор неких данных и набор неких функций, работающих с этими данными.

Вы делаете выводы в том, чего я на самом деле не предлагал.. 

Это сообщение отредактировал(а) mes - 15.11.2010, 12:16


--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  12:13 Найти цитируемый пост)
ну так для начала опишите словами что есть диаграмма .. пока было только то, что это результат над спаном.. но для чего она нужна, и что входит в ее задачи ?

Обязанности диаграммы - определение минимальных и максимальных усилий M,Q, а также проверка на то, есть ли экстремум в эпюре М. Экстремум - это пик графика М. Так как значения М у меня определяются с некоторым интервалом, то экстремум может оказаться как раз в каком-то промежуточке. То есть, я определяю моменты М в сечениях с шагом 50 мм, но от заданой нагрузки экстремум оказался на отметке 2330 мм. Понятно что это значение момента не попадет в вектор М, так как там будут значения при х=2300 и х=2350. Вот внутрення функция диаграммы на основе вектора Q будет выяснять есть ли экстремум М. Ну и плюс еще отрисовка диаграммы на канве. Пока еще не решил где быть этой функции. Ясно пока одно - при отрисовке нужен будет доступ к каждому значению векторов X,M,Q, поэтому желательно, чтобы доступ к этим вектором был упрощен, что может быть в случае если функция отрисовки будет объявлена методом класса диаграммы.

Добавлено @ 12:36
Вот картинка с расчетом балки, если это как-то пояснит задачу.

Имеется балка (объект Beam) с тремя пролетами (три объекта Span). У каждого объекта Span свой вектор нагрузок Load. В данном случае по одной нагрузке у каждого спана (нагрузки разнотипные). 

Ниже отрисованы эпюры (диаграммы). Они строятся на базе векторов X,M,Q объекта Diagram каждого из спанов.

user posted image

Это сообщение отредактировал(а) Нитонисе - 15.11.2010, 12:37
PM MAIL   Вверх
mes
Дата 15.11.2010, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  11:31 Найти цитируемый пост)
Обязанности диаграммы - определение минимальных и максимальных усилий M,Q, а также проверка на то, есть ли экстремум в эпюре М

сомнительно звучит то, что это обязанности диаграммы.. 

Цитата(Нитонисе @  15.11.2010,  11:31 Найти цитируемый пост)
Pока еще не решил где быть этой функции. 

давайте для начала сделаем span.. 



--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  12:37 Найти цитируемый пост)
сомнительно звучит то, что это обязанности диаграммы.. 

Почему же? Ведь это просто тупой перебор значений соответствующих векторов и сохранение максимальных значений в Mmax и Qmax, являющихся также атрибутами класса Diagram.
PM MAIL   Вверх
mes
Дата 15.11.2010, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  11:39 Найти цитируемый пост)
Почему же? Ведь это просто тупой перебор значений соответствующих векторов и сохранение максимальных значений в Mmax и Qmax, являющихся также атрибутами класса Diagram. 

я пока не отрицаю что это входит в обязаности..а сомневаюсь что это  обязанности, характеризующие поведение диаграммы..

Добавлено @ 12:50
Цитата(Нитонисе @  15.11.2010,  11:31 Найти цитируемый пост)
Имеется балка (объект Beam) с тремя пролетами (три объекта Span)

уточняющий вопрос, пролет, как я понимаю это некая часть балки.. то есть простым языком фактически брусок ?
просто в привычном понимании это слово ассоциируется с пространством/расстоянием..


а диаграмма , как и обычно,  это график, который может быть где либо отображен..  ?

уточняюю,  общее ли у нас понимание терминов.. 

Добавлено через 8 минут и 43 секунды
я так понимаю, что в данном случае у нас диаграмма характеристик пролета.. 
тогда назовем ее SpanDiagramm чтоб не путаться..

Добавлено через 10 минут и 1 секунду
опять насчет сечений.. сечение, это диаметр среза пролета или чего то другого  ?

Добавлено через 14 минут и 5 секунд
Цитата(mes @  15.11.2010,  11:45 Найти цитируемый пост)
огда назовем ее SpanDiagramm чтоб не путаться..

хотя может быть просто достаточно уточнить, что других диаграмм не предвидеться..

Добавлено через 14 минут и 49 секунд
и так у нас есть пролет и диаграмма... диаграмма строиться на основе сечений.. так ?


Это сообщение отредактировал(а) mes - 15.11.2010, 12:52


--------------------
PM MAIL WWW   Вверх
mes
Дата 15.11.2010, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



вопрос в том как все таки соотносятся сечения и пролет.. 
является ли утверждение  "пролет характеризуется набором сечений" верным ?


Это сообщение отредактировал(а) mes - 15.11.2010, 13:08


--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  12:45 Найти цитируемый пост)
уточняющий вопрос, пролет, как я понимаю это некая часть балки.. то есть простым языком фактически брусок ?

Пролет - это часть балки между опорами. В данном случае опоры четыре - пролета три.

Цитата(mes @  15.11.2010,  12:45 Найти цитируемый пост)
а диаграмма , как и обычно,  это график, который может быть где либо отображен..  ?

Диаграмма - это график функции. Эпюра М и эпюра Q - это графики функции. Как и у любого графика, каждая его точка характеризуется двумя координатами (речь идет о двухмерных графиках). В данном случае графики строятся по Х (длина пролета) и М (момент в пролете) и по Х и Q (поперечная сила в пролете). Этот график может быть где угодно отображен по имеющимся значениям X,М,Q.

Цитата(mes @  15.11.2010,  12:45 Найти цитируемый пост)
опять насчет сечений.. сечение, это диаметр среза пролета или чего то другого  ?

Сечение - это координата на оси пролета. У меня на картинке на двух графиках вертикальные линии - это и есть сечения. Для построения графика требуется набор сечений (вектор Х), где хранятся координаты пролета, где мы будем определять М и Q, то есть вектор Х может выглядеть таким образом: 0,50,100,150,200...  и т.д., это все координаты пролета в милимметрах в данном случае с шагом 50 мм.

Добавлено через 1 минуту и 28 секунд
Цитата(mes @  15.11.2010,  13:01 Найти цитируемый пост)
вопрос в том как все таки соотносятся сечения и пролет.. 

У одного пролета может быть сколько угодно сечений. Я могу разбить пролет с шагом 1 метр, а могу и с шагом 1 мм. В первом случае получится очень грубый график, так как шаг в  метр очень большой, во втором случае очень детальный, так как шаг очень маленький.
PM MAIL   Вверх
mes
Дата 15.11.2010, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  12:07 Найти цитируемый пост)
Сечение - это координата на оси пролет

то есть набор сечений в сумме составляет длину пролета ?

Добавлено через 1 минуту и 40 секунд
для чего нужны эти сечения, кроме как указания точки расчета момента ?

Добавлено через 5 минут и 6 секунд
Цитата(Нитонисе @  15.11.2010,  12:07 Найти цитируемый пост)
У одного пролета может быть сколько угодно сечений. 

я так и чувствовал smile значит спан не обладает сечениями smile

Добавлено через 5 минут и 45 секунд
постепено картина начала выстраиваться smile



--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  13:09 Найти цитируемый пост)
то есть набор сечений в сумме составляет длину пролета ?

Нет, не в сумме. На пролете 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 мм от левой опоры и т.д.


Цитата(mes @  15.11.2010,  13:09 Найти цитируемый пост)
для чего нужны эти сечения, кроме как указания точки расчета момента ?

Для указания где считать M,Q, а также для последующей отрисовки эпюры M и Q.
PM MAIL   Вверх
mes
Дата 15.11.2010, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



еще вопрос.. верно ли "пролет знает(может сообщить) моменты М и Q для любой своей точки  " ?

Добавлено через 1 минуту и 33 секунды
Цитата(Нитонисе @  15.11.2010,  12:17 Найти цитируемый пост)
На пролете 1 метр набор сечений может быть таким

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



--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  13:01 Найти цитируемый пост)
является ли утверждение  "пролет характеризуется набором сечений" верным ?

Это в большей мере расчетная характеристика. То есть мы определяем степень детализации расчета. В контексте задачи пролет - это сущность, которая выполняет некоторые расчеты и в этом смысле набор сечений ему необходим, иначе он не будет знать где вычислять M и Q.

Добавлено через 5 минут и 13 секунд
Цитата(mes @  15.11.2010,  13:17 Найти цитируемый пост)
еще вопрос.. верно ли "пролет знает(может сообщить) моменты М и Q для любой своей точки  " ?

Да, у него будет функция типа getM(int X), где X - координата пролета, где требуется определить момент.

Цитата(mes @  15.11.2010,  13:17 Найти цитируемый пост)
угу тут понятно.. и формула задания интервала может быть любая, в вашем случае равномерно распределенная.

Алгоритм деления на интервалы такой:
 - пользователь задает максимальный интервал
 - функция Span::createSectionsSet() начинает создавать вектор X класса Diagram, при этом анализируется вектор нагрузок Load, ниже поясню как.

Допустим пользователь задал интервал в 50 мм, а у нас есть точечная нагрузка на пролет, расположенная в 30 мм от опоры. В этом случае точка 30 мм тоже будет помещена в вектор Х. То есть получится: 0,30,50,150,200 и т.д.
PM MAIL   Вверх
mes
Дата 15.11.2010, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



значит на один пролет у нас может быть несколько диаграмм построенных разным образом.. 
ну в принципе все..можно строить классы 
smile

Добавлено через 2 минуты и 42 секунды
Цитата(Нитонисе @  15.11.2010,  09:57 Найти цитируемый пост)
Вот есть Пролет (Span). Он характеризуется длиной (int length), приложенной к нему нагрузкой (vector<Load*> loads) и двумя значениями крайних моментов М1 и М2 (в предыдущем посте не указал, но эти значения нужны для расчета всех значений внутренних усилий по длине пролета)

и возвращает моменты в указанной точке.. 




--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  13:27 Найти цитируемый пост)
значит на один пролет у нас может быть несколько диаграмм построенных разным образом.. 

В принципе да. Только каждый объект Diagram соответствует вектору нагрузок. То есть, если на пролет задан только один вектор нагрузок, то объект диаграмм может быть в единственном числе, ну разве что наплодить таких же объектов с другим интервалом сечений, в чем, вобщем-то, нет смысла.
PM MAIL   Вверх
mes
Дата 15.11.2010, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  12:07 Найти цитируемый пост)
Диаграмма - это график функции. Эпюра М и эпюра Q - это графики функции. Как и у любого графика, каждая его точка характеризуется двумя координатами (речь идет о двухмерных графиках). В данном случае графики строятся по Х (длина пролета) и М (момент в пролете) и по Х и Q (поперечная сила в пролете). Этот график может быть где угодно отображен по имеющимся значениям X,М,Q.

и строиться на основе промежутка и интервала

Добавлено через 1 минуту и 22 секунды
Цитата(Нитонисе @  15.11.2010,  12:30 Найти цитируемый пост)
ну разве что наплодить таких же объектов с другим интервалом сечений, в чем, вобщем-то, нет смысла. 

может у вас будет два графика разных сечений для одного пролета.. главное не в нужности, а в логичности происходящего.. 



--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  13:27 Найти цитируемый пост)
и возвращает моменты в указанной точке.. 

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

Цитата(mes @  15.11.2010,  13:32 Найти цитируемый пост)
и строиться на основе промежутка и интервала

Нет, промежуток и интервал - это в сущности одно и то же. График строится на основе X и M (эпюра М) и X и Q (эпюра Q). При этом при построении графика будут учитываться экстремумы, но о них пока не говорю, так как это усложнит картину.

Цитата(mes @  15.11.2010,  13:32 Найти цитируемый пост)
может у вас будет два графика разных сечений для одного пролета.. главное не в нужности, а в логичности происходящего.. 

Ну это возможно - имея пролет с нагрузкой построить сотню диаграмм M и Q с разными интервалами. Но это только если для понимания сути задачи, так как на практике это не нужно, диаграммы (эпюры) будут строиться с заданным интервалом в единственном числе. Другое дело, что я могу сменить нагрузку на пролет - диаграммы создадутся и отрисуются заново.
PM MAIL   Вверх
mes
Дата 15.11.2010, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  12:44 Найти цитируемый пост)
На самом деле ему в обязанности можно вменить гораздо больше,

я имел ввиду применительно к обсужденному в теме.. smile

Добавлено через 1 минуту и 15 секунд
Цитата(Нитонисе @  15.11.2010,  12:44 Найти цитируемый пост)
Нет, промежуток и интервал - это в сущности одно и то же. 

сорри за опечатку.. span инстинктивно обратно перевел как промежуток )
на основе пролета и интервала smile


--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  13:47 Найти цитируемый пост)
сорри за опечатку.. span инстинктивно обратно перевел как промежуток )на основе пролета и интервала

Спан не нужен. Для построения графика нужны координаты его точек. В данном случае X,M и X,Q. 
То есть можно сказать объекту класса Diagram: "Рисуемся отсель и с таким масщтабом" - и он рисуется. В коде примерно так
Код

Diagram diagram; // уже с заполненными векторами X,M,Q
diagram.drawM(Image1,X,Y,Scale); // X,Y - координаты на канве, где будет нулевая точка графика, Scale - масштаб отрисовки

PM MAIL   Вверх
mes
Дата 15.11.2010, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  12:44 Найти цитируемый пост)
 Но это только если для понимания сути задачи, 

ага, понимание самое главное smile
Цитата

Спан не нужен. Для построения графика нужны координаты его точек.

а как же длина пролета ? нагрузки на него ? как без этого то построить диаграмму  smile 


--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  14:05 Найти цитируемый пост)
а как же длина пролета ? нагрузки на него ? как без этого то построить диаграмму

Если вы имеете ввиду расчет точек графика, то нужен спан, а если отрисовку графика - то не нужен.
PM MAIL   Вверх
mes
Дата 15.11.2010, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  13:17 Найти цитируемый пост)
Если вы имеете ввиду расчет точек графика, то нужен спан, а если отрисовку графика - то не нужен

отрисовку мы не обсуждали.. 



--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  14:21 Найти цитируемый пост)
отрисовку мы не обсуждали.. 

Тогда для расчета нужны:
 - длина балки
 - момент слева
 - момент справа
 - вектор нагрузок
 - набор сечений с заданным интервалом.
На выходе имеем
 - вектор Q
 - вектор M
PM MAIL   Вверх
mes
Дата 15.11.2010, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  13:27 Найти цитируемый пост)
 - длина балки
 - момент слева
 - момент справа
 - вектор нагрузок

ну это у вас насколько я помню внутренние характеристики балки.. 

Цитата(Нитонисе @  15.11.2010,  13:27 Найти цитируемый пост)
набор сечений с заданным интервалом.

Ну а набор сечений это в принципе внутренняя характеристика, основанная на интервале.. 



--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  14:35 Найти цитируемый пост)
Ну а набор сечений это в принципе внутренняя характеристика, основанная на интервале.. 

Ну да. 
PM MAIL   Вверх
mes
Дата 15.11.2010, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  13:42 Найти цитируемый пост)
Ну да.  

ну так разобрались ? или еще есть вопросы ? smile



--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  14:54 Найти цитируемый пост)
ну так разобрались ? или еще есть вопросы ?

С чем разобрались? Ни с чем не разобрались. Собственно я так классы и спроектировал. Мой вопрос втом - насколько оправдано выделять класс Diagram отдельной сущностью, уж коль скоро имеется масса неудобств при работе с ним.
PM MAIL   Вверх
mes
Дата 15.11.2010, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  14:04 Найти цитируемый пост)
С чем разобрались?

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

Добавлено через 1 минуту и 13 секунд
Цитата(Нитонисе @  15.11.2010,  14:04 Найти цитируемый пост)
Мой вопрос втом - насколько оправдано выделять класс Diagram отдельной сущностью, уж коль скоро имеется масса неудобств при работе с ним. 

Смысл есть.. так как эпюры не являются частью балки или спана..

Добавлено через 7 минут и 11 секунд
Цитата(Нитонисе @  15.11.2010,  14:04 Найти цитируемый пост)
уж коль скоро имеется масса неудобств при работе с ним. 

а вот где Вы увидели неудобства ?

приведите последнее представление вашего  кода 
smile

Добавлено через 8 минут и 1 секунду
то что важно для : span beam и diagramm 



--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  15:17 Найти цитируемый пост)
приведите последнее представление вашего  кода 

Предполагаю такую структуру
Код

class Beam
{
  protected:
    std::vector<Span*> spans;    
};

class Span
{
  public:
    setLoad(std::vector<Load*> *l);
    setInterval(int i);
    createXSet();    
    calcM();
    calcQ();

  protected:
    int length;
    float M1;
    float M2;
    std::vector<Load*> loads;
    int Interval;
    Diagram *diagram;
};

class Diagram
{
  protected:
    std::vector<int> X;
    std::vector<float> M;
    std::vector<float> Q;
};


Цитата(mes @  15.11.2010,  15:17 Найти цитируемый пост)
В первом примере кода диаграмма является составляющей пролета. 

Не то что бы частью, а сопутствующим объектом имеющим четкую ассоциацию с конкретным объектом класса Span.

Цитата(mes @  15.11.2010,  15:17 Найти цитируемый пост)
а вот где Вы увидели неудобства ?

Неудобства в том, что при работе функции greateXSet (создание набора сечений) на первом этапе данные будут заноситься во временный ыектор, а потом весь этот вектор будет копироваться в атрибут Х Diagram. Напрямую работать с вектором Х неудобно, так как потребует создания функций типа setX(int index, int value). Примерно такая же функция для считывания данных из векторов. Если представить что в программе будет 10 пролетов и у каждого пролета 100 сечений, то такие усложненные схемы доступа мне видятся неоптимальными, ведь будь эти векторы X,M,Q данными класса Span, то доступ бы был намного проще.
PM MAIL   Вверх
xvr
Дата 15.11.2010, 16:04 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



У меня дежавю? Или мы наблюдаем 2й сезон мыльной оперы?
Первый назывался 'Изобретение Паттерна Multimethod в 108 сообщениях'
Второй видимо будет называться 'Изобретение Паттерна Visitor в 47 (пока) сообщениях'

2 ТС: Почитайте какую нибудь книжку по Паттернам Проектирования и заканчивайте вынос мозга участникам конфы. Все, что вам тут объясняют описано в этих Паттернах гораздо более полно и развернуто.

PM MAIL   Вверх
mes
Дата 15.11.2010, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  14:44 Найти цитируемый пост)
  calcM();
    calcQ();

Цитата(Нитонисе @  15.11.2010,  14:44 Найти цитируемый пост)
   int Interval;

Цитата(Нитонисе @  15.11.2010,  14:44 Найти цитируемый пост)
    Diagram *diagram;

ну так это ж не члены пролета..

Добавлено через 11 минут и 22 секунды
Цитата(Нитонисе @  15.11.2010,  14:44 Найти цитируемый пост)
Неудобства в том, что при работе функции greateXSet (создание набора сечений) на первом этапе данные будут заноситься во временный ыектор, а потом весь этот вектор будет копироваться в атрибут Х Diagram. 

ну эти неудобства вы сами себе придумали smile

Добавлено через 11 минут и 46 секунд
а можно и удобно сделать smile


--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(xvr @  15.11.2010,  16:04 Найти цитируемый пост)
2 ТС: Почитайте какую нибудь книжку по Паттернам Проектирования и заканчивайте вынос мозга участникам конфы. Все, что вам тут объясняют описано в этих Паттернах гораздо более полно и развернуто.

Что именно там описано? Тут вопрос выделения классов и установки между ними отношений. При чем тут паттерны?

Цитата(mes @  15.11.2010,  16:05 Найти цитируемый пост)
ну так это ж не члены пролета..

А куда их деть?))

Цитата(mes @  15.11.2010,  16:05 Найти цитируемый пост)
ну эти неудобства вы сами себе придумали можно и удобно сделать
Ну например? Как снаружи добраться к пятому элементу вектора, объявленного protected?

PM MAIL   Вверх
mes
Дата 15.11.2010, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  15:23 Найти цитируемый пост)
Тут вопрос выделения классов и установки между ними отношений. При чем тут паттерны?

Это тоже относится к паттернам (архитектурным)

Добавлено через 1 минуту и 7 секунд
Цитата(Нитонисе @  15.11.2010,  15:23 Найти цитируемый пост)
Ну например? Как снаружи добраться к пятому элементу вектора, объявленного protected?

все зависит от интерфейса smile

Добавлено через 3 минуты и 38 секунд
Цитата(Нитонисе @  15.11.2010,  10:41 Найти цитируемый пост)
P.S. Что у вас за манера постоянно править свои посты по всей теме? Думаете так удобнее общаться?

я правлю от опечаток, и двусмысленностей.. но не меняю смысла smile

Добавлено через 5 минут и 6 секунд
Цитата(Нитонисе @  15.11.2010,  15:23 Найти цитируемый пост)
А куда их деть?))

туда где им место.. в вашем случае в диаграмме... (если конечно ж они вобще нужны в таком виде )




--------------------
PM MAIL WWW   Вверх
xvr
Дата 15.11.2010, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Нитонисе @  15.11.2010,  16:23 Найти цитируемый пост)
Что именно там описано? Тут вопрос выделения классов и установки между ними отношений. 
Блин. 'Пастернака не читал, но осуждаю'  smile 
Цитата

При чем тут паттерны?
Именно это - вопрос выделения классов и установки между ними отношений ТАМ И ОПИСАННО!

PM MAIL   Вверх
Нитонисе
Дата 15.11.2010, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  16:24 Найти цитируемый пост)
Это тоже относится к паттернам (архитектурным)

Паттерны - это некие наработки, которые можно применять в других проектах, насколько я понял. В моем случае эта задача вторична на данном этапе. Первично - организация удобных связей медлу классами.
Цитата(mes @  15.11.2010,  16:24 Найти цитируемый пост)
все зависит от интерфейса

вот интерфейс класса Diagram
Код

class Diagram
{
  public^
    int getX(int index);
    float getM(int index);
    float getQ(int index);
    void setX(int index, int val);
    void setM(int index, float val);
    void setQ(int index, float val);
};


Цитата(mes @  15.11.2010,  16:24 Найти цитируемый пост)
я правлю от опечаток, и двусмысленностей.. но не меняю смысла

Только я не удивлюсь, если где-нибудь на второй странице вы добавили к своему посту еще какой-то вопрос, который для меня окажется незамеченным по понятным причинам)

Добавлено через 1 минуту и 3 секунды
Цитата(xvr @  15.11.2010,  16:32 Найти цитируемый пост)
Именно это - вопрос выделения классов и установки между ними отношений ТАМ И ОПИСАННО!

О, если так, то это то что нужно) посоветуйте автора.
PM MAIL   Вверх
mes
Дата 15.11.2010, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Код


class Span
{
  public:
    setLoad(std::vector<Load*> *l);
    setLength (size_t l);

    float GetQ (size_t x);
    float GetM (size_t x);
 private:
... 
};

class Diagram 
{
     Diagram (Span const&s, size_t interval)
    {
        for (size_t i =0; i <s.Length();i+= interval)
        {
            vQ.push_back (s.GetQ(i));
            vM.push_back (s.GetM(i));
       }

     }
     void Draw (); 

     vector<float>  vQ;
     vector<float>  vM;
};
... 
Span span (10, DotLoat(45));
Diagramm d (span, 10);
d.Draw(win->getDC());



Добавлено через 2 минуты и 58 секунд

Цитата(Нитонисе @  15.11.2010,  15:34 Найти цитируемый пост)
Только я не удивлюсь, если где-нибудь на второй странице вы добавили к своему посту еще какой-то вопрос, который для меня окажется незамеченным по понятным причинам)

вопросы добавляются к посту автоматически.. в течении какого то времени, если еще никто не написал.. а не после редактирования.. редактированием я лишь иногда убираю кучу ненужных слов типо "добавлено"..


Добавлено через 3 минуты и 43 секунды
Цитата(Нитонисе @  15.11.2010,  15:34 Найти цитируемый пост)
   void setX(int index, int val);

что делает setX ?

Это сообщение отредактировал(а) mes - 15.11.2010, 16:38


--------------------
PM MAIL WWW   Вверх
xvr
Дата 15.11.2010, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Нитонисе @  15.11.2010,  16:34 Найти цитируемый пост)
О, если так, то это то что нужно) посоветуйте автора. 
Да уж советовал, и ссылки давал. Все впустую  smile 

Вот, классика:
Цитата

Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес Приемы объектно-ориентированного проектирования. Паттерны проектирования = Design Patterns: Elements of Reusable Object-Oriented Software. — СПб: «Питер», 2007. — С. 366. — ISBN 978-5-469-01136-1 (также ISBN 5-272-00355-1)


Еще
WiKi

http://c2.com/cgi/wiki?CategoryPattern

Очень неплохая статья


PM MAIL   Вверх
Нитонисе
Дата 15.11.2010, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  16:37 Найти цитируемый пост)
что делает setX ?

он делает X[index] = val

Цитата(xvr @  15.11.2010,  17:18 Найти цитируемый пост)
Да уж советовал, и ссылки давал. Все впустую

Вы на мультиметоды давали ссылки. тема интересная, но я ее пока не потяну))

Цитата(xvr @  15.11.2010,  17:18 Найти цитируемый пост)
Вот, классика:

А вот это скачал, буду образовываться)
PM MAIL   Вверх
mes
Дата 15.11.2010, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  16:31 Найти цитируемый пост)
он делает X[index] = val

это вопрос был не о реализации, а о смысле... для чего нужно это действие ?



--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  17:45 Найти цитируемый пост)
это вопрос был не о реализации, а о смысле... для чего нужно это действие ?

Для того чтобы забить значение в вектор Х. Вектор Х же нужен для определения сечений, где будут определяться M,Q.
PM MAIL   Вверх
mes
Дата 15.11.2010, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250




Цитата(Нитонисе @  15.11.2010,  16:53 Найти цитируемый пост)
Для того чтобы забить значение в вектор Х. Вектор Х же нужен для определения сечений, где будут определяться M,Q. 

a интервала не достаточно, для  расчета этого вектора ?
если нужен именно вектор, то чем не устраивает:  на входе: вектор сечений и пролет, на выходе эпюра/ы ?



--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  19:10 Найти цитируемый пост)
a интервала не достаточно, для  расчета этого вектора ?

Для заполнения вектора Х значениями нужен еще вектор нагрузок.

Цитата(mes @  15.11.2010,  19:10 Найти цитируемый пост)
если нужен именно вектор, то чем не устраивает:  на входе: вектор сечений и пролет, на выходе эпюра/ы ?

Вектор сечений еще нужно задать, а задается он функцией класса Span. Вот тут и выбор варианта - либо пользование setX для работы напрямую с вектором X класса Diagram, либо создание временного вектора внутри функции createXSet, заполнении его значениями, а потом копирование в вектор Х Diagram.
PM MAIL   Вверх
mes
Дата 15.11.2010, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  18:31 Найти цитируемый пост)
Вектор сечений еще нужно задать, а задается он функцией класса Span

Span то тут при чем ? он лишь источник данных, а не активный участник.. 


Цитата(Нитонисе @  15.11.2010,  18:31 Найти цитируемый пост)
 либо пользование setX для работы напрямую с вектором X класса Diagram, либо создание временного вектора внутри функции createXSet, з

то есть третьего варианта не дано ?



--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  19:54 Найти цитируемый пост)
Span то тут при чем ? он лишь источник данных, а не активный участник.. 

В спан содержится указатель на вектор нагрузок, необходимый для формирования Х. Размещать этот указатель в объекте Diagram нелогично, потому что он представляет собой хранилище результатов расчета.

Цитата(mes @  15.11.2010,  19:54 Найти цитируемый пост)
то есть третьего варианта не дано ?

В данной системе классов другого варианта не вижу.
PM MAIL   Вверх
mes
Дата 15.11.2010, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  19:12 Найти цитируемый пост)
В спан содержится указатель на вектор нагрузок, необходимый для формирования Х. Размещать этот указатель в объекте Diagram нелогично, потому что он представляет собой хранилище результатов расчета.

ну, а span передается диаграме, для формирования ее данных.. в чем проблема то ?


--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  20:14 Найти цитируемый пост)
ну, а span передается диаграме, для формирования ее данных.. в чем проблема то ?

Тут уже обратная проблема, напрямую не обратиться к важным параметрам - длина пролета и вектор нагрузок объекта Span при формировании вектора Х, хотя это проще, чем косвенно обращаться к вектору Х из функции объекта Span. 
При этом остается проблема доступа ко всем трем векторам X,M,Q из других функций. То же рисование. Или предлагаете рисование объявить методом класса Diagram? Но это нелогично, потому что Diagram - это хранилище результатов расчета, а рисунок - это графическое отображение результатов расчета.
PM MAIL   Вверх
mes
Дата 15.11.2010, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  19:25 Найти цитируемый пост)
Тут уже обратная проблема, напрямую не обратиться к важным параметрам 

так может стоит над этой проблемой подумать ? кстати что мешает напрямую обратиться ? 

Цитата(Нитонисе @  15.11.2010,  19:25 Найти цитируемый пост)
При этом остается проблема доступа ко всем трем векторам X,M,Q из других функций. 

не вижу проблемы? сформулируйте интерфейс так, чтоб это не было проблемой.. 

Цитата(Нитонисе @  15.11.2010,  19:25 Найти цитируемый пост)
 Или предлагаете рисование объявить методом класса Diagram? 

не важно.. зависит от модели "рисовальщика"..

Цитата(Нитонисе @  15.11.2010,  19:25 Найти цитируемый пост)
Но это нелогично, потому что Diagram - это хранилище результатов расчета, а рисунок - это графическое отображение результатов расчета. 

да, если нужно отделить данные от вида, то рисовальшик должен быть отдельным
 smile

Добавлено через 3 минуты и 15 секунд
Цитата(mes @  15.11.2010,  19:49 Найти цитируемый пост)
кстати что мешает напрямую обратиться ? 

а кажись понял.. Вам мешает слово protected ? как самый простой вариант, откройте возврат константной ссылки на него smile

Добавлено через 4 минуты и 20 секунд
Цитата(Нитонисе @  15.11.2010,  19:25 Найти цитируемый пост)
 длина пролета и вектор нагрузок 

раз существуют понятия, которые используются более чем в одном месте, значит должен быть соответствующий тип с нужным интерфейсом ..

Добавлено через 5 минут и 9 секунд
для вектора можно затайпдефить std::vector, а можно написать свою обертку, если требуется более жесткие гарантии.. 



--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 15.11.2010, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  15.11.2010,  20:49 Найти цитируемый пост)
так может стоит над этой проблемой подумать ? кстати что мешает напрямую обратиться ?

То, что и длина и вектор нагрузок protected в классе Span.

Цитата(mes @  15.11.2010,  20:49 Найти цитируемый пост)
не вижу проблемы? сформулируйте интерфейс так, чтоб это не было проблемой.. 

Сделать эти вектора public?

Цитата(mes @  15.11.2010,  20:49 Найти цитируемый пост)
а кажись понял.. Вам мешает слово protected ? как самый простой вариант, откройте возврат константной ссылки на него

Не понял.

Добавлено через 7 минут и 20 секунд
Цитата(mes @  15.11.2010,  20:49 Найти цитируемый пост)
раз существуют понятия, которые используются более чем в одном месте, значит должен быть соответствующий тип с нужным интерфейсом ..

Опять не понял.
Цитата(mes @  15.11.2010,  20:49 Найти цитируемый пост)
для вектора можно затайпдефить std::vector, а можно написать свою обертку, если требуется более жесткие гарантии..

И это тоже не понял)
PM MAIL   Вверх
mes
Дата 15.11.2010, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  15.11.2010,  19:55 Найти цитируемый пост)

Не понял. 

вариантов реализаций куча.. зависит от требований пролета предъявляемых к хранимому вектору..
ну самый самый простой вариант, устанавливать весь вектор нагрузки за один раз, т.е интерфейс будет представлять SetVector(), GetVector()
второй вариант не хранить вектор в пролете, а отдавать ему только для расчета моментов.. 
есть и другие варианты, но для этой задачи будут избыточны..

Добавлено @ 21:05
а открыть на чтение - это   vector const& get_vector() { return m_vector; }

Добавлено @ 21:06
так как вектор нагрузки  фактически  не принадлежит спану, а устанавливается на него "голосую" за второй вариант..
smile

Это сообщение отредактировал(а) mes - 15.11.2010, 21:35


--------------------
PM MAIL WWW   Вверх
mes
Дата 16.11.2010, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



еще вопрос, нагрузка может быть смежной, т.е лежать более чем на одном спане ?
и диаграмма одного спана, как нибудь зависит от состояния другого спана ?

Добавлено через 3 минуты и 55 секунд
и диаграмма это в принципе конечная цель ?

т.е. задаете балку, сколько в ней спанов, ставите опоры прикладываете нагрузку... и получаете диаграмму и другие моменты, которые отображаете юзеру ?

Добавлено через 8 минут и 48 секунд
спаны и балка представлены в двумерном варианте статично или полиморфно ?

нагрузка нужна только для вычисления крайних моментов на опорах, или для эпюры , мах/мин, тоже  ?
или график строиться исходя из значений крайних моментов ?



--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 16.11.2010, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  16.11.2010,  09:31 Найти цитируемый пост)
еще вопрос, нагрузка может быть смежной, т.е лежать более чем на одном спане ?

Нет.

Цитата(mes @  16.11.2010,  09:31 Найти цитируемый пост)
и диаграмма одного спана, как нибудь зависит от состояния другого спана ?

Впринципе зависит, но эта зависимость определяется на стадии вычисления опорных моментов. Далее эти опорные моменты записываются в переменные М1 и М2 объектов класса Span и вычисление внутренних усилий в спане уже от смежных с ним спанов никак не зависит.

Цитата(mes @  16.11.2010,  09:31 Найти цитируемый пост)
и диаграмма это в принципе конечная цель ?

Да.

Цитата(mes @  16.11.2010,  09:31 Найти цитируемый пост)
т.е. задаете балку, сколько в ней спанов, ставите опоры прикладываете нагрузку... и получаете диаграмму и другие моменты, которые отображаете юзеру ?

Да.

Цитата(mes @  16.11.2010,  09:31 Найти цитируемый пост)
спаны и балка представлены в двумерном варианте статично или полиморфно ?

Не совсем понял.

Цитата(mes @  16.11.2010,  09:31 Найти цитируемый пост)
нагрузка нужна только для вычисления крайних моментов на опорах, или для эпюры , мах/мин, тоже  ?

Для того чтобы определить макс и мин моменты нужно тупо перебрать все значения вектора М, для этого естественно нагрузка не нужна. Но есть один нюанс - максимальный момент может попасть на координату спана, не включенную в вектор Х, то есть потерянный для расчета. Для того, чтобы выяснить, потеряли ли мы такой момент - нужно проанализировать вектор Q, тут нагрузка нам также не нужна. А вот если анализируя эпюру Q выяснили, что у нас имеется потерянный момент (экстремум диаграммы М), то нужно вычислить координату этого экстремума, вот тут уже нам понадобится нагрузка. Далее, имея координату максимального момента, выполняем функцию типа getM(int X), где Х - координата спана и получаем искомый максимальный момент. Правда найденный момент не всегда будет максимальным, но всегда будет значением экстремума функции. На картинке, которую я выкладывал, во втором пролете есть такой экстремум, но как видно - он не максимальный.
Только после этих вычислений мы приступаем к перебору значений вектора М, а также не забываем проверить и экстремальный момент для вычисления Ммах, это простой перебор и нагрузка тут не нужна.

Добавлено через 2 минуты и 8 секунд
Цитата(mes @  16.11.2010,  09:31 Найти цитируемый пост)
нагрузка нужна только для вычисления крайних моментов на опорах

Вычисление опорных моментов - это расчет более высокого уровня, там оперируем всеми спанами, всей нагрузкой.
Вычисление же пролетных моментов (вектор М) - это уже локальная задача отдельно взятого спана с его нагрузкой.
PM MAIL   Вверх
mes
Дата 16.11.2010, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



Цитата(Нитонисе @  16.11.2010,  09:44 Найти цитируемый пост)
Не совсем понял.

бывают разновидности пролетов или балок ? или различие только в опорах и нагрузке ?

Добавлено @ 11:08
 не до конца понял, имея M1 и M2 (моменты на опорах)  можно построить эпюру или еще что то надо ? (ну естественно интервал и длина пролета у нас есть)

Добавлено через 7 минут и 7 секунд
Цитата(Нитонисе @  16.11.2010,  09:44 Найти цитируемый пост)
Вычисление опорных моментов - это расчет более высокого уровня, там оперируем всеми спанами, всей нагрузкой.

т.е без знаний балки нам не обойтись.. 


Это сообщение отредактировал(а) mes - 16.11.2010, 11:08


--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 16.11.2010, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  16.11.2010,  11:03 Найти цитируемый пост)
бывают разновидности пролетов или балок ? или различие только в опорах и нагрузке ?

Вообще говоря для пролета (Span) не важны и опоры. Один пролет от другого отличается длиной, вектором нагрузок и опорными моментами.
Знать о том какие у нас опоры важно на стадии обсчета всей балки при определении опорных моментов.

Цитата(mes @  16.11.2010,  11:03 Найти цитируемый пост)
 не до конца понял, имея M1 и M2 (моменты на опорах)  можно построить эпюру или еще что то надо ? (ну естественно интервал и длина пролета у нас есть)

Надо еще нагрузка.

Я вот думаю, может сечения балки тоже выделить в класс
Код

class SpanPoint
{
  protected:
    int X;
    float M;
    float Q;
};

из функционала - предоставление информации о своих данных... или это уже лишнее
PM MAIL   Вверх
mes
Дата 16.11.2010, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



и так у нас есть..
входные данные - то что может изменять пользователь :

балка состоящая из пролетов
вектор нагрузки для каждого пролета
интервал для эпюры

выходные - то что получается в результате расчетов :
моменты (крайние , мин, макс, и эпюры )

примерно так ? ничего важного не упущено ?

Добавлено через 4 минуты и 8 секунд
Цитата(Нитонисе @  16.11.2010,  10:53 Найти цитируемый пост)
из функционала - предоставление информации о своих данных... или это уже лишнее 

как класс это лишнее, а вот как структуру данных вполне..


--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 16.11.2010, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Цитата(mes @  16.11.2010,  12:08 Найти цитируемый пост)
примерно так ? ничего важного не упущено ?

Примерно так. Результаты расчетов хранятся в Diagram - это точки пролетов, где считались усилия, собственно сами эти усилия, а также координаты экстремума эпюры М (если таковой имеется) и само значение момента в точке экстремума. Ну и вычленение максимальных и минимальных значений внутренних усилий. Крайние моменты как таковые не выделяются, они войдут в эпюру М как перый элемент и последний.
PM MAIL   Вверх
mes
Дата 16.11.2010, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 6
Всего: 250



ну вот не усложняйте тогда себе жизнь и отделите котлет от мух ..

вот например такой набросок интерфейса :
Код

class Beam {
   Beam (size_t span_count=1);

   LoadVector& LoadVectorRef (size_t span_id);  

   void SetSupport  (size_t sup_id,  Support); 
   Support GetSupport (size_t sup_id);
 
   Diagram CalcDiagram (size_t span_id);       
};






--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 17.11.2010, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Не понравилась что-то мне эта структура классов, решил все переиначить)
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.2479 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.