alibek писал(а):20 цветов можно просто таблицей задать.
alibek писал(а):20 цветов можно просто таблицей задать.
jangle писал(а):Пока 20 разделов, в последствии их может быть больше. В принципе это количество не ограниченно.
Хакер писал(а):Если идти по звезде, то сливаться не будут, наоборот, будут пестрить.
Другое дело, что легенду, основанную на сопоставлении цветов легенды с цветами секторов — уже не сделать.
Берёшь любую радугу, которая достаточно плавная, и у которой один конец предельно близок к другому, например как здесь:
Alec писал(а):А если задавать тон в цветовой модели HSV? Например, для 10 элементов задаем тоны 0, 0.1, 0.2 и т.д., а выводим в последовательности 0, 0.5, 0.2, 0.7 и т.д.
Хакер писал(а):Разумеется, что в реальности ничего не нужно строить: кольцо расчитывается математический, координаты точек расчитываются математически.
Хакер писал(а):Ну и плюс шаг выбирается не от-балды, а по закономерности (причём вариантов закономерности — вон сколько).
Хакер писал(а):Мой вариант предполагает в частности выбор произвольной радуги.
Proxy писал(а):В любом случае с составлением "умной" радуги + шагом по звезде будет не проще, чем с использованием готовой радуги Hue из HSV (при прочих константах), шага по звезде, а затем отбросом лишних цветов.
Хакер писал(а):Там строк 80 кода.
Option Explicit
Private Sub Form_Load()
AutoRedraw = True
PrintCols 5
PrintCols 8
End Sub
Private Sub PrintCols(totalCols As Long) 'печатает цифры уникальных цветов
Dim i As Long
Dim lastCornerAngle As Single
Dim AngleStep As Single
lastCornerAngle = 0
AngleStep = 180 - IIf(totalCols Mod 2 = 0, 1, 0.5) * (360 / totalCols)
For i = 1 To totalCols
lastCornerAngle = lastCornerAngle + AngleStep
Form1.ForeColor = HSV2RGBeasy(lastCornerAngle, 1, 1)
Print i
Next
End Sub
Private Function HSV2RGBeasy(Hue As Single, Saturation As Single, ValueBr As Single) As Long 'просто получает RGB из HSV
Dim f As Single, p As Single, q As Single, t As Single
f = (Hue / 60) - (Hue \ 60)
p = (ValueBr * (1 - Saturation)) * 255
q = (ValueBr * (1 - f * Saturation)) * 255
t = (ValueBr * (1 - (1 - f) * Saturation)) * 255
f = f * 255: ValueBr = ValueBr * 255
Select Case ((Hue \ 60) Mod 6)
Case 0
HSV2RGBeasy = RGB(ValueBr, t, p)
Case 1
HSV2RGBeasy = RGB(q, ValueBr, p)
Case 2
HSV2RGBeasy = RGB(p, ValueBr, t)
Case 3
HSV2RGBeasy = RGB(p, q, ValueBr)
Case 4
HSV2RGBeasy = RGB(t, p, ValueBr)
Case 5
HSV2RGBeasy = RGB(ValueBr, p, q)
End Select
End Function
Хакер писал(а):Нда.
Стоило ли писать гигантскую функцию HSV2RGBeasy, принимающую 3 параметра, чтобы потом при вызове в качестве двух последних всегда указывать 1 и 1?
Mikle писал(а):первый цвет берём случайный, каждый следующий - точка, максимально удалённая от уже занятых.
Дальтоники в пролете с этим алгоритмом.jangle писал(а):Берёшь любую радугу, которая достаточно плавная, и у которой один конец предельно близок к другому, например как здесь:
Хакер спасибо! Очень интересный алгоритм, буду пробовать его реализовать.
Antonariy писал(а):Значит нужно предоставить на выбор несколько радуг. Или как-то ее параметризировать. Даже человеку с нормальным зрением может выпасть неудобная комбинация.
Antonariy писал(а):Дальтоники в пролете с этим алгоритмом.
Мне не нравится 19-23 и 43-45 со скриншота Proxy. Но в целом результат достойный.Хакер писал(а):Пример с человеком с нормальным зрением и неудачной комбинацией, выбранной по «звёздному» методу?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4