Перейти к содержанию
Fire Monkey от А до Я

Саша

Пользователи
  • Постов

    52
  • Зарегистрирован

  • Посещение

Весь контент Саша

  1. Еще раз о километраже. Простейшая формула для расчета расстояния по прямой (по дуге большого круга планеты) вот такая cosduga:=(sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(long2 – long1)); //(1) km:= 6371 * arccos(cosduga); В ней: lat1, long1 - широта и долгота точки отправления (прибытия) в радианах lat2, long2 - широта и долгота точки прибытия (отправления) в радианах южные широты и западные долготы берутся со знаком минус. Напомню, что эту формулу можно вывести двумя способами: 1. через чертежи трехгранного угла. 2. через скалярное произведение векторов Кому этой формулы достаточно - просто вставьте ее в свою программу без заморочек. Она будет работать. Только перед нахождением arccos необходимо предотвратить возможную машинную ошибку, которая обязательно моежет возникнуть, если cosduga, например, будет 1.000000001 cosduga:=min(cosduga,1); cosduga:=max(cosduga,-1); "Беда" в том, что эта формула привязана ТОЛЬКО к истинному Северному полюсу. Можно воспользоваться другой формулой, которая открывает гораздо большие возможности, чем вычисление расстояния. Сейчас покажу другой способ вычисления расстояния. Здесь fi - широта, lamda - долгота в радианах. южные широты и западные долготы берутся со знаком минус. Поехали. Следующие шесть строк оформить подпрограммой. x1:=cos(fi1)*cos(lamda1); y1:=sin(fi1)*cos(lamda1); z1:=sin(lamda1); x2:=cos(fi2)*cos(lamda2); y2:=sin(fi2)*cos(lamda2); z2:=sin(lamda2); cosduga:=x1*x2+y1*y2+z1*z2;// из этой формулы можно получить формулу (1) cosduga:=min(cosduga,1); cosduga:=max(cosduga,-1); km:=arccos(cosduga)/(2*3.1415926)*40000;
  2. Разработал расчетный модуль. На вход этого модуля подаются: 1. Географические координаты точки назначения X (далее: положение). 2. Положение текущей точки A. 3. Положение предыдущей точки B. На выходе этого модуля: 1. Угол между AB и AX (<XAB). 2. Угол между AB и истинным (можно и магнитным) Северным полюсом. Направление на СП вычисляется динамически - без компаса. 3. Расстояние по прямой AB (между двумя замерами). 4. Расстояние по прямой AX до точки назначения. Дал этому модулю 16 контрольных заданий, с которыми он успешно справился! Соединил этот модуль с GPS-примником. И тут началось! Задаю положение точки направления. Иду под открытым небом в этом направлении. Показания этого модуля скачут со страшной силой. Бывают показания и верными, но редко. То, что здесь предлагал Равиль Зарипов, на современные телефоны не устанавливается (Android 10). Здеcь на форумах предлагалось сделать некий фильтр, который отсекал бы резкие изменения по дистанции. Кроме этого можно добавить фильтр от резкого изменения азимута.Только что здесь понимать под "резкими изменениями". А программы на JAVA успешно работают без этих прибамбасов. Может кто знает решение этой проблемы без танцев с бубномна сегодня?
  3. У меня есть предположение, что сенсор ловит кроме GPS координаты от телефонных вышек.
  4. Спасибо! Проблема решена! После aBitmap := TBitmap.Create; добавил Image1.Bitmap.Clear(TAlphaColors.White);
  5. Здравствуйте! Вот фрагмент программы. var aBitmap: TBitmap; type TArrow = record x, y: integer; end; var arrow: array [1..3] of TArrow; ........ ........ ........ procedure TForm1.Button4Click(Sender: TObject); begin aBitmap := TBitmap.Create; aBitmap.SetSize(trunc(Image1.Width), trunc(Image1.Height)); aBitmap.Canvas.BeginScene; // Задаю цвет aBitmap.Canvas.Stroke.Color := TAlphaColorRec.Forestgreen; // Рисую зеленую стрелку aBitmap.Canvas.DrawLine(PointF(X0, Y0), PointF(arrow[1].x, arrow[1].y), 1); aBitmap.Canvas.DrawLine(PointF(arrow[1].x, arrow[1].y), PointF(arrow[2].x, arrow[2].y), 1); aBitmap.Canvas.DrawLine(PointF(arrow[1].x, arrow[1].y), PointF(arrow[3].x, arrow[3].y), 1); aBitmap.Canvas.EndScene; Image1.Bitmap.Assign(aBitmap); aBitmap.Free; end; При первом нажатии кнопки полуаю ожидаемый результат. Затем мне надо перерисовать эту стрелку в другом направлении. Для этого пересчитываю x, y в arrow, нажимаю кнопку, вижу ужас. Ноая стрелка нарисовалась правильно, но остались следы от старой стрелки в виде разбросанных пикселей от старой срелки. Помогите, пожалуста, решить проблему. Спасибо!
  6. Эта ошибка исчезла. Зато появилась такая: [DCC Error] E2597 C:\android\SDK\ndk\21.0.6113669\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\aarch64-linux-android\bin\ld.exe: cannot find -ldl LD.EXE по этому пути ЕСТЬ. там еще чего-то не хватает -ldl. Когдя ругалась на c:\java\bin тогда манифест создавался, а сечас и манифест не создается. Если в менеджере SDK (Delphi) при нажатии Save появляются восклицательные знаки. Но при открытии менеджера SDK этих знаков нет У вас так?
  7. При установке 10.4 или 11.3 все равно пытается установиться SDK версии 25.2.5! При установке 10.4 SDK устанавливается полностью: установил и работай. При установке 11.3 что-то пишется по родным путям в studio 22, но папки в отличии от studio 21 недозаполнены. Даже папки platforms нет. Даже, если скармливать SDK с помощью AS, то чего-то там не хватает. Поэтому и ругается при линковне. Даже манифест не создается. Вывод: 11.3 не от андроида 13! За 30 лет работы хуже языка, чем JAVA не встречал. Может быть Embarcadero одумается. Спасибо за участие в решении моей проблеымы!
  8. Настроил NDK вашим способом Телефон виден, правда, Android 64 bit. В NDK у вас platforms\android-23. Для API 33 так и должно быть? У меня в NDK установились платформы 16-29. Во время компилляции теперь выдает ошибку. Путь у меня прописан правильно - файл ld.exe вижу [DCC Error] E2597 C:\android\SDK\ndk\21.0.6113669\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\aarch64-linux-android\bin\ld.exe: cannot find -ldl На этом форуме есть подобный вопрос, но там речь о 10.4. Попробую поискать для 11.3. Неужели я чего-то добьюсь с этой затеей. https://fire-monkey.ru/topic/7278-dcc-error-e2597-arm-linux-androideabi-ldexe-error-cannot-find-ldl/?do=findComment&comment=42512
  9. То же, что и у Вас. И в гугле пытаюсь найти решение - пока безрезультатно. Может быть потому, что я еще не разбирался с вашими настройками NDK???
  10. Упорно при компиляции выдает ошибку ERROR: E7684 Could not find program 'C:\bin\java.exe'. Переменную среды поменял. Телефон не видит. Правда, все остальное я еще не настраивал.
  11. Установил SDK по короткому пути в C:\SDK. Прописал папки. Совет дельный. Прописал пути. Вот что получилось. Когда нажимаю SAVE, то с тупостью осла (осел обидится) меняются пути, пояляются восклицательные знаки и вот такое сообщение. Когда нажиаю OK это все уходит, но при повторном входе в SDK MANAGER пути как на первом изображении. То есть, сохраняются. NDK установлено по километровым путям, но без восклицательныйх знаков. Установилось с установкой Д11.4. Стоит ли установить в C:\NDK. Если да, то как? JAVA установлена сюда. И еще такие проблемы. Телефон не видит. При компиляции выдает ошибку ERROR: E7684 Could not find program 'C:\bin\java.exe'. Там у меня сроду JAVы не было и все работало. Правильно ли я выполнил установку. Как решить проблему с ошибкой JAVA и невидимостью телефона? Спасибо!
  12. Какая-то вакханалия. Установил 11.3. SDK (33) не устанавливается. Файл aapt.exe не находит (и не только его), базовые папки полупустые. Калечная установка. Можно как нибудь скормить SDK из Android Studio?
  13. Печаль! Наша организация приобрела за бешенные деньги 10.4 Sydney, которую мы используем под Windows. И ради того, чтобы я в личных целях писал под Android 13 новую версию не купят.
  14. Забегая наперед, скажу, что все эти процедуры не помогли: на Android 13 так и не работает, вываливается. При первом запуске программы (после установки) запрос для пользователя появляется. Эффект от ответа на этот запрос такой же, что и от соотсветствующей ручной настройки в меню андроида. При следующих запусках запрос не появляется. И что меня еще удивило. После установки этого приложения c измененным манифестом на Android 10 (с Location там проблем не было и нет) пропал доступ к интернету из этого приложения. Приложение обращалось к FTP-серверу. Проблема решилась добавлением в манифест вот такой строки: <uses-permission android:name="android.permission.INTERNET" /> Подозрение у меня на версию SDK. Посмотрите, пожалуйста мой вчерашний (10.08.2023 17:34) скриншот SDK Mahager. Там красная черта и написано android-29. Может быть Android 13 не от этого SDK? Спасибо! Вот здесь https://learn.microsoft.com/ru-ru/xamarin/android/app-fundamentals/android-api-levels?tabs=windows#android-versions-and-api-levels еесть таблица, из которой видно, что API 29 - это Android 10.
  15. Да! Я даже не могу из своей программы работать с теми папками, с которыми хочу. А только с определенными. Но меня (пока?) это устраивает. Отвлекся от темы. А что касается сенсора, то такое ощущение, что в прграммах на JAVA он работает точнее. Но меня и этаточность устраивает. И еще про манифест и разрешения. Получается, что разрешения в манифесте главней, чем разрешения в меню андроида???
  16. Спасибо за то, что ткнули меня где надо копать! Добавил две строки в манифест. Добавил запрос отсюда: https://docwiki.embarcadero.com/RADStudio/Alexandria/en/Android_Permission_Model Кстати, там синтаксическая ошибка. Пришлось перекроить, сохранив при этом смысл изложенного. В меню Android 10 (где и так все работает) запрещаю доступ к местоположению. Запускаю программу, появляется диалоговое окно запроса. В этом окне даю разрешение. В меню Android 10 проверяю настройку. Настройка установлена как надо. Приложение работает. Но ведь и в Android 13 появится точно такой же запрос. И настройка установится. Тогда какая разница: установлю я эту настройку из окна или из меню? Жду, когда доберусь Android 13.
  17. А требования гугл к распространению приложений через PlayMarket? Если это так, то у меня нет цели работать на продажу и не будет.
  18. Спасибо! Буду пробовать. Потом напишу - что получилось. Только я не знаю, куда вписать эти две строки: <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> ,так как в моем мнифесте уже есть <%uses-permission%>. Мой манифест. <?xml version="1.0" encoding="utf-8"?> <!-- BEGIN_INCLUDE(manifest) --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="%package%" android:versionCode="%versionCode%" android:versionName="%versionName%" android:installLocation="%installLocation%"> <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" /> <%uses-permission%> <uses-feature android:glEsVersion="0x00020000" android:required="True"/> <application android:persistent="%persistent%" android:restoreAnyVersion="%restoreAnyVersion%" android:label="%label%" android:debuggable="%debuggable%" android:largeHeap="%largeHeap%" android:icon="%icon%" android:theme="%theme%" android:hardwareAccelerated="%hardwareAccelerated%" android:resizeableActivity="false" android:requestLegacyExternalStorage="true"> <%provider%> <%application-meta-data%> <%uses-libraries%> <%services%> <!-- Our activity is a subclass of the built-in NativeActivity framework class. This will take care of integrating with our NDK code. --> <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity" android:label="%activityLabel%" android:configChanges="orientation|keyboard|keyboardHidden|screenSize" android:launchMode="singleTask"> <!-- Tell NativeActivity the name of our .so --> <meta-data android:name="android.app.lib_name" android:value="%libNameValue%" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <%activity%> <%receivers%> </application> </manifest> <!-- END_INCLUDE(manifest) -->
  19. Спасибо! Но я же в телефоне настраиваю разрешение местоположения. Надо еще как-то запрашивать? А версия моего SDK подходит?
  20. У меня версия 10.4 Sydney. Может быть в этом проблема (здесь скриншот)? Если да, то как ее решить?
  21. С эмулятором я не работаю. У меня подключен Android 10 по USB. После установки приложение запускается на этом телефоне (Android 10) и работает нормально. Затем APK я устанавливаю на Android 13. И там вылетает.
  22. Зато они проводят вебинары по суперграфике, а простейшие вещи забросили. Все у них на торговлю заточено. А я сегодня опубликовал вот что:
  23. Я считаю, что это недоработка Embarcadero. У меня работает с такой же погрешностью. А вот приложения на JAVA (язык, который я ненавижу) работают гораздо точнее.
×
×
  • Создать...