在处理中,我可以调用fill(myRGBValue)
设置填充颜色。有没有办法让我查询当前的填充颜色?
我试图通过传递图像宽度和高度的参数来设置处理 3.0中的窗口大小。但是,处理会抛出错误并要求检查参考部分,但这没有帮助。代码如下。
PImage img;
...
void setup(){
img = loadImage("XYZ.JPG");
float w = img.width;
float h = img.height;
size(int(w), int(h));
image(img, 0, 0);
}
Run Code Online (Sandbox Code Playgroud)
和错误如下:
size() function cannot be used here
Run Code Online (Sandbox Code Playgroud) 给定加载的 png 图像作为模板,我希望用户能够跟踪图像的元素。在 p5 中,这很简单:
setup() {
// Load image
var img = loadImage('...');
image(img, 0, 0);
}
draw() {
ellipse(mouseX, mouseY, 2, 2);
}
Run Code Online (Sandbox Code Playgroud)
但是,我希望能够仅保存省略号(没有底层图像)。有没有办法写入Image而不是直接写入画布,以便我可以提升跟踪的像素而不用原始图像?
我目前的计划是以下之一:
ellipse,而是写入createImage- 生成的像素数组......但这看起来很慢而且令人不快。注意:该图像是 a p5.Image,因此覆盖在 a 之上<img>是不够的。
我已经在Processing 中编程一段时间了。我还处理过形状和SVG文件。在处理中获得关于文件的这种卑微经历SVG让我认为在 中也会有同样的故事P5.js,但事实显然并非如此,并促使我寻求帮助。
回到处理我只会有这样的简单代码:
PShape shape;
/***************************************************************************/
void setup()
{
size(400, 400);
shapeMode(CENTER);
shape = loadShape("bot1.svg");
}
/***************************************************************************/
void draw()
{
background(100);
pushMatrix();
translate(width/2, height/2);
shape(shape, 0, 0);
popMatrix();
}
Run Code Online (Sandbox Code Playgroud)
P5不是这样的。相当于什么P5.js?
var shape;
var canvas;
/***************************************************************************/
function setup()
{
canvas = createCanvas(400, 400);
canvas.position(0, 0);
//shapeMode(CENTER);
//shape = loadShape("bot1.svg");
}
/***************************************************************************/
void draw()
{
background(100);
push();
translate(width/2, height/2);
//shape(shape, 0, 0);
pop();
}
Run Code Online (Sandbox Code Playgroud) 该代码在处理 2 中工作正常,但在 size() 函数中使用处理 3 中的变量不起作用,我将如何在处理 3 中实现 displaywdith-100
int val, screen_increment, old_x=0, old_y=0;
String inString;
int lf = 10;
void setup()
{
size(displayWidth-100, 600);// The screen height is set to be 600, which matches the scaled data,
String portName = Serial.list()[0];
println(Serial.list());
myPort = new Serial(this, portName, 115200);
myPort.bufferUntil(lf);
background(0);
}//setup
Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个时钟并将所有数字放在正确的位置,但它们都旋转了,例如 6 倒置而 12 是正确的。反正有没有只旋转文本而不是文本的位置?
我的代码是
push();
textSize(48);
for (int i = 1; i < 13; i++) {
int offset = -15;
if (str(i).length() == 2) {
offset -= 14.5;
}
rotate(radians(30));
text(i, offset, -350);
//println(i*30);
}
pop();
Run Code Online (Sandbox Code Playgroud) 我想创建一个旋转函数,其中我的三角形可以像轮子一样自行旋转,但我与移动我的三角形的代码部分发生冲突,我尝试了很多解决方案但没有成功,也许如果你们中的一个人有线索,它会对人好点!
这是我的代码:
let triangle1;
let triangle2;
let triangle3;
let triangle4;
let triangle5;
let triangle6;
let speedX;
let speedY;
let startColor;
let endColor;
let amt = 0;
function setup() {
startColor = color("hsl(144, 100%, 61%)");
endColor = color("hsl(0,77%,36%)");
createCanvas(windowWidth, 800);
//creer notre triangle
triangle1 = new Triangles(200, 100, 0, 4);
/* triangle2 = new Triangles(100, 50, 2, 0);
triangle3 = new Triangles(50, 200, -1, 4);
triangle4 = new Triangles(250, 400, 4, 4);
triangle5 = new Triangles(150, 500, 0, 2);
triangle6 = …Run Code Online (Sandbox Code Playgroud)我正在处理动作捕捉数据,我想在处理中进行“蒙皮”。因此,基本上,我从数据中获得的每两个点都必须在其间添加一个 3D 对象(我现在将使用一个盒子,放置和旋转坐标是 3D 对象的中心)并旋转它,以便它在所有三个维度上与连接两点的向量对齐。
在这里,我们可以在左侧看到两点之间最初放置的框,在右侧看到现在正确旋转的框:

我知道在处理中旋转对象的唯一方法是使用rotateX()、rotateY()、rotateZ()函数,它们使用欧拉角围绕全局(?)轴旋转对象。
现在我正在努力寻找一种正确计算这种旋转的方法。
我已经编写了一个用于计算两个向量之间的角度的函数:
float calcVectorAngle(PVector p1, PVector p2) {
return acos((p1.dot(p2)) / (mag(p1.x, p1.y, p1.z) * mag(p2.x, p2.y, p2.z)));
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试将向量(两点之间)与每个旋转轴之一的单位向量结合起来:
float x = calcVectorAngle(vector, new PVector(1,0,0));
float y = calcVectorAngle(vector, new PVector(0,1,0));
float z = calcVectorAngle(vector, new PVector(0,0,1));
Run Code Online (Sandbox Code Playgroud)
但是当我使用这些值旋转对象时,旋转完全关闭。
代码示例:
PVector p1;
PVector p2;
PVector boxSize = new PVector(500, 100, 100);
void setup() {
size(1000,1000,P3D);
p1 = new PVector(100, 100, 0);
p2 = new PVector(900, 900, -1000);
}
void draw() {
background(125);
strokeWeight(2); …Run Code Online (Sandbox Code Playgroud) 我正在编写一个基因组浏览器,主要是为了查看染色体重排的历史.现在,该项目是使用Processing编写的一系列概念验证演示.在这一点上,如果我不进行任何根本性的更改,最终的应用程序将是一个带有gui构建的swing组件的web applet,打开PApplets以实际显示重新发生的事件.
我的问题是:我应该放弃处理并切换到纯Swing/AWT吗?这是我的第一个大型java项目.我正在建造日食,但我也可以使用netbeans.例如,如果我可以在一个JFrame中嵌入PApplet对象,这将成为我的一天.
我需要一些帮助来加速写入串口.我发现了一些类似的问题,但没有涉及Processing语言或Java的任何问题,所以我希望有人可以帮我解决这个问题.
编辑
正如John在下面指出的那样,看起来串行的速度还不够快,无法以我想要的速度发送这么多数据.有没有人知道其他可用的arduino接口?
结束编辑
我正在使用arduino控制我连接的400个RGB LED网格.为了向arduino发送命令,我在Processing中编写了一个小程序来操作代表LED的大型数组.然后,我尝试通过串行发送800字节的数据,每隔20秒,115200波特,向arduino发送更新网格.每20ms调用的处理代码是:
noStroke();
int dataPos = 0; // position in LED data array
byte[] dataLedGrid = new byte[400*2]; // array for bytes to send
for(int j=0; j<LEDS_TALL; j++) {
for(int i=0; i<LEDS_WIDE; i++) {
int pos = j*20+i;
int r = ledGrid[LEDS_WIDE-i-1][LEDS_TALL-j-1][0], g = ledGrid[LEDS_WIDE-i-1][LEDS_TALL-j-1][1] ,b = ledGrid[LEDS_WIDE-i-1][LEDS_TALL-j-1][2];
int colorData = ((g & 0x1F) << 10) | ((b & 0x1F) << 5) | (r & 0x1F);
dataLedGrid[dataPos] = byte(colorData & 0x00FF);
dataLedGrid[dataPos+1] = byte(colorData & 0xFF00); …Run Code Online (Sandbox Code Playgroud) processing ×10
java ×5
p5.js ×3
awt ×1
c ×1
colors ×1
embedded ×1
euler-angles ×1
javascript ×1
math ×1
serial-port ×1
shapes ×1
svg ×1
swing ×1