线性插值 java_java – 如何使用线性插值和链接列表创建颜色渐变?

本文介绍如何在Java中通过线性插值创建颜色渐变,以实现鼠标跟踪路径上颜色的平滑过渡。代码示例中展示了使用LinkedList存储鼠标点,并根据线性插值计算颜色指数,从而在画线时产生颜色变化效果。
摘要由CSDN通过智能技术生成

我正在尝试制作跟随鼠标的彩虹路径.我使用Linkedlist绘制鼠标的点,以便跟踪.小径本身看起来很完美,只有小路上看起来不正确的颜色.我希望他们互相褪色.有人告诉我使用线性插值,并在查看它一段时间之后似乎它会起作用我只是不知道如何实现它.

这是我到目前为止的代码:

import impsoft.bots.ColorBot;

import impsoft.scripting.ibot.interfaces.AutoPaint;

import impsoft.scripting.types.ColorScript;

import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.RenderingHints;

import java.util.Deque;

import java.util.LinkedList;

import impsoft.scripting.ibot.structs.XY;

import impsoft.scripting.types.ColorSkeltonScriptable;

import impsoft.scripting.types.parallel.scriptjobs.ScriptJob;

public class MouseTrail extends ColorScript implements AutoPaint {

public MouseTrail(ColorBot c) {

super(c);

}

public void script() throws InterruptedException {

while(true) {

mt.setSize(500);

mt.exec();

sleep(100);

}

}

public static String name = "Mouse trail test";

public static String author = "Llaver";

public static String description = "test for mouse trail";

public static double version = 1.00;

public class MouseTrail2 extends ScriptJob implements AutoPaint {

private int size;

private final ColorSkeltonScriptable cs;

private final Deque trail = new LinkedList();

private final Color[] rainbow = new Color[]{

Color.RED, Color.YELLOW, Color.GREEN, Color.CYAN, Color.BLUE, Color.magenta

};

public MouseTrail2(ColorSkeltonScriptable cs) {

super(cs);

this.cs = cs;

}

public void setSize(int s) {

size = s;

s = 200;

}

public void runV() {

try {

while (true) {

synchronized (trail) {

if (trail.size() >= size) {

trail.pop();

}

trail.offer(cs.getCurrentMouseXY());

}

sleep(1);

}

} catch (InterruptedException e) {

}

}

@Override

public void paint(Graphics g) {

final Graphics2D g2d = (Graphics2D) g;

g2d.setStroke(new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND));

g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

synchronized (trail) {

float perc;

int idx;

for(int i = 1 ; i < trail.size() - 1 ; i++){

XY current = ((LinkedList) trail).get(i);

XY next = ((LinkedList) trail).get(i - 1);

perc = ((float)i / trail.size()) * 100f;

idx = Math.round((perc * (float)rainbow.length) / 100f);

if(idx >= rainbow.length)idx -= 1;

g2d.setColor(rainbow[idx]);

g.drawLine(current.x, current.y, next.x, next.y);

}

}

}

}

@Override

public void paint(Graphics arg0) {

}

private MouseTrail2 mt = new MouseTrail2(this);

}

一些照片:

这就是我现在所拥有的:

这是我想要得到的:

这有可能使这一点更清楚吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值