我有一系列字符串,我想画成一个巨大的螺旋线。我对从哪里开始非常非常粗略。首先,我可能需要将字符串分解为单个字符数组?接下来,我可能需要应用以下几何体来生成螺旋形状?
float r = 0;
float theta = 0;
void setup() {
size(200,200);
background(255);
}
void draw() {
float x = r * cos(theta);
float y = r * sin(theta);
noStroke();
fill(0);
ellipse(x+width/2, y+height/2, 6, 6);
theta += 0.01;
r += 0.05;
}
但是,我不知道如何逐步浏览我的字符数组,以便以类似螺旋的格式绘制它们。我为缺乏清晰度而道歉。任何建议都很棒!我很清楚所有这些(显然)。
答案 0 :(得分:2)
您创建螺旋的代码是个好主意。创建旋转文本的一种方法是使用rotate(),并结合text()。你将有一个for循环,迭代你的角色数组,增加半径,并以这种方式绘制你的文本。请注意rotate()
具有累积效应。类似的东西:
String str = "asdflkkjsahfdlkadshflkahdslkfajsdf";
float radius = 0;
//so we are rotating around the center, rather than (0,0):
translate(width/2, height/2);
for (int i = 0; i < str.length(); i++) {
radius += 2;
// taken out because of non-constant spacing at large radius:
//rotate(0.5);
// this should give constant spacing, no matter the radius
// change 10 to some other number for a different spacing.
rotate(10/radius);
// drawing at (0,radius) because we're drawing onto a rotated canvas
text(str.charAt(i), 0, radius);
}
您可能希望角度变化是半径的函数,因为在较大的半径处,字母间隔很远。一种方法是使用等式s = rθ
,其中s是arclength(在这种情况下,是字母之间的距离),r是半径,θ是角度变化。如果你想要字母之间的距离恒定,无论半径如何,那么θ必须与1 / r成比例。当然,您可以根据自己的喜好调整硬编码值。
此外:rotate()
和translate()
方法在draw()
结束时撤消,因此如果您在此代码后没有执行任何操作,则可以将其保留为原样。如果你确实想要绘制更多的东西,那么你必须在绘制其他东西之前手动撤消旋转和平移。
编辑:我刚刚意识到我认为你想要旋转字母,而不仅仅是定位螺旋但仍然正常定向。在这种情况下,您可以使用现有代码,并将ellipse(...)
替换为text(str.charAt(...)...)
,当然也应使用适当的参数。