我正在尝试在HSV颜色空间中插入两种颜色之间以产生平滑的颜色渐变.
我正在使用线性插值,例如:
h = (1 - p) * h1 + p * h2
s = (1 - p) * s1 + p * s2
v = (1 - p) * v1 + p * v2
Run Code Online (Sandbox Code Playgroud)
(其中p是百分比,h1,h2,s1,s2,v1,v2是两种颜色的色调,饱和度和值分量)
这对s和v产生了良好的结果,但对于h则没有.由于色调分量是一个角度,计算需要计算出h1和h2之间的最短距离,然后沿正确的方向(顺时针或逆时针)进行插值.
我应该使用什么公式或算法?
编辑:通过遵循杰克的建议我修改了我的JavaScript渐变功能,它运作良好.对于任何有兴趣的人,这是我最终得到的:
// create gradient from yellow to red to black with 100 steps
var gradient = hsbGradient(100, [{h:0.14, s:0.5, b:1}, {h:0, s:1, b:1}, {h:0, s:1, b:0}]);
function hsbGradient(steps, colours) {
var parts = colours.length - 1;
var gradient = new Array(steps);
var …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我有渐变作为drawable我用作背景,我不想让它看起来尽可能光滑.谷歌搜索和自己尝试后,我想出了以下内容.在nexus上,如果你只调用setDither(true),你的渐变仍然是条带,所以你必须像这个Window.setFormat(PixelFormat.RGBA_8888)一样设置PixelFormat.但另一方面G1不支持RGBA_8888所以调用它会使渐变比以前更加丑陋所以Window.setFormat(PixelFormat.RGBA_8888)在不支持它的设备上不能正常工作.
在我的应用运行的所有设备上平滑渐变的正确方法是什么.
PS:我发现了一些相关的话题
我需要沿圆形路径创建一个多步梯度,如下图所示:

有没有人对如何在XAML而不是代码中实现这一点有任何想法?是否可以使用现有的渐变画笔或以某种方式合成它们来实现这种效果?
我想制作一个如下图所示的渐变边框:

但我不知道它究竟是怎么做的,即我应该用它做什么渐变色?如何设置我的视图以显示像图像的边框?
我正在使用以下代码来获取边框:
self.view.layer.borderColor = [UIColor orangeColor].CGColor;
self.view.layer.borderWidth = 2.0f;
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用与此类似的渐变创建热图:

此图像显示三个点,渐变很好地融合在一起.
这是我目前在绘图功能中所做的事情:
public void DrawGradient(int x, int y, Graphics g) {
using (var ellipsePath = new GraphicsPath()) {
var bounds = new Rectangle(x, y, 100, 100);
ellipsePath.AddEllipse(bounds);
var brush = new PathGradientBrush(ellipsePath);
Color[] colors = {
Color.FromArgb(64, 0, 0, 255),
Color.FromArgb(140, 0, 255, 0),
Color.FromArgb(216, 255, 255, 0),
Color.FromArgb(255, 255, 0, 0)
};
float[] relativePositions = {0f,0.25f,0.5f, 1.0f};
ColorBlend colorBlend = new ColorBlend();
colorBlend.Colors = colors;
colorBlend.Positions = relativePositions;
brush.InterpolationColors = colorBlend;
g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver;
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.SmoothingMode …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现SVM损失函数及其渐变.我找到了一些实现这两个的示例项目,但是在计算渐变时我无法弄清楚它们如何使用loss函数.
我无法理解的是,在计算渐变时如何使用损失函数的结果?
示例项目按如下方式计算渐变:
for i in xrange(num_train):
scores = X[i].dot(W)
correct_class_score = scores[y[i]]
for j in xrange(num_classes):
if j == y[i]:
continue
margin = scores[j] - correct_class_score + 1 # note delta = 1
if margin > 0:
loss += margin
dW[:,j] += X[i]
dW[:,y[i]] -= X[i]
Run Code Online (Sandbox Code Playgroud)
dW用于梯度结果.X是训练数据的数组.但是我不明白损失函数的导数是如何产生这个代码的.
该代码的构建如下:我的机器人拍摄一张照片,一些 tf 计算机视觉模型计算目标对象在图片中的起始位置。该信息(x1 和 x2 坐标)被传递到 pytorch 模型。它应该学会预测正确的运动激活,以便更接近目标。执行运动后,机器人再次拍照,tf cv 模型应计算电机激活是否使机器人更接近所需状态(x1 为 10,x2 坐标为 at31)
然而,每次我运行代码时,pytorch 都无法计算梯度。
我想知道这是否是某种数据类型问题,或者是否是一个更普遍的问题:如果不直接从 pytorch 网络的输出计算损失,是否无法计算梯度?
任何帮助和建议将不胜感激。
#define policy model (model to learn a policy for my robot)
import torch
import torch.nn as nn
import torch.nn.functional as F
class policy_gradient_model(nn.Module):
def __init__(self):
super(policy_gradient_model, self).__init__()
self.fc0 = nn.Linear(2, 2)
self.fc1 = nn.Linear(2, 32)
self.fc2 = nn.Linear(32, 64)
self.fc3 = nn.Linear(64,32)
self.fc4 = nn.Linear(32,32)
self.fc5 = nn.Linear(32, 2)
def forward(self,x):
x = self.fc0(x)
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x)) …Run Code Online (Sandbox Code Playgroud) python gradient reinforcement-learning deep-learning pytorch
如果我在一个正方形的四个角上有四种颜色(A,B,C和D),并且我想用一个在四种颜色之间很好地融合的渐变填充那个正方形,我将如何计算点E的颜色?
E越接近任何其他点,颜色应该强烈影响结果.
知道怎么做吗?速度和简单性比准确性更好.
编辑:
我终于找到了一个真正简单的解决方案,使用CAGradientLayer类和CALayer绘图功能.
Ole Begemann为名为OBGradientView的 CAGradientLayer类发布了一个很棒的UIView包装器.
该类允许您在应用程序中轻松创建渐变UIView.
然后使用CALayer绘图功能添加圆角和投影值:
// Create the gradient view
OBGradientView *gradient = [[OBGradientView alloc] initWithFrame:someRect];
NSArray *colors = [NSArray arrayWithObjects:[UIColor redColor], [UIColor yellowColor], nil];
gradient.colors = colors;
// Set rounded corners and drop shadow
gradient.layer.cornerRadius = 5.0;
gradient.layer.shadowColor = [UIColor grayColor].CGColor;
gradient.layer.shadowOpacity = 1.0;
gradient.layer.shadowOffset = CGSizeMake(2.0, 2.0);
gradient.layer.shadowRadius = 3.0;
[self.view addSubview:gradient];
[gradient release];
Run Code Online (Sandbox Code Playgroud)
别忘了将QuartzCore框架添加到您的项目中.
原始问题:
我一直在研究一个自定义控件,它是一个圆角矩形按钮,填充线性渐变,并有一个投影.我使用这个答案填写了前两个步骤:链接文本
我现在的问题是在生成的形状下添加一个阴影.实际上,上下文被剪切到圆角矩形路径,所以当我使用CGContextSetShadow函数时,它不会绘制它.
我尝试通过绘制圆角矩形两次来解决这个问题,首先使用普通颜色,因此它绘制阴影,然后使用渐变填充重绘它.
它有点工作,但我仍然可以看到在第一次使用纯色绘制时形状角落处的几个像素,正如您在此缩放版本中看到的那样:
http://img269.imageshack.us/img269/6489/capturedcran20100701192.png
它几乎是好的,但还不完美......
这是我的-drawRect:实现:
static void addRoundedRectToPath(CGContextRef context, CGRect rect, float …Run Code Online (Sandbox Code Playgroud)