Переместите узел arcore_flutter_plugin в соответствии с направлением камеры.Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Переместите узел arcore_flutter_plugin в соответствии с направлением камеры.

Сообщение Anonymous »

Я реализую экран AR с помощью arcore_flutter_plugin и использовал формулу для расчета моего текущего местоположения и местоположения соответствующей точки для отображения узла, но когда я использовал библиотеку геолокатора, значение заголовка было установлено на 0,0 на по умолчанию, поэтому я получил направление камеры через библиотеку compassX.
Даже если я вычисляю направление, используя радианы для значения, рассчитанного на основе широты и долготы, узел не появляется в точном месте, и есть разница .
void _addSphere(ArCoreController controller) {
double? poss = _lastRead?.heading;

List targetLongitudepol = [];
List targetLatitudepol = [];

double? currentLongitude = position?.longitude;
double? currentLatitude = position?.latitude;

for(int i=0; i < targetLongitudepol.length; i++) {

double? deltaLongitude = targetLongitudepol - currentLongitude!;
double? deltaLatitude = targetLatitudepol - currentLatitude!;
double xDistance = longitudeToMeters(deltaLongitude, currentLatitude);
double yDistance = latitudeToMeters(deltaLatitude);

double headingRadians = poss * (pi / 180);

double adjustedX = (xDistance * cos(headingRadians)) - (yDistance * sin(headingRadians));
double adjustedZ = (xDistance * sin(headingRadians)) + (yDistance * cos(headingRadians));

final materialpol = ArCoreMaterial(
color: Colors.red,
);
final spherepol = ArCoreSphere(
materials: [materialpol],
radius: 0.5,
);

sphereNode = ArCoreNode(
name: "123",
shape: spherepol,

position: vector.Vector3(adjustedX, -1.0, adjustedZ),
scale: vector.Vector3(1.0,1.0,1.0),
);

arCoreController?.addArCoreNode(sphereNode!);
}
}

Future deviceCompass() async {
_lastRead = await CompassX.events!.first;
return _lastRead;
}

double latitudeToMeters(double deltaLatitude) {
return deltaLatitude * 111574;
}

double longitudeToMeters(double deltaLongitude, double latitude) {
double metersPerDegree = 111574 * cos(latitude * (pi / 180));
double longitudeInMeters = deltaLongitude * metersPerDegree;
return longitudeInMeters;
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... -direction
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»