You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现从三角形各顶点出发的自定义颜色渐变绘图?

实现三角形顶点起始的三色渐变效果

原代码的核心问题是使用colorRampPalette生成了线性过渡的三色渐变,而非基于顶点距离的颜色混合,因此无法实现从三个顶点分别发散的渐变效果。以下是修改后的代码,通过计算每个点到三个顶点的距离权重来混合颜色:

## 生成三角形网格点坐标
cells.x <- cells.y <- vector()
k <- 1
asp <- abs(diff(par()$usr[4:3])/diff(par()$usr[2:1]))*par()$pin[2]/par()$pin[1]
for(i in 1:50){
  for(j in i:(100-i+1)){
    cells.x[k] <- 0.1 + (j-1)*0.1/100
    cells.y[k] <- (-1) + (i-1)*2*0.1*asp/100
    k <- k + 1
  }
}

# 定义三个顶点的颜色
color1 <- "#1e88e5"  # 蓝色顶点
color2 <- "#d81b60"  # 红色顶点
color3 <- "#ffc107"  # 黄色顶点

# 提取三个顶点的坐标(从网格数据中直接获取)
# 顶点1:蓝色(最小x,最大y)
vert1_x <- min(cells.x)
vert1_y <- max(cells.y)
# 顶点2:红色(最大x,最小y)
vert2_x <- max(cells.x)
vert2_y <- min(cells.y)
# 顶点3:黄色(最小x,最小y)
vert3_x <- min(cells.x)
vert3_y <- min(cells.y)

# 计算每个点到三个顶点的欧氏距离
dist_to_vert1 <- sqrt((cells.x - vert1_x)^2 + (cells.y - vert1_y)^2)
dist_to_vert2 <- sqrt((cells.x - vert2_x)^2 + (cells.y - vert2_y)^2)
dist_to_vert3 <- sqrt((cells.x - vert3_x)^2 + (cells.y - vert3_y)^2)

# 归一化距离,转换为权重(距离越近,权重越高)
total_dist <- dist_to_vert1 + dist_to_vert2 + dist_to_vert3
# 避免除以0(顶点自身)
total_dist[total_dist == 0] <- 1e-10

weight1 <- dist_to_vert2 + dist_to_vert3  # 到另外两个顶点的距离和作为当前顶点颜色的权重
weight2 <- dist_to_vert1 + dist_to_vert3
weight3 <- dist_to_vert1 + dist_to_vert2

# 归一化权重
weight1 <- weight1 / total_dist
weight2 <- weight2 / total_dist
weight3 <- weight3 / total_dist

# 将十六进制颜色转换为RGB分量(0-1范围)
rgb1 <- col2rgb(color1)/255
rgb2 <- col2rgb(color2)/255
rgb3 <- col2rgb(color3)/255

# 计算每个点的混合RGB颜色
mixed_r <- weight1*rgb1[1] + weight2*rgb2[1] + weight3*rgb3[1]
mixed_g <- weight1*rgb1[2] + weight2*rgb2[2] + weight3*rgb3[2]
mixed_b <- weight1*rgb1[3] + weight2*rgb2[3] + weight3*rgb3[3]

# 转换为十六进制颜色
gradient_colors <- rgb(mixed_r, mixed_g, mixed_b)

# 绘制渐变三角形
plot(0,0, type="n", xlim=range(cells.x), ylim=range(cells.y), asp=1, xlab="", ylab="")
points(cells.x, cells.y, col=gradient_colors, pch=15, cex=0.5)

关键修改说明:

  • 顶点坐标定义:明确了三角形三个顶点的位置,对应三种指定颜色
  • 距离权重计算:使用每个点到另外两个顶点的距离和作为当前顶点颜色的权重,距离越近的顶点,颜色占比越高
  • 颜色混合:通过col2rgb提取颜色的RGB分量,基于权重混合后再转换回十六进制颜色,确保每个点的颜色是三个顶点颜色的平滑过渡

内容的提问来源于stack exchange,提问作者Lilnet Cloud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 16:05:36