-1

コサインシータの値を計算する必要があります。また、ロボットの現在の位置と移動した新しい位置の間の角度の値を最終的に見つける必要があります。シータ値。

import java.io.IOException;
import java.lang.reflect.Method;
import mrds_project.Path;
import mrds_project.Pose;
import mrds_project.controller.Controller;
import java.lang.Math;

public class NaiveStrategy implements PathStrategy {

private final Controller controller;

private NaiveStrategy() {

}
public NaiveStrategy(Controller controller) {
    this.controller = controller;
}

@Override
public void move(Path path) {
    for (Pose target : path) {
                    Pose currentPose = controller.getPose();
        double[] targetPoint = target.getPosition().getVector();
                    double targetVectorX;
                    double targetVectorY;
                    double currentVector;
                    targetVectorX = targetPoint[0] - currentPose.getPosition().getVector()[0];
                    targetVectorY = targetPoint[1] - currentPose.getPosition().getVector()[1];
    }
}
    public double dotPro1(double[] vectorA, double[] vectorB){
        double[] vecPro;
        vecPro = new double[2];
        vecPro[0] = vectorA[0]*vectorB[0];
        vecPro[1] = vectorA[1]*vectorB[1];
        return vecPro[0] + vecPro[1];
    }
    public double dotPro2(double[] length){
        double[] lenPro;
        lenPro = new double[1];
        lenPro[0] = length[0];
        return lenPro[0];
    }
    public static double cosine(double a) throws IOException, ClassNotFoundException{
        double x = Math.cos(Math.toRadians(a));
        Class c = Class.forName("NaiveStrategy");
        Class methodTypes[] = new Class[3];
        methodTypes[0] = Double.TYPE;
        methodTypes[1] = Double.TYPE;
        methodTypes[2] = Double.TYPE;
        Method[] m = c.getMethods();
        NaiveStrategy ns = new NaiveStrategy();
        Object arg[] = new Object[3];
        arg[0] = new Double(50);
        arg[1] = new Double(50);
        arg[2] = new Double(50);
        Object o = m.ns(ns, arg);
        return 0;  
    }
}

これに対する答えを知る必要があります。コンストラクターでエラーが発生しています。「変数コントローラーが初期化されていない可能性がある」ため、その理由はわかっています。そして、returnステートメントの前の最後の行にエラーがありますが、わかりません。「シンボルが見つかりません」と表示されます

Controller.java
package mrds_project.controller;

import mrds_project.Pose;


public interface Controller {
void setVelocity(int linear, int angular);
public Pose getPose();

}
Pose.java
package mrds_project;

import java.util.Map;

public class Pose {
private final Quaternion orientation;
private final Quaternion position;

public Pose(Map<String, Object> mrdsmap)
{
Map<String, Object> orientationMap = (Map<String, Object>) mrdsmap.get("Orientation");
double w = (Double) orientationMap.get("W");
double x = (Double)orientationMap.get("X");
double y = (Double)orientationMap.get("Y");
double z = (Double)orientationMap.get("Z");
orientation = new Quaternion(w, x, y, z);
Map<String, Object> positionMap = (Map<String, Object>) mrdsmap.get("Position");
double x1 = (Double)positionMap.get("X");
double y1 = (Double)positionMap.get("Y");
double z1 = (Double)positionMap.get("Z");
position = new Quaternion(x1, y1, z1);
}


public Quaternion getOrientation() {
return orientation;
}

public Quaternion getPosition() {
return position;
}
}
4

2 に答える 2

3

割り当てられていない最終変数を持つことはできません

private final Controller controller;

およびデフォルトのコンストラクター - コンパイラーは、変数が割り当てられないように保護します。finalキーワードを削除すると、2 つのコンストラクターを保持できます。

于 2012-09-16T22:17:33.697 に答える
1

変化する

Object o = m.ns(ns, arg);

Object o = m.invoke(ns, arg);

しかし、とにかく反射を使用するのはなぜですか? 使わない理由

    public static double cosine(double a) {
        double x = Math.cos(Math.toRadians(a));
        NaiveStrategy ns = new NaiveStrategy();
        ns.YourMethodHere(50, 50, 50);
        return 0;  
    }
于 2012-09-16T22:20:45.727 に答える