В
Все
М
Математика
О
ОБЖ
У
Українська мова
Х
Химия
Д
Другие предметы
Н
Немецкий язык
Б
Беларуская мова
М
Музыка
Э
Экономика
Ф
Физика
Б
Биология
О
Окружающий мир
У
Українська література
Р
Русский язык
Ф
Французский язык
П
Психология
О
Обществознание
А
Алгебра
М
МХК
Г
География
И
Информатика
П
Право
А
Английский язык
Г
Геометрия
Қ
Қазақ тiлi
Л
Литература
И
История
tropinaksusha
tropinaksusha
18.04.2020 19:08 •  Информатика

1-Гистограмма - это 1.диаграмма, отдельные значения которой представлены горизонтальными полосами различной длины.
2.диаграмма, отдельные значения которой представлены точками в декартовой системе координат.
3.диаграмма, в которой отдельные значения представлены вертикальными столбцами различной высоты.
4.диаграмма, представленная в виде круга разбитого на секторы, в которой допускается только один ряд данных.
2-Для пользователя каждая ячейка электронной таблицы идентифицируется:
1.адресом машинного слова оперативной памяти, отведённого под ячейку.
2.специальным кодом.
3.заголовками столбца и строки, на пересечении которых она находится.
4.именем, произвольно задаваемым пользователем.
3-Линейчатая диаграмма - это
1.диаграмма, представленная в виде круга разбитого на секторы, в которой допускается только один ряд данных.
2.диаграмма, в которой отдельные значения представлены вертикальными столбцами различной высоты.
3.диаграмма, отдельные значения которой представлены точками в декартовой системе координат.
4.диаграмма, отдельные значения которой представлены горизонтальными полосами различной длины.
4-При перемещении или копировании в электронной таблице относительные ссылки
1.преобразуются в зависимости от нового положения формулы.
2.преобразуются вне зависимости от нового положения формулы.
3.не изменяются.
4.преобразуются в зависимости от формулы.
5-Круговая диаграмма - это
1.диаграмма, в которой отдельные значения представлены полосами различной длины, расположенными горизонтально вдоль оси Х.
2.диаграмма, отдельные значения которой представлены точками в декартовой системе координат.
3.диаграмма, в которой отдельные значения представлены вертикальными столбцами различной высоты.
4.диаграмма, представленная в виде круга разбитого на секторы, в которой допускается только один ряд данных.
6-Диапазон - это
1.совокупность всех ячеек одного столбца содержащих числовые данные.
2.все ячейки одной строки содержащие числовые данные.
3.множество допустимых значений.
4.совокупность ячеек, образующих в таблице область прямоугольной формы.
7-Электронная таблица представляет собой
1.совокупность пронумерованных строк и столбцов.
2.совокупность нумерованных строк и поименованных с использованием букв латинского алфавита столбцов.
3.совокупность строк и столбцов, именуемых пользователем произвольным образом.
4.совокупность поименованных с использованием букв латинского алфавита строк и нумерованных столбцов.
8-Электронная таблица это
1.системная программа, управляющая ресурсами персонального компьютера при обработке таблиц.
2.прикладная программа для обработки кодовых таблиц.
3.прикладная программа, предназначенная для обработки структурированных в виде таблицы данных.
4.устройство персонального компьютера, управляющее его ресурсами в процессе обработки данных в табличной форме.
ПОБЫСТРЕЕ

Показать ответ
Ответ:
zmey7755
zmey7755
11.05.2022 03:26

class Cluster{

vector<POINT> scores;

public:

int curX , curY;//координаты текущего центроида

int lastX, lastY;//координаты предыдущего центоида

size_t Size(){ return scores.size();}//получаем размер вектора

inline void Add(POINT pt){ scores.push_back(pt); }//Добавляем пиксель к кластеру

void SetCenter();

void Clear();//Чистим вектор

static Cluster* Bind(int k, Cluster * clusarr, vector<POINT>& vpt);

static void InitialCenter(int k, Cluster * clusarr , vector<POINT>& vpt);;

static void Start(int k, Cluster * clusarr, vector<POINT>& vpt);

inline POINT& at(unsigned i){ return scores.at(i);}//Доступ к элементам вектора

};

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

void Cluster::InitialCenter(int k, Cluster * clusarr, vector<POINT>& vpt){

int size = vpt.size();

int step = size/k;

int steper = 0;

for(int i = 0;i < k;i++,steper+=step){

clusarr[i].curX = vpt[steper].x;

clusarr[i].curY = vpt[steper].y;

}

}

Также нужно написать метод, который будет ответственный за нахождение новых координат центроида в соответствии с пунктом 5.Координаты нового центроида можно найти описав вокруг пикселей кластера прямоугольник и тогда центроидом будет пересечение его диагоналей.

void Cluster::SetCenter(){

int sumX = 0, sumY = 0;

int i = 0;

int size = Size();

for(; i<size;sumX+=scores[i].x,i++);//the centers of mass by x

i = 0;

for(; i<size;sumY+=scores[i].y, i++);//the centers of mass by y

lastX = curX;

lastY = curY;

curX = sumX/size;

curY = sumY/size;

}

void Cluster::Clear(){

scores.clear();

}

И теперь только остался сделать простенький метод самого «привязывания» пикселей к определенному кластеру по принципу сравнения модулей отрезков:

Cluster * Cluster::Bind(int k, Cluster * clusarr, vector<POINT>& vpt){

for(int j = 0; j < k;j++)

clusarr[j].Clear();// Чистим кластер перед использованием

int size = vpt.size();

for(int i = 0; i < size; i++){// Запускаем цикл по всем пикселям множества

int min = sqrt(

pow((float)clusarr[0].curX-vpt[i].x,2)+pow((float)clusarr[0].curY-vpt[i].y,2)

);

Cluster * cl = &clusarr[0];

for(int j = 1; j < k; j++){

int tmp = sqrt(

pow((float)clusarr[j].curX-vpt[i].x,2)+pow((float)clusarr[j].curY-vpt[i].y,2)

);

if(min > tmp){ min = tmp; cl = &clusarr[j];}// Ищем близлежащий кластер

}

cl->Add(vpt[i]);// Добавляем в близ лежащий кластер текущий пиксель

}

return clusarr;

}

И наконец главный цикл:

void Cluster::Start(int k, Cluster * clusarr, vector<POINT>& vpt){

Cluster::InitialCenter(k,clusarr,vpt);

for(;;){//Запускаем основной цикл

int chk = 0;

Cluster::Bind(k,clusarr,vpt);//Связываем точки с кластерами

for(int j = 0; j < k;j++)//Высчитываем новые координаты центроидов

clusarr[j].SetCenter();

for(int p = 0; p<k;p++)//Проверяем не совпадают ли они с предыдущими цент-ми

if(clusarr[p].curX == clusarr[p].lastX && clusarr[p].curY == clusarr[p].lastY)

chk++;

if(chk == k) return;//Если да выходим с цикла

}

}

И что же из этого всего следует?

Вернемся к картинке с машинами, кластеризуя движущиеся объекты возникает проблема при использовании алгоритма к-средних, а именно мы не знаем сколько в данной сцене будет движущихся объектов, хотя можем приблизительно предугадать. Например кадр с машинами, на той сцене разумным будет предположить, что ну максимум там будет машин 10. Таким образом задавая на вход программе k = 10 и обведя точки 10 кластеров зелеными прямоугольниками, мы получим примерно следующую картину:

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

Теги:

c++

кластерный анализ

к-средних

Хабы:

C++

Обработка изображений

0,0(0 оценок)
Ответ:
daryanesterchuk
daryanesterchuk
31.07.2020 08:57
ОТВЕТ НА ДАННЫЙ ВОПРОС:

КАЖДЫЙ ГОД АКТУАЛЬНОСТЬ ЯЗЫКОВ ПРОГРАМИРОВАНИЯ МЕНЯЕТЬСЯ И КАКИЕ ТО ЯЗЫКИ УСТАРЕВАЮТ А ДРУГИЕ НАОБОРОТ СТАНОВЯТЬСЯ БОЛЕЕ ПОПУЛЯРНЫМИ И АКТУАЛЬНЫМИ, ЧТО КАСАЕТЬСЯ ТВОЕГО ВОПРОСА, ТО ОТВЕТ СОМНИТЕЛЕНТВ ЕГО ВЫСОКОУРОВНЕВОМ ПОЛОЖЕНИИ, ТАК КАК ЕСТЬ МНОЖЕТСВО ЯЗЫКОВ ПРЕВОСХОДЯЩИЕ ЕГО ЭТАП, НАПРИМЕР ТАКИЕ КАК: HTML, CSS, PYTHON 3.9. Но не смотря на это, у каждого языка програмирования есть свои особенности и фишки которых нет в других, вот вы бы смогли сделать красивое оформление сайта с Python? сомневаюсь, а вот CSS буквально создан доя этого.

0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота