Pull to refresh
3
0
Vasily @vasan

Programmer, musician, composer

Send message

Кто-то это может считать плюсом, а по мне, так я лучше буду сразу видеть, что по -> я обращаюсь к указателю

А какая собственно разница каким оператором можно получить доступ к полям указателя класса '.' или '->' ?

Можно например предварительно разименовать указатель, и получить доступ через '.' , что то вроде:

*(a).b == a->b

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

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

Совершенно верно. Пример тому - фракталы Ляпунова, которые могут изображать интересные сюрреалистические картины 😉

Фрактал Ляпунова "НЛО"
Фрактал Ляпунова "НЛО"

Статических массивов в нём нет, просто много классов, экземпляры которых создаются на стеке. Перевод их в кучу ничего не изменил в работе программы, однако потребовалось некоторое время для замены '.' на '->'. За это я и недолюбливаю С++, что если изменить способ создания объекта, придётся переделывать уйму кода, в Delphi, например, всегда '.'. 😉

Создавать на стеке имеет смысл, когда объектов относительно мало. Сталкивался с таким что Visual Studio выдаёт предупреждение о превышении размера стека, вариант с заданием размера стека типа #pragma comment(linker, "/STACK:размер_стека") не есть хорошо, по сему если много объектов то нужно их создавать в куче.

std::vector это само собой, но это по сути динамический массив. А когда нужен указатель, например, на единственный объект класса? Использовать std::vector для него одного как то коряво получается. а std::unique_ptr<T> или std::shared_ptr<T> - как раз для такого случая.

он НЕ из javascript

Помню в let был ещё в Basic на ZX Spectrum )

Посмотрел и понял - Rust это сборная солянка из разных языков )

рэнжи, оператор as, синтаксис передачи параметров в функции явно из Паскаля.

let из Javasript, остальное из С/С++

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

Нет там не используется случайность, цвет зависит от некоторого параметра алгоритма.

procedure Fresnel;
const
window_size = 10.0;
var
x, y: integer;
dx, hw, hh, m, n, f: double;
lens: array of array of double;
begin
hw := Width * 0.5;
hh := Height * 0.5;
dx := window_size / Width;
SetLength(lens, Width, Height);
for x := 0 to Width - 1 do
for y := 0 to Height - 1 do
lens[x, y] := cos(Density * (sqr(dx * (x - hw)) + sqr(dx * (y - hh))));

m := -MaxInt;
n := MaxInt;
for x := 0 to Width - 1 do
for y := 0 to Height - 1 do
begin
m := Max(m, lens[x, y]);
n := Min(n, lens[x, y]);
end;

m := (m - n + 1e-10);
for x := 0 to Width - 1 do
for y := 0 to Height - 1 do
begin
f := (lens[x, y] - n) / m * 100;
Bmp.Pixel[x, y] := ColorMap.IterToColor(f);
end;
end;

Также интересны и другие аттракторы-карты:

 аттрактор "Фазовая карта Гамильтона"
аттрактор "Фазовая карта Гамильтона"
аттрактор "Кубическая карта Хенона"
аттрактор "Кубическая карта Хенона"
аттрактор "Стандартная карта Хенона"
аттрактор "Стандартная карта Хенона"

У меня такие круги получились как то, типа дифракционных колец Френеля )

Fresnel diffraction fractal
Fresnel diffraction fractal

У меня такой вот коврик получился )

Аттрактор "Hopalong"
Аттрактор "Hopalong"

Подобные фигуры также создают некоторые аттракторы, например "Фазовая карта Чирикова"

Аттрактор "Фазовая карта Чирикова"
Аттрактор "Фазовая карта Чирикова"

А можно поинтересоваться, что такого имеется в Rust, чего нет в С++?

P.S. C Rust вообще не знаком.

Такой ещё вопрос к автору: по какой причине Вы использовали именно Rust в смеси с С++, когда можно было данный проект сделать полностью на С++?

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

Посмотрите видео, как изменяется фрактал Мандельброта с увеличением зума до 3.9e¹⁴²⁹. И в итоге (конец видео) Вы увидите изначальный фрактал, вот Вам и самоподобие ) https://www.youtube.com/watch?v=thlvdXfl0KA

X=0.27533764774673799358866712482462788156671406989542628591627436306743751013023030130967197535665363986058288420463735384997362663584446169657773339617717365950286959762265485804783047336923365261060963100721927003791989610861331863571141065592841226995797739723012374298589823921181693139824190379745910243872940870200527114596661654505 Y=0.006759649405327850670181700456194929502189750234614304846357269137106731032582471677573582008294494705826194131450773107049670717146785957633119244225710271178867840504202402362491296317894835321064971518673775630252745135294700216673815790733343134984120108524001799351076577642283751627469315124883962453013093853471898311683555782404
Zoom=9e300

Information

Rating
Does not participate
Location
Красноярский край, Россия
Date of birth
Registered
Activity

Specialization

DSP/VST/DAW Developer
OOP
C++
C
Software development
Visual Studio
Delphi
Lazarus
PHP
Objective-C