|
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Краткое руководство по работе с классом TCanvas для начинающих31.03.2011, 17:47. Показов 276091. Ответов 4
Вступление
Часто на форуме возникают вопросы по поводу рисования той или иной фигуры на канве, а также просят привести список всех функций рисования, так как сами ничего не понимают в этих Arc'ах, Chord'ах и других сложных и непонятных фигурах. Поэтому я решил и написать эту статью, которая будет полезна как и начинающим, так и, возможно, выступит в роли краткого справочника для знающих. Данная статья никаким образом не заменяет соответствующей литературы. Нет, это просто небольшое руководство, в котором собрана исключительно практическая информация и самый минимум теории. Все описанное здесь вы в том или ином виде можете узнать из любого другого источника, возможно, в более понятном и "профессиональном" виде. А я здесь решил расписать все сугубо на простом и понятном языке, потому как по-другому не умею, так что за возможные смысловые ошибки прошу не ругать. А теперь пара слов о структуре данного материала: Эта статья состоит из 3 частей: Первая часть - это небольшое руководство для начинающих, в которой рассмотрены основные понятия, методы и свойства. Вторая часть представляет из себя краткий справочник по свойствам и методам канвы. Третья часть - небольшой FAQ по классу TCanvas. Оглавление: 1. Первые шаги 1.1 Рисование линий 1.2 Как нарисовать квадрат, использую метод LineTo 2. Рисование простых фигур 2.1 Прямоугольник 2.2 Эллипс 3. Изменение внешнего вида фигур 3.1 Свойство Pen 3.2 Свойство Brush 4. Заливка областей 4.1 Заливка областей 4.2. Сложная заливка (Использование метода FloodFill) 5. Вывод текста 5.1 Внешний вид текста 6. Вывод изображений 6.1 Небольшое вступление 6.2 Вывод изображений на канву формы при помощи метода Draw() 6.3 Прозрачность выводимых изображений 6.4 Использование метода StretchDraw() 6.5 Копирование участков канвы 7. Заключение Дополнительно: 1. Основные методы рисования на канве 2. Основные свойства канвы 3. Небольшой FAQ по Канве 1. Первые шаги TCanvas (Канва) - это класс, предназначенный для вывода и хранения графических обьектов в C++ Builder. Канва входит в состав большинства визуальных компонентов, кроме стандартных оконных контролов (TButton, TMemo, TPanel и т.п.). При помощи методов этого класса можно рисовать как и стандартные примитивы (линии, эллипсы, прямоугольники), так и графические обьекты, типа Graphics::TBitmap. Доступ к канве любого обьекта происходит следующим образом:
Канва, в ее графическом представлении, это двумерный массив пикселей. Каждый элемент этого массива хранит в себе информацию о цвете. Доступ к отдельно взятому пикселю можно получить из свойства Pixels, подробнее о котором будет написана ниже. Точка (0,0) - эта верхний левый угол канвы. Значение по x-координате возрастает слево навправо от точки (0,0), а значение по y-координате сверху вниз. 1.1. Рисование линий Теперь мы научимся рисовать простые обьекты на канве. Для начала, научимся чертить линии. Создайте новый проект, затем разместите на форме компонент TButton из вкладки Standart и на обработчик события OnClick напишите следующий код:
![]() Но теперь разберемся, почему эта линия была проведена именно из точки (0,0). Метод, при помощи которого мы нарисовали эту прямую, имеет два параметра:
Но после того, как мы провели прямую, положение пера изменилось на координаты X и Y, указанные при вызове метода LineTo. Теперь, если мы проведем еще одну прямую, скажем, в точку (500,100), то она будет проведена уже не из верхнего левого угла канвы, а из точки (250,250). Пример:
Но текущее положение пера можно изменить и вручную, не проводя никаких лишних линий. Для этого следует воспользоваться методом MoveTo (x, y), где x - новое положение пера по горизонтали, а y - новое положение пера по вертикали. Пример:
Это важно знать: при обращение к свойствам формы из самой формы не обязательно писать:
![]() 1.2. Как нарисовать квадрат, использую метод LineTo При помощи методов LineTo и MoveTo можно рисовать не только простые линии, но и такие обьект, как, допустим, прямоугольник или квадрат. Приведенный ниже пример показывает, как это можно сделать:
На изображении красные линии указывают направление, в котором мы чертили линии. Но согласитесь, что это не очень удобно, прибегать к таким ухищрениям, всякий раз, когда нам понадобится нарисовать подобную фигуру, поэтому в классе TCanvas предусмотрены специальные методы, рисующие различные фигуры, такие как прямоугольник, эллипс, дуга и т.д. Об использовании этих методов дальше и пойдет речь... 2. Рисование простых фигур Теперь мы научимся рисовать две новые фигуры - это прямоугольник и эллипс. Для каждой из этих фигур в канве предусмотрен соответствующий метод. 2.1. Прямоугольник Для рисования прямоугольников служит функция Rectangle, имеющая следующий вид: Rectangle (x1,y1,x2,y2), где переменные x1,y1 отвечают за положение левого верхнего угла прямоугольника, а переменные x2,y2 за положение нижнего правого угла. Чтобы лучше понять, как это работает, взглянем на простой пример:
Теперь запустите проект и вы увидите, что мы получили самый обычный квадрат, который до этого нарисовали при помощи 4-х линий. Как видите, рисовать в одну строку намного легче. ![]() 2.2. Эллипс Для рисования эллипсов в канве предназначена функция Ellipse(x1,y1,x2,y2). Этот метод имеет точно такие же параметры, как и Rectangle, за исключением того, что здесь указываются координаты углов прямоугольника, описывающего эллипс. Пример рисования эллипса:
![]() 3. Изменение внешнего вида фигур За внешний вид рисуемых фигур отвечают два свойства, которые задают заливку и контур обьектов - это свойства Pen и Brush. Чтобы задать желаемый внешний вид обьектам, эти свойства нужно настроить перед использованием функций рисования. Нарисованные обьекты внешний вид не изменят, если изменить одно из этих свойств после. Теперь поговорим подробнее о каждом из них. 3.1. Pen Свойство Pen (карандаш, перо) задает внешний вид рисуемых линий, а также контуров фигур. Допустим, мы хотим нарисовать красную линию, тогда мы поступим следующим образом:
Полный список всех стилей пера можно посмотреть, например, здесь Основные свойства Канвы. Pen 3.2. Brush Свойство Brush (кисть) определяет заливку рисуемых фигур, в отличии от свойства Pen, задающего контур. Оно также используйтся при заливке областей и выводе текста на канву, но эти функции мы рассмотрим несколько позже. Теперь разберемся с параметрами кисти. Начем мы с цвета: допустим, мы хотим нарисовать синий квадрат, тогда нам нужно будет изменить сначала цвет кисти, а затем уже начать рисовать:
К примеру, указав в качестве значения bsVertical, мы фон обьекта будет заполнен вертикальными линиями:
А указав в качестве значения bsCross, обьект будет расчерчен в клеточку:
:Если же в качестве значение указать bsClear, то рисуемые обьекты не будут иметь фона, то есть будут прозрачны. Данное значение следует устанавливать, например, при выводе текста на канву, либо если нужно начертить только контур фигуры. Остальные значения, которые может принимать это свойство, можно посмотреть здесь: Основные свойства канвы. Brush Также, в качестве фона обьекта мы можем указать любую картинку формата BMP. Но в таком случае, значения свойства Style будет игнорироваться. Данный параметр будет рассмотрен в следующей главе. 4. Заливка областей Теперь, когда мы научились рисовать простые фигуры и изменять их внешний вид, мы научимся заливать (закрашивать) области на канве. Для этого предназначены две функции, это методы FillRect (TRect* Rect) и FloodFill (x,y, Color, Style). Теперь разберем эти методы более подробно. 4.1. Заливка прямоугольных областей При помощи функции FillRect происходит простая заливка указанной прямоугольной области на канве. Вид заливки определяет свойство Brush. В качестве единственного параметра у данного метода идет простая структура TRect& Rect, представляющая из себя всего лишь набор из 4 переменных, определяющих границы этой области: Рассмотрим простой пример заливки области:
Здесь у меня возникла проблемка с кодом:
4.2. Сложная заливка (Использование метода FloodFill) Сразу хотелось бы поправить себя - это ни какая не сложная заливка. Нет, это обычная, стандартная заливка, которая присутствует в любом графическом редакторе. Как она работает объяснять нет смысла, потому что все и так, надеюсь, знают это. Сложной она является лишь в сравнении с методом FillRect(). Функция FloodFill имеет следующий вид: FloodFill ( int x, int y, TColor Color, TFillStyle FillStyle), где: x,y - координаты начальной точки заливки Color - цвет, определяющий область заливки FillStyle - стиль заливки, о котором я расскажу несколько позже Заливка области происходит текущей кистью, как и у метода FillRect(). Теперь рассмотрим пример заливки при помощи метода FloodFill. Для начала, возьмем какое-нибудь простое изображение, что-то вроде этого: Затем, добавьте на форму один TImage, загрузите туда это изображение и пропишите следующий код на событие OnClick кнопки:
Допустим, если бы в качестве заменяемого цвета был выбран не белый, а, к примеру, зеленый (clGreen) цвет, то замена бы не произошла, но это, надеюсь, и так понятно. ![]() Вместо того, чтобы явно указывать цвет, который нужно заменить, мы можем указать цвет пикселя, находящегося по заданными координатами:
Кроме этого, мы можем произвести заливку и текстурой:
Этот параметр отвечает за стиль (тип) заливки. Если значение этого параметра равно fsSurface, то произойдет заливка замкнутой области, определенной цветом Color. А если значение этого параметра равно fsBorder, то произойдет заливка области, где параметр Color выполнит роль "границы". Чувствуете разницу? Нет? Тогда вот вам пример:
Если бы мы указали в качестве параметра Color цвет, который не присутствовал бы на изображении, то произошла полная заливка всей картинки. 5. Вывод текста Для вывода текста на канву предназначены 2 простые функции, мало чем отличающиеся друг от друга. Это функции TextOut(x, y, Text) и TextRect(Rect, x, y, Text). Разница между ними лишь в том, что в первом случае мы указываем только координаты текста и, собственно, сам текст, а во втором случае, мы также и указываем прямоугольную область, которая обрезает текст, если тот выходит за ее пределы. Теперь рассмотрим простой пример вывода текста:
В качестве выводимого текста мы можем задать любую переменную, которую можно привести к типу String. К примеру, мы можем вывести значение из Edit1 на форму при помощи следующего кода:
Как вы, наверное, заметили, весь текст был выведен в одну линию, а специальные символы переноса строки проигнорированы и выведены как нечитаемые. Но выводить многострочный текст на канву, естественно, можно. О том, как это сделать, будет написано во второй части статьи. 5.1. Внешний вид текста За внешний вид выводимого текста отвечает свойство Font канвы. При помощи него мы можем задать шрифт текста, его размер, цвет и стиль. Для этого нужно будет изменить всего лишь несколько параметров. Например, за шрифт отвечает параметр Name - он задает основной внешний облик (способ начертания) текста. Указать в качестве значения этого параметра мы можем имя любого шрифта, установленного в системе (Arial, MS Sans Serif, Calibri и т.д.). Хотелось бы также предупредить, что если указанного шрифта не окажется в системе, то Windows автоматически подберет наиболее похожий шрифт сама. Следующий пример выводит на форму три строки, написанные разным шрифтом:
Как узнать список всех шрифтов, установленных в системе?
Чтобы узнать список всех шрифтов, установленных в системе, можно воспользоваться следующим кодом:
![]() За цвет текста отвечает параметр Color. Значение задается при помощи цветовых констант (clRed - красный, clGreen - зеленый, clBlue - синий/голубой и т.д.) или некоторыми другими способами, которые будут рассмотрены позже. Пример:
Параметр Size задает размер текста в кеглях:
![]() 6. Вывод изображений 6.1. Небольшое вступление Для вывода изображений на канву у класса TCanvas предназначено всего два метода:
В качестве обьекта TGraphic может выступать один из трех классов потомков. Это классы TBitmap, TIcon и TMetafile. В данной статье мы будем работать только с классом TBitmap, так как он представляет наибольший интерес при работе с графикой в C++ Builder. Сразу бы хотелось бы заметить, что в C++ Builder существует два класса с подобным названием, но обьявленные в разных модулях и совершенно друг на друга не похожие. Это Graphics::TBitmap и Windows::TBitmap. Работать мы будем с первым классом, а второй трогать не будем. Теперь познакомимся с этим классом поближе. TBitmap - класс, предназначенный для хранения и модификации стандартных графических файлов, формата BMP. Он обладает свойством Canvas, поэтому мы легко можем модифицировать загруженные изображения, применяя все описаные в данной статье методы. 6.2. Вывод изображений на канву формы при помощи метода Draw() Рассмотрим простой пример вывода графического изображения на канву. Возьмем обычное изображение, формата BMP: Теперь выведем его на канву формы, используя метод Draw:
Рассмотрим еще один простой пример:
Cначала мы установили размеры будущего изображения, а затем уже его изменили, нарисовав прямоугольник. Теперь попробуем загрузить изображение из файла, нарисовать на нем что-нибудь, затем вывести на канву и сохранить обратно в файл.
6.3. Прозрачность выводимых изображений Также класс Graphics::TBitmap обладает очень полезным свойством, которое называется Transparent (прозрачность). При положительном значение данного параметра, все пиксели цвета, который является "прозрачным", не будут отрисовываться на канве. Прозрачный цвет либо задается автоматически (равен цвету нижнего левого пикселя изображения), либо устанавливаются вручную при помощи свойства TranparentColor. Теперь слегка модифицируем наш первый пример, включив прозрачность у выводимого изображения:
В результате все пиксели (весь фон) изображения белого цвета были проигнорированы и не выведены на канву формы. Тоже самое можно проделать и со вторым примером:
6.4. Использование метода StretchDraw() Иногда выводимые изображения нужно подгонять под определенные размеры, что можно делать и вручную, используя нехитрый алгоритм, либо воспользоваться готовой функцией StretchDraw, которая выводит изображение, подгоняя его размеры под заданную область:
Если же нам нужно подогнать размеры выводимого изображения под размеры главной формы, то мы можем воспользоваться свойством ClipRect канвы формы:
6.5 Копирование участков канвы Бывают случаи, когда необходимо скопировать определенный участок одного изображения и поместить во второе. Для вот таких подобных случаев в классе TCanvas предназначен специальный метод. Называется он CopyRect и имеет следующий вид: CopyRect(TRect& Dest, TCanvas& Canvas, TRect& Source) Здесь Source - область канвы Canvas, которая копируется (помещается) в область Dest канвы, у которой мы вызвали этот метод. Для примера, скопируем область Rect1 исходного изображения в область Rect2 канвы формы:
7. Заключение Пожалуй, это все, о чем я хотел вам рассказать. Да, безусловно, здесь собрана и описана лишь малая часть того всего функционала, который имеется у класса TCanvas, но описание всего это может занят в несколько раз больше, чем все эта статья, да и не могу я описать все, потому как многого и сам не знаю. Но надеюсь, что хоть кому-нибудь что-нибудь из написанного здесь пригодилось. Также хотелось бы выразить огромную благодарность за помощь и наставления при написания этой статьи Evg. За написание этого материала я взялся только благодаря ему. Всем тем, кто это все прочитал, спасибо и удачи!
41
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 31.03.2011, 17:47 | |
|
Ответы с готовыми решениями:
4
Исходники кода для книги Java 8 (2015) Шилдт - руководство для начинающих Где найти ответы к самоконтролю в книге Шилдта "С++ руководство для начинающих" Многопоточность.Не работает пример из книги "Руководство для начинающих. Шилдт" стр 413-414 |
|
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 04.04.2011, 18:11 [ТС] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Основные методы рисования на канве Ellipse Ellipse (x1,y1,x2,y2) - данная функция рисует эллипс по заданным координатам. Свойство Pen Канвы задает контур фигуры, а свойство Brush определяет цвет или текстуру заливки.
Rectangle Rectangle (x1,y1,x2,y2) - данная функция рисует прямоугольник по заданным координатам. Свойство Pen Канвы задает контур фигуры, а свойство Brush определяет цвет или текстуру заливки.
RoundRect RoundRect (x1,y1,x2,y2,x3,y3) - данная функция рисует прямоугольник с закругленными углами по заданным координатам. Переменные x1,x2,y1,y2 явлеются координатами фигуры на канве, а переменные x3 и y3 определяют ширину и высоту эллипсов, формирующих углы. Чем больше значение этих переменных, тем сильнее углы будут "закруглены".
FillRect FillRect (Rect) - данная функция заполняет указанную прямоугольную область цветом или текстурой, указаными в свойстве Brush. Заполнение цветом:
LineTo LineTo (int x,int y) - данная функция проводит прямую из текущего положения пера в точку x, y. Также эта функция автоматически меняет значение PenPos подставляя текущии значение x и y. То есть, если первый раз отрезок был проведен из точки x1, y1 в точку x2,y2, то во второй раз он будет проведен из точки x2,y2 и т.д, если положение пера не будет изменено вручную пользователем. Цвет и тип линии зависит от свойства Pen. Пример:
Arc Arc (x1,y1,x2,y2,x3,y3,x4,y4) - данный метод рисует дугу на канве. Переменные x1,y1,x2,y2 - определяют эллипс, частью которого является дуга. Переменные x3,y3 - определяют начальную точку дуги, а x4,y4 - конечную точку дуги. Дуга вычерчивается против часовой стрелки из начальной в конечную точку. Внешний вид дуги определяет свойство Pen канвы. Для того, чтобы было легче понять, как работает этот метод, привожу несколько примеров: Пример №1:
Draw Draw(int x,int y,TGraphic* Graphic) - данная функция рисует обьект, типа TGraphic на Канве в точке x, y. Пример:
StretchDraw StretchDraw(Rect, TGraphic* Graphic) - данная функция рисует на Канве обьект, типа TGraphic, автоматически подгоняя его под указанную прямоугольную область.
CopyRect CopyRect (TRect &Dest, TCanvas* Canvas, TRect &Source) - данная функция копирует прямоугольную область Source указанной Канвы Canvas в прямоугольную область Dest Канвы, у которой данный метод был вызван. При этом происходит автоматический подгон размера копируемой части Канвы под новую область. Пример: На форме размещен обьект, типа TImage, в который загружено изображение. При нажатии на кнопку, часть этого изображения будет скопировано на форму:
TextOut TextOut (int x, int y, String Text) - этот метод выводит текст на канву в заданных координатах. Переменные x и y отвечают за позицию текста, а Text за выводимую строку. Шрифт выводимого текста зависит от свойства Font канвы. Пример:
TextRect TextRect (TRect& Rect,int x, int y, String Text) - эта функция делает тоже самое, что и метод TextOut, с разницей лишь в том, что здесь, кроме позиции текста на канве, указывается также прямоугольная область вывода текста (Rect) и, если текст выдет за пределы этой области, он будет обрезан. Пример:
19
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
|
|||||||||||||||||||||||||||||||||||||||||
| 04.04.2011, 18:14 [ТС] | |||||||||||||||||||||||||||||||||||||||||
|
Основные свойства канвы Brush Кисть - определяет цвет или текстуру заливки при рисовании фигур, типа Ellipse, Rectangle, RoundRect и т.п. Класс TBrush имеет следующие свойства: ● Handle - дескриптор кисти. ● Color - цвет заливки. ● Style - стиль заливки. Это свойство может принимать следующие значения: ● Bitmap - своего рода, текстура кисти. Если это свойство определено, то фон фигур будет закрашиваться указанным изображением. Небольшой пример:
Pen Перо - это свойство определяет вид линий и обводки фигур, нарисованных на канве. Класс TPen имеет следующие свойства: ● Handle - дескриптор пера. ● Width - толщина линии, рисуемой пером. Значение по умолчанию равно 1. ● Color - цвет линии, рисуемой пером. По умолчанию это значение равно clBlack (черный). ● Style - стиль линии, рисуемой пером. Может принимать следующие значения: Font Шрифт - определяет шрифт выводимого на Канву текста. Класс TFont включает в себя следующие свойства: ● Name - название шрифта (Arial, MS Sans Serif, Calibri и т.д.) ● Size - размер шрифта, который задается в кеглях. ● Height - тоже размер шрифта, но в отличии от Size задается уже в пикселях. ● Color - цвет шрифта. ● Style - стиль шрифта. Это свойство принимает следующие значения: fsBold - полужирный fsItalic - курсив fsUnderline - подчеркнутый fsStrikeout - перечеркнутый Задать стиль шрифта можно следующим образом:
PenPos PenPos - переменная, типа TPoint, в которой хранится текущее положение пера на канве. Начальное значение x=0, y=0. Изменять положение пера можно при помощи функции MoveTo:
Pixels Свойство Pixels предоставляет доступ к отдельно взятому пикселю канвы. Цвет левого верхнего пикселя канвы имеет координаты (0,0). Чтобы получить доступ к этому пикселю достаточно прописать следующий код:
Чтобы изменить цвет какого-то определенного пикселя нужно прописать следующий код:
32
|
|||||||||||||||||||||||||||||||||||||||||
|
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
|
||||||||||||||||||||||||||
| 04.04.2011, 18:20 [ТС] | ||||||||||||||||||||||||||
|
Небольшой FAQ по классу TCanvas Как вывести текст на канву под заданным углом?
Как очистить канву?
Существует не один способ очистить канву. Если Вам нужно очистить канву формы, то можете воспользоваться следующими функциями:
Как повернуть изображение?
Как вывести многострочный текст на канву?
Способ №1:
26
|
||||||||||||||||||||||||||
|
|
|||||||
| 11.05.2013, 20:46 | |||||||
|
Иллюстрированный самоучитель по C++ Builder - Графика. Canvas.
6
|
|||||||
| 11.05.2013, 20:46 | |
|
Помогаю со студенческими работами здесь
5
Нюанс в работе с классом Ошибка при работе с классом
Не вызывается деструктор при работе с классом
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|