Ваша проблема в том, что ваш хранит объект
category
, в то время как ваш хранит строку
category.tagCategoryName
:
В ng-options
у вас есть category as category.tagCategoryName for category in categories
, который говорит: «Сохраняйте объект категории в моей области и используйте tagCategoryName в качестве отображаемого имени для каждой категории в категориях»
Для ваших радиостанций у вас установлено ng-value
в качестве строки category.tagCategoryName
так вот что привязано к вашей сфере. Итак, выбор использовал объект, радио использовал строку. Я исправил это, обновив радио, чтобы просто использовать category
в качестве значения:
В Вашем изображении в качестве примера похоже, что у Вас есть радиальный градиент. Вот мое импровизированное математическое объяснение шагов, в которых Вы будете нуждаться. Извините за математику другие ответы лучше с точки зрения реализации.
| c | | Vect:____.______________ | |
Я просто отправлю свое решение.
int ColourAt( int x, int y )
{
float imageX = (float)x / (float)BUFFER_WIDTH;
float imageY = (float)y / (float)BUFFER_WIDTH;
float xS = xStart / (float)BUFFER_WIDTH;
float yS = yStart / (float)BUFFER_WIDTH;
float xE = xEnd / (float)BUFFER_WIDTH;
float yE = yEnd / (float)BUFFER_WIDTH;
float xD = xE - xS;
float yD = yE - yS;
float mod = 1.0f / ( xD * xD + yD * yD );
float gradPos = ( ( imageX - xS ) * xD + ( imageY - yS ) * yD ) * mod;
float mag = gradPos > 0 ? gradPos < 1.0f ? gradPos : 1.0f : 0.0f;
int colour = (int)( 255 * mag );
colour |= ( colour << 16 ) + ( colour << 8 );
return colour;
}
Для взлетов скорости кэшируйте полученные значения "направления" (подсказка: предварительно умножьтесь mag).
Это - действительно вопрос о математике, таким образом, это могло бы быть спорно, "принадлежит" ли это действительно на Переполнении стека, но так или иначе: необходимо спроектировать координаты каждой точки в изображении на ось градиента и использования, которые координируют для определения цвета.
Математически, то, что я имею в виду:
A = (x2 - x1)
и B = (y2 - y1)
C1 = A * x1 + B * y1
для начальной точки и C2 = A * x2 + B * y2
для конечной точки (C2
должно быть больше, чем C1
)C = A * x + B * y
Если C <= C1
, используйте начальный цвет; если C >= C2
, используйте конечный цвет; иначе используйте взвешенное среднее:
(start_color * (C2 - C) + end_color * (C - C1))/(C2 - C1)
Я сделал некоторые быстрые тесты, чтобы проверить, что это в основном работало.