Хороший вопрос. У меня был тот же вопрос, и я нашел его здесь. Реальный ответ: @ Dan-Paradox, нет стандартного синтаксического способа сделать это. Итак, все эти ответы - это множество альтернатив, чтобы обойти проблему.
Я сам прочитал ответы и особо не нашел ни одного из них идеальным для моего личного соглашения. Метод, который я, вероятно, придерживаюсь, использует конструктор по умолчанию и метод set
:
class MyClass { int x,y,z; public: MyClass(): x(0), y(0), z(0) {} MyClass(int _x,int _y,int _z): x(_x), y(_y), z(_z) {} // for single declarations void set(int _x,int _y,int _z) { x=_x; y=_y; z=_z; } };
Стандартный конструктор инициализации все еще существует, поэтому я все еще могу его инициализировать, t нужно больше одного, но в противном случае у меня есть метод set
, который устанавливает все переменные, которые инициализируются в конструкторе. Таким образом, я мог бы сделать что-то вроде этого:
int len=25; MyClass list = new MyClass[len]; for(int i = 0; i < len; i++) list[i].set(1,2,3);
Это прекрасно работает и протекает естественным образом, не делая код запутанным.
Теперь это мой ответ для тех, кто задается вопросом, как объявите массив объектов, которые должны быть инициализированы.
В частности, вы пытаетесь дать массив идентификаторов автомобилей, которые, я полагаю, вы хотите всегда быть уникальными. Вы можете сделать это с помощью моего метода, который я объяснил выше, а затем в цикле for
использовать i+1
в качестве аргумента, переданного методу set
, но из того, что я прочитал в ваших комментариях, кажется, что вы хотите Иды более внутренне инициированы, так что по умолчанию у каждого автомобиля есть уникальный идентификатор, даже если кто-то использует ваш класс Car
.
Если это то, что вы хотите, вы можете использовать статический член:
class Car { static int current_id; int id; public: Car(): id(current_id++) {} int getId() { return id; } }; int Car::current_id = 1; ... int cars=10; Car* carlist = new Car[cars]; for(int i = 0; i < cars; i++) cout<<carlist[i].getId()<<" "; // prints "1 2 3 4 5 6 7 8 9 10"
Таким образом, вам не нужно беспокоиться об инициализации идентификаторов, поскольку они управляются внутри.
Мое возможное решение состояло в том, чтобы создать симпатичное (и довольно большой) палитра и сохранить ее как постоянный массив в источнике, затем интерполировать между индексами в ней с помощью гладкого алгоритма окраски. Палитра переносится (и разработан, чтобы быть непрерывным), но это, кажется, не имеет значения очень.
Используйте гладкий алгоритм окраски для вычисления всех значений в области просмотра, затем отобразите палитру от самого низкого до самого высокого значения. Таким образом, как Вы увеличиваете масштаб, и более высокие значения больше не видимы, палитра уменьшится также. С теми же константами для n и B Вы закончите с диапазоном 0,0 к 1,0 для, полностью уменьшил набор, но при более глубоком масштабировании динамический диапазон уменьшится, для высказывания 0.0 0,1 при 200%-м масштабировании, 0.0 к 0,0001 при 20 000%-м масштабировании, и т.д.
Кажется простым сделать методом проб и ошибок. Предположите, что можно определить HSV1, и HSV2 (оттенок, насыщенность, значение) конечной точки окрашивает Вас, хотят использовать (черный и белый; синий и желтый; темно-красный и светло-зеленый; и т.д.), и предполагают, что у Вас есть алгоритм для присвоения значения P между 0,0 и 1.0 к каждому из пикселей. Тогда цвет того пикселя становится
(H2 - H1) * P + H1 = HP
(S2 - S1) * P + S1 = SP
(V2 - V1) * P + V1 = VP
С тем сделанным, просто наблюдайте результаты и посмотрите, как Вам нравятся они. Если алгоритм для присвоения P непрерывен, то градиент должен быть гладким также.
JSON.stringify()
не реализован в JavaScript, но собственном коде. Вы can' t отлаживают его с Firebug.
– Šime Vidas
19 February 2013 в 16:15
Это алгоритм сглаживания цвета:
Допустим, вы начинаете с комплексного числа z0
и повторяете n
раз, пока оно не исчезнет. Пусть конечной точкой будет zn
.
Сглаженное значение будет
nsmooth := n + 1 - Math.log(Math.log(zn.abs()))/Math.log(2)
Это работает только для Мандельброта, если вы хотите вычислить сглаженную функцию для множеств Джулии, используйте
Complex z = new Complex(x,y);
double smoothcolor = Math.exp(-z.abs());
for(i=0;i<max_iter && z.abs() < 30;i++) {
z = f(z);
smoothcolor += Math.exp(-z.abs());
}
Затем smoothcolor
находится в интервале (0, max_iter)
.
Разделите smoothcolor
на max_iter
, чтобы получить значение от 0 до 1.
Чтобы получить плавный цвет из значения:
Это может быть вызвано, например (в Java):
Color.HSBtoRGB(0.95f + 10 * smoothcolor ,0.6f,1.0f);
, поскольку первое значение в параметрах цвета HSB используется для определения цвета из цветового круга.