Відстані між містами

  • Яка із цих таблиць правильна?: варіант 1, варіант 2
  • Табличка географічних координат міст України Table.UA.txt (джерело: geonames.org)
    У цьому файлі перше кожен рядок має такий формат:
    
    Andrushivka	50,01667	29,01667
     Географічна     Північна        Східна
       Назва        широта (Y)     довгота (X)
                     π/2-θ              φ
    
  • Географічні координати - довгота (longitude) та широта (latitude):



    Широта змінюєтсья від -90° (південна широта) до +90° (північна широта), а довгота - від -180° (західна довгота) до +180° (східна довгота)


  • Радіус Землі приймаємо рівним 6371.0 км ("середнє" між 6357 км на полюсі та 6378 км на екваторі)
  • Перетворюємо на площину:

    Постановка задачі

  • 1) Який із населених пунктів України най: східніший, західніший, північніший, південіший?
    Вивести його назву та географічні координати.

  • 2) Задано випадкові кооринати:
     Широта: від 44,3° до 52,2°,
    Довгота: від 22,2° до 40,1°
    
    Знайти найближчий український населений пункт
  • 3) побудувати табличку відстаней між містами-обласними центрами України (скористатися координатами з UA_Brief.txt)
  • 4*) Окреслити контур України виходячи із координат її "прикордонних" населених пунктів

    Введення із файлу

  • Підключення пакета:

  • import java.io.*;
    
  • клас FileReader - дозволяє читати файл посимвольно
  • не забуваємо про можливі помилки:

  • клас BufferedReader - дозволяє "згруповувати" символи у рядки
  • Разом вони - сила :)
            String fname = "D:\\Мои документы\\UA_Brief.txt";
            FileReader fr = new FileReader(fname);
            BufferedReader in = new BufferedReader(fr);
    
  • Як зчитати усі рядки з файлу?

  • В наших файлах назва міста відділена від його координат знаком табуляції ("\t"), тож можна досить просто розбити рядок на 3 частини, використавши метод split класу String:

    Запис дійсних чилел в Java:

    1.2
    3.14
    1.2E8
    
    В останньому прикладі 1.2E8 = 1.2 · 108

  • Типи даних Java для операцій з дійсними числами

    типвідносна точністьвіддорозмір в пам'яті
    float~10-7-3.4·10+38-3.4·10+384 байти (32 біти)
    double~10-16-1.8·10+308+1.8·10+3088 байт (64 біти)

  • Детальніше про стандарт IEEE 754
  • Більше про представлення дійсних чисел у пам'яті комп'ютера тут


    Додатково

  • Про World Geodetic System у Вікіпедії
  • клас java.util.Scanner
    (іще за темою)
    Для нахождения кратчайшего расстояния на сфере (дуга большого круга) можно использовать такой алгоритм:
    1. Перевести широту и долготу в полярные координаты 
    2. Перевести полярные координаты в декартовы 
    3. Найти расстояние между двумя точками на сфере, заданными своими декартовыми координатами 
    4. Для полученного треугольника со сторонами радиус, расстояние, радиус найти угол дуги по теореме косинусов 
    5. По углу дуги и радиусу сферы посчитать длину дуги большого круга.
    
    
    
    
    

    Повернутися