В настоящее время я делаю проект AR с использованием android studio и ARCore, и для моей проблемы у меня есть объекты AR, где они будут размещаться, где бы я ни нажимал, так что это приводит к проблеме, когда они могут быть расположены рядом друг с другом и поэтому объекты накладываются друг на друга и не выглядят лучше всего. Итак, я пытаюсь раздвинуть их, чтобы они не перекрывали друг друга, но код, который я сделал, не работает. Вот мой код:
arFragment.setOnTapArPlaneListener(
(HitResult hitResult, Plane plane, MotionEvent motionEvent) -> {
if (plane.getType() != Plane.Type.HORIZONTAL_UPWARD_FACING){
return;
}
Anchor anchor = hitResult.createAnchor();
arranchors.addElement(anchor); //adding anchor to my vector arr that keeps track of anchors
if(arranchors.size() >=2)//only check when there is 2 or more objects
{
//here we will check for distance between two objects
double dist;
for(int i=0; i<arranchors.size()-1; i++) {
//dist= getMetersBetweenAnchors(arranchors.elementAt(i),arranchors.elementAt(j));
dist= getDistanceMeters(arranchors.elementAt(i).getPose(),arranchors.elementAt(i+1).getPose());
//4 is just a random number for testing. not exactly sure what would be a real number to put.
if(dist < 4)
{
//here we will have to change how far they are.
//makeTranslation have random values just to test.
arranchors.elementAt(i).getPose().compose(Pose.makeTranslation(10.0f, 7.5f, 10.0f));
}
}
}
//placeObject(arFragment, arranchors.lastElement(), selectedObject);
placeObject(arFragment, anchor, selectedObject); //selectedObject is the renderable (like laptopRenderable)
}
);
У меня есть две функции для нахождения расстояния между двумя якорями, которые я нашел в Интернете, и пытаюсь оба, чтобы увидеть, какая работает правильно. Ниже приведен код для них обоих:
float getMetersBetweenAnchors(Anchor anchor1, Anchor anchor2)
{
float[] distance_vector = anchor1.getPose().inverse()
.compose(anchor2.getPose()).getTranslation();
float totalDistanceSquared = 0.0f;
for(int i=0; i<3; ++i)
totalDistanceSquared += distance_vector[i]*distance_vector[i];
return (float) Math.sqrt(totalDistanceSquared);
}
//have two getdistance functions just to see which one works correctly or better.
private double getDistanceMeters(Pose pose0, Pose pose1) {
float distanceX = pose0.tx() - pose1.tx();
float distanceY = pose0.ty() - pose1.ty();
float distanceZ = pose0.tz() - pose1.tz();
return Math.sqrt(distanceX * distanceX +
distanceY * distanceY +
distanceZ * distanceZ);
}
Пожалуйста, просмотрите мой код и посмотрите, что я могу делать неправильно. Большое спасибо за ваше время и хорошего.