Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在转换后的形状上处理鼠标坐标_Java_Matrix_Processing - Fatal编程技术网

Java 在转换后的形状上处理鼠标坐标

Java 在转换后的形状上处理鼠标坐标,java,matrix,processing,Java,Matrix,Processing,我有个问题,似乎找不到确切的答案 我有一个网格,我已经在三维空间中变换和旋转了 translate(width-(width/2), 0); rotateX(radians(30)); rotateZ(radians(60)); for(tile t: grid){ t.draw(); } 然后在每个平铺对象内,我检查鼠标是否在该平铺内: void mouseMoved(){ float isoX = mouseX / (width-(width/2));

我有个问题,似乎找不到确切的答案

我有一个网格,我已经在三维空间中变换和旋转了

translate(width-(width/2), 0);
rotateX(radians(30));
rotateZ(radians(60));
for(tile t: grid){
    t.draw();
}
然后在每个平铺对象内,我检查鼠标是否在该平铺内:

void mouseMoved(){
      float isoX = mouseX / (width-(width/2));  
      isoX = isoX * ((cos(radians(30))-sin(radians(0))));      
      float isoY = mouseY * (cos(radians(60))-sin(radians(0)));
      if(isoX > posX && isoX < posX+20
      && isoY > posY && isoY < posY+20)
      println(getX()+", "+getY());
  }
void mouseMoved(){
浮动isoX=鼠标/(宽度-(宽度/2));
isoX=isoX*((cos(弧度(30))-sin(弧度(0)));
float isoY=mouseY*(cos(弧度(60))-sin(弧度(0));
如果(isoX>posX&&isoXposY&&isoY
作为参考,posX和posY是在程序开始时在arraylist中设置时为每个磁贴指定的位置


这可能只是我的数学问题,但有人能帮我吗?

将translate方法封装在push-and-pop矩阵中是一种很好的做法:

pushMatrix();
translate(width-(width/2), 0);
//draw here
popMatrix(); 

事实上,一旦您进行转换,鼠标坐标的默认值将使用该特定转换进行转换,以便在调用时返回转换后的值。

您是否尝试过只使用mouseX和mouseY而不对其执行任何数学运算,然后检查
isoX
isoY
坐标是否在特定网格位置?每个磁贴都要检查
posX
posY
(它是磁贴类的一部分)。使用当前代码,它的部分工作正常,例如,它正确返回网格顶部的x位置,但也在网格下方,这意味着平移略微倾斜。我真的认为这只是数学问题,但它一直让我头疼。您是否尝试过将
mouseX
mouseY
分别用作
isoX
isoY
mouseX
mouseY
只返回实际的屏幕坐标,而不考虑翻译。嗨,托德,所有内容都包含在推送和弹出矩阵方法中。处理仍然会返回未翻译的屏幕像素坐标。那么,请您使用包含问题的源代码的较小部分或子部分来更新您的问题,以便在处理IDE中运行后可以跟踪问题。