我是Java新手,我正在使用acm图形包来学习。我有几种.drawLine(double x, double y)
方法,我用它们画蘑菇。蘑菇在左侧和右侧相同但是倒置。我想知道我怎么能(如果它是正确的)反映我在y轴上的坐标。在数学上我们可以通过将所有x值乘以-1来实现。这样我就不必为右侧重写整个代码了。我一直在重新研究,但我找不到任何有用的东西。我已经尝试过java反射并且无处可去。我也是错误的方式吗?我对所有能帮助我理解这个概念的建议持开放态度。
以下是我的代码示例:
GPen black = new GPen(); //Make new pen
add(black, 270, 30); //Add it at these coords
black.drawLine(0, 30); //Draw a box
black.drawLine(-40, 0);
black.drawLine(0, -30);
black.drawLine(40, 0);
我可以迭代这些,将x值乘以-1,让它再次运行该方法吗?
答案 0 :(得分:1)
“数学上我们可以通过将所有x值乘以-1来实现这一点” - 这就是你的问题。这样可以在y轴上进行反射,但不会在特定的垂直线上进行反射。要反映特定的垂直线,请在示例中说明x = 270行:
反映点(p,q),其中p <270
距反射线的距离= 270-p
所以新的坐标是:(270 + d,q)
等于:(540-p,q)
所以一般来说,反映x = A线上的点(p,q)的公式是(2A-p,q)
编辑:您可以尝试的另一种方法是:
GPen black = new GPen(); //Make new pen
int[] x_coords = new int[4] {0,-40,0,40};
int[] y_coords = new int[4] {30,0,-30,0};
add(black, 270, 30); //Add it at these coords
for (int i=0; i<x_coords.length; i++){
black.drawLine( -1*x_coords[i] , y_coords[i]);
}