我想更改二维处理草图中的坐标系,将 (0,0) 放在左下角而不是左上角。以下代码将 (0,0) 移动到左下角:
transform(0, height);
rotate(radians(-90));
但是,它也使 X 轴成为垂直轴。有没有一种简单的方法可以将 (0,0) 移动到左下角并保持 X 轴水平?
我考虑过的一个选项是使用 P3D 与旋转和旋转Y 的组合,但更喜欢 2d 情况的解决方案。
谢谢你的帮助!
我想更改二维处理草图中的坐标系,将 (0,0) 放在左下角而不是左上角。以下代码将 (0,0) 移动到左下角:
transform(0, height);
rotate(radians(-90));
但是,它也使 X 轴成为垂直轴。有没有一种简单的方法可以将 (0,0) 移动到左下角并保持 X 轴水平?
我考虑过的一个选项是使用 P3D 与旋转和旋转Y 的组合,但更喜欢 2d 情况的解决方案。
谢谢你的帮助!
你可以简单地翻译而不旋转:
transform(0, height);
并将您的坐标处理为翻转: boolean useVFlip = true;
void setup(){
size(400,400);
}
void draw(){
background(255);
if(useVFlip) translate(0,height);
drawAxes(100);
translate(width * .5, useVFlip ? (height-mouseY)*-1 : mouseY);
triangle(0,0,100,0,100,100);
}
void keyPressed(){ useVFlip = !useVFlip; }
void drawAxes(int size){
pushStyle();
strokeWeight(10);
stroke(192,0,0);
line(0,0,size,0);
stroke(0,192,0);
line(0,0,0,size);
popStyle();
}
如果它更容易获得翻转坐标,您可以使用scale()方法翻转整个坐标系: boolean useVFlip = true;
void setup(){
size(400,400);
}
void draw(){
background(255);
if(useVFlip){
scale(1,-1);
translate(0,-height);
}
drawAxes(100);
translate(width * .5, useVFlip ? height-mouseY : mouseY);
triangle(0,0,100,0,100,100);
}
void keyPressed(){ useVFlip = !useVFlip; }
void drawAxes(int size){
pushStyle();
strokeWeight(10);
stroke(192,0,0);
line(0,0,size,0);
stroke(0,192,0);
line(0,0,0,size);
popStyle();
}
你可以对PMatrix2D做同样的事情,但不确定你对它们有多熟悉: boolean useCustomCS = true; PMatrix2D 自定义CS;
void setup(){
size(400,400);
customCS = new PMatrix2D( 1, 0, 0,
0, -1,height);
fill(0);
}
void draw(){
background(255);
if(useCustomCS) applyMatrix(customCS);
drawAxes(100);
translate(width * .5, useCustomCS ? height-mouseY : mouseY);
text("real Y:" + mouseY + " flipped Y: " + (height-mouseY),0,0);
triangle(0,0,100,0,100,100);
}
void keyPressed(){ useCustomCS = !useCustomCS; }
void drawAxes(int size){
pushStyle();
strokeWeight(10);
stroke(192,0,0);
line(0,0,size,0);
stroke(0,192,0);
line(0,0,0,size);
popStyle();
}
尝试以下操作:
translate(0,height);
scale(1,-1);