“Игрища со строками” можно найти в интерактивном курсе, модуль “Символы и строки”.
Это верно, что процедура кривая Curve не реализовано в модуле GraphWPF&
Да, верно
С тех времён появилось что-то лучше?
В каком направлении лучше?
К универсальности.
Не появилось. Но не исключено, что появится со временем. Что-то, похожее на калькулятор символьного выражения.
Подскажите пожалуйста, есть-ли процедура или функционал в модуле GraphWPF заменяющее процедуру FloodFill модуля GraphABC?
Можно ли запретить изменение элементов динамического массива в подпрограмме?
##
procedure P(const a: array of integer);
begin
a[0] := 1;
a.Println
end;
var a := |10, 20, 30|;
P(a);
a.Print
Действительно работает. А тут я попробовал в FPC такое сделать, но перед этим задал тип TAi = array if integer и там элементы изменять в подпрограмме было можно. Но если же в подпрограмме указать тип параметра массива как array of integer, то также заработало. Здесь и так и эдак изменять элементы нельзя.
А для чего это?
Массив в PascalАВС.NЕТ имеет ссылочный тип. Если его в подпрограмме описать как var - можно будет там создать другой массив и подсунуть его вместо аргумента. Это как дать коробку конфет, а взамен получить мешочек с бочонками лото. Если var не указывать, можно проделывать с массивом все то, что не меняет ссылку на сам массив. Т.е. оболочку сохраняем, содержимое можем менять. Дали коробку с конфетами - возвращаем эту же коробку, хоть с понадкусанными, но все же с конфетами. И, наконец, const говорит о том, что тебе дали музейный экспонат: полюбовался, языком поцокал - и вернул в целости и сохранности.
ОК! Очень интересные пословицы.
Подскажите пожалуйста, есть-ли процедура или функционал в модуле GraphWPF заменяющее процедуру FloodFill модуля GraphABC?
Видимо, нет. В некоторых случаях можно исхитриться и использовать FillPolygon
, но это жутко неудобно. Возможно, и это, и Curve
из GraphABC сложно реализовать в WPF.
Нет, FillPolygon
не пойдет, например при составление чертежа для задачи нахождения площадь криволинейной трапеции. А в модуле WPF координатная система и построение график функции чётко.
Вершины полигона располагаете по углам криволинейной трапеции и много-много вершин вдоль криволинейной части. Потом заливаете. Муторно очень, но за неимением гербовой, пишем на простой.
WPF представляет векторную а не растовую графику, в нём нет смысла говорить о заливке, не имея конкретную фигуру. То что GraphWPF
не имеет криволинейных полигонов это плохо, но направление это всё равно правильное.
Если нужна именно заливка в растовом изображении - это, по хорошему, надо делать шейдерами. То что реализовано в GDI (который используется в GraphABC
) это тот ещё костыль. Не говоря уже о его применениях в старых учебниках - чтоб заливать прямоугольники, вместо того чтоб сразу с заливкой нарисовать…
У криволинейного полигона возникнет вопрос, как лучше провести кривые. Например, если это будут кривые Безье, вариантов бесконечно много. Вот лишь два варианта для треугольника.