1

2D処理スケッチで座標系を変更し、左上ではなく左下に(0,0)を配置したいと思います。次のコードは(0,0)を左下に移動します。

transform(0, height);
rotate(radians(-90));

ただし、X軸も垂直軸になります。(0,0)を左下に移動し、X軸を水平に保つ簡単な方法はありますか?

私が検討したオプションの1つは、rotateとrotateYを組み合わせたP3Dを使用することですが、2dの場合のソリューションをお勧めします。

助けてくれてありがとう!

4

2 に答える 2

2

次のことを試してください。

translate(0,height);

scale(1,-1);

于 2013-05-17T13:43:23.747 に答える
2

回転せずに単純に翻訳できます。

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 customCS;

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();
}
于 2012-05-19T11:00:00.580 に答える