gpt4 book ai didi

processing - 如何在重复循环模式中使用自定义形状?

转载 作者:行者123 更新时间:2023-12-04 08:04:28 26 4
gpt4 key购买 nike

我已经制作了一个自定义形状 (myFunction),并且我还使用更简单的形状制作了图案。我想知道如何用我的自定义形状替换那些简单的形状,同时保持处理时绘制的图案......

最佳答案

您已经在调用诸如 noFill() 之类的函数, noStroke() , 等等。
您的函数也是如此:只需使用它的名称和 () 即可调用它(因为它没有参数):myFunction();假设您想在模式 1 中绘制它,您可以执行以下操作:

if (pattern==1) { 
for (int x=50; x<width; x+=100) {
for (int y=20; y<height; y+=100) {
myFunction();
}
}
}
不过,您需要注意渲染。
运行上述不会显示您在 noFill() 中调用的任何内容在 myFunction()还有 noStroke()draw() , 紧跟在 background() 之后:您将无法看到没有填充和笔触的形状:)
一个建议是添加一个笔划:
void myFunction() {
noFill();
stroke(255);
ellipse(300, 300, 200, 400);
ellipse(300, 300, 400, 200);
translate(300, 300);
rotate(radians(130));
ellipse(0, 0, 200, 400);
translate(0, 0);
rotate(radians(0));
ellipse(0, 0, 400, 200);
}
当然,您可以随意进行实验,让这看起来更好看。
这是草图的修改版本,它使用几个按键在运行时更改图案类型和形状类型:
int pattern = 1;
// 0 = pluseEllipseCluser, 1 = blobs, 2= myFunction spirograph circles
int shape = 0;

void setup() {
size(600, 600);
println("press 1,2 to change pattern");
println("press p/b/c to change shapes");
}

void draw() {
background(30);
noStroke();

if (pattern==1) {
for (int x=50; x<width; x+=100) {
for (int y=20; y<height; y+=100) {
drawSelectedShapes(x, y);
}
}
}

if (pattern==2) {
float rando = random(10, 90);
for (float x= rando; x >= 0; x-=random(2.5)) {
for (float y= rando; y >= 0; y-=random(2.5)) {
drawSelectedShapes(x, y);
}
}
}
}

void drawSelectedShapes(float x, float y){
if(shape == 0){
plusEllipseCluser(x, y);
}
if(shape == 1){
blobs();
}
if(shape == 2){
myFunction();
}
}

void plusEllipseCluser(float x, float y){
fill(random(255), random(255), random(255), random(255));
ellipse(x, y+30, 50, 20); //plus ellipse cluster
ellipse(x, y+30, 20, 50);
}

void blobs(){
noStroke();
fill(random(250), random(120), random(100));
ellipse(random(width), random(height), 20, 50);
noFill();
stroke(random(255));
ellipse(random(width), random(height), 50, 20);
}

void myFunction() {
noFill();
stroke(255);
ellipse(300, 300, 200, 400);
ellipse(300, 300, 400, 200);
translate(300, 300);
rotate(radians(130));
ellipse(0, 0, 200, 400);
translate(0, 0);
rotate(radians(0));
ellipse(0, 0, 400, 200);
}

void keyPressed(){
if(key == '1') {
pattern = 1;
}
if(key == '2') {
pattern = 2;
}
if(key == 'p'){
shape = 0;
}
if(key == 'b'){
shape = 1;
}
if(key == 'c'){
shape = 2;
}
}
请注意,上面的示例还调用了 plusEllipseCluser()传递两个参数:这是定义和调用带有两个参数的函数的基本示例。当然,您之前已经调用过带参数的函数(例如 random(min,max)ellipse(x,y,w,h) 等)
享受形状和图案的乐趣。

关于processing - 如何在重复循环模式中使用自定义形状?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66297972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com