我的几何程序出现问题

时间:2016-03-30 22:15:44

标签: java geometry

我刚开始用Java编写自己的类和方法,所以请原谅我的一些过度拥挤和不必要的代码。我应该使用以下方法编写一个名为OrderedPair的类:reflectX,reflectY,translate,rotate90,getQuadrant,getOrigPt,dilate和toString。

reflectX和reflectY方法是故意重载的,因为我的老师希望我们在程序中实现该技术。

我的问题是我的rotate90方法不起作用。例如,当我旋转点(3,-8)4次(应该返回原点)时,我得到(-8,-8)。此外,当我打印toString方法时,新点的新象限不正确。这是我的代码:

public class OrderedPair{
    private double original_x;
    private double original_y;
    private double x_value;
    private double y_value;
    private int original_quadrant;
    private int quadrant;

    public OrderedPair (double x, double y, int q){
        original_x = x;
        original_y = y;
        x_value = x;
        y_value = y;
        original_quadrant = q;
        quadrant = q;
    }

    public void reflectX (){
        y_value = -y_value;
    }

    public void reflectX (double value){
        double reflect = value - x_value;
        if (reflect > 0)
            x_value += 2*reflect;
        else
            x_value -= 2*reflect;
    }

    public void reflectY (){
        x_value = -x_value;
    }

    public void reflectY (double value){
        double reflect = value - y_value;
        if (reflect > 0)
            y_value += 2*reflect;
        else
            x_value -= 2*reflect;
    }

    public void translate (double translateX, double translateY){
        x_value += translateX;
        y_value += translateY;
    }

    public void rotate90 (int numOfRotations){
        for (int rotate = 1; rotate <= numOfRotations; rotate++){
        x_value = -y_value;
        y_value = x_value;
        }
    }

    public void dilate (double dilate_value){
        x_value *= dilate_value;
        y_value *= dilate_value;
    }

    public int getQuadrant(){
        if (x_value>=0)
        {
            if (y_value >= 0)
            {
                quadrant = 1;
                return quadrant;
            }
            else
            {
                quadrant = 4;
                return quadrant;
            }
        }
        else
        {
            if (y_value >= 0)
            {
                quadrant = 2;
                return quadrant;
            }
            else
            {
                quadrant = 3;
                return quadrant;
            }
        }
    }

    public String getOrigPt(){
        return "( " + original_x + ", " + original_y + ")";
    }

    public String toString(){
        return "( " + original_x + ", " + original_y + "); " + original_quadrant + "; " + "( " + x_value + ", " + y_value + "); " + quadrant;
    }
}

如果有人可以提供帮助,那就太棒了!

2 个答案:

答案 0 :(得分:2)

rotate90中,for循环体的第一行

x_value = -y_value;

会覆盖x_value,因此第二行不再可用。

y_value = x_value; // x_value has already been changed

这有效地将y_value设置为与其自身相反。使用临时变量,这样就不会丢失旧值。

double old_x = x_value;
x_value = -y_value;
y_value = old_x;

象限测定看起来正确,但它依赖于正确的x和y值。更正rotate90方法还应更正getQuadrant方法的输出。

答案 1 :(得分:2)

public void rotate90 (int numOfRotations){
    for (int rotate = 1; rotate <= numOfRotations; rotate++){
    x_value = -y_value;
    y_value = x_value;
    }
}

您使用-y_value覆盖x_value,然后设置y_value = x_value。所以你的结果是x_value = -y_value和y_value = -y_value

使用局部变量来缓存x_value:

double x_value_cache = x_value;
x_value = -y_value;
y_value = x_value_cache;