Προσδιορισμός της απόστασης μεταξύ δύο παράλληλων ευθειών. Γραφικές παραστάσεις

  • 12.12.2021

ΑΠΟΣΤΑΣΗ, αποστάσεις, βλ. 1. Ο χώρος που χωρίζει δύο σημεία, το κενό ανάμεσα σε κάτι. Η μικρότερη απόσταση μεταξύ δύο σημείων σε ευθεία γραμμή. Ζει από εμάς σε απόσταση δύο χιλιομέτρων. «Ο διοικητής τους επέτρεψε να πλησιάσουν όσο το δυνατόν πιο κοντά… Επεξηγηματικό Λεξικό του Ουσάκοφ

απόσταση- ουσιαστικό, σελ., άνωτρ. συχνά Μορφολογία: (όχι) τι; απόσταση, τι; απόσταση, (δείτε) τι; απόσταση από; απόσταση, για τι; Σχετικά με την απόσταση? pl. τι; απόσταση, (όχι) τι; αποστάσεις, τι; αποστάσεις, (δείτε) τι; απόσταση από; αποστάσεις... Επεξηγηματικό Λεξικό του Ντμίτριεφ

απόσταση- Είμαι; Νυμφεύω Ο χώρος που χωρίζει δύο σημεία, δύο αντικείμενα κ.λπ., το κενό μεταξύ των οποίων, παρά l. Το συντομότερο r. μεταξύ δύο σημείων. R. από το σπίτι στο σχολείο. Μετακινηθείτε στο κοντινό ποτάμι. Σε απόσταση ενός μέτρου, απλωμένα χέρια. Know l., Feel l. στο… … εγκυκλοπαιδικό λεξικό

απόσταση- Είμαι; Νυμφεύω δείτε επίσης. απόσταση α) Ο χώρος που χωρίζει δύο σημεία, δύο αντικείμενα κ.λπ., το κενό μεταξύ των οποίων, από το l. Η μικρότερη απόσταση μεταξύ δύο σημείων. Απόσταση / απόσταση από το σπίτι στο σχολείο. Ερχομαι κοντά ... Λεξικό πολλών εκφράσεων

ΓΕΩΜΕΤΡΙΑ- κλάδος των μαθηματικών που ασχολείται με τη μελέτη των ιδιοτήτων διαφόρων σχημάτων (σημεία, γραμμές, γωνίες, δισδιάστατα και τρισδιάστατα αντικείμενα), το μέγεθος και τη σχετική θέση τους. Για τη διευκόλυνση της διδασκαλίας, η γεωμετρία υποδιαιρείται σε επιπεδομετρία και στερεομετρία. V…… Εγκυκλοπαίδεια Collier

Πλοήγηση*

Πλοήγηση- το τμήμα ναυσιπλοΐας (βλ.), ολοκληρώνοντας μια δήλωση τρόπων προσδιορισμού της θέσης του πλοίου στη θάλασσα, χρησιμοποιώντας πυξίδα και ημερολόγιο (βλ.). Για να προσδιορίσετε τη θέση του πλοίου στη θάλασσα, σημαίνει να σχεδιάσετε στον χάρτη το σημείο στο οποίο βρίσκεται το πλοίο αυτή τη στιγμή. ... ... Εγκυκλοπαιδικό Λεξικό της Φ.Α. Brockhaus και I.A. Έφρον

COGEN- (Cohen) Hermann (1842 1918) Γερμανός φιλόσοφος, ιδρυτής και επιφανέστερος εκπρόσωπος της νεοκαντιανικής σχολής του Marburg. Κυριότερα έργα: «Θεωρία της εμπειρίας του Καντ» (1885), «Η Δικαιολόγηση της Ηθικής του Καντ» (1877), «Η Δικαιολόγηση της Αισθητικής του Καντ» (1889), «Λογική ... ...

Kant Immanuel- Πορεία ζωής και έργα του Kant Ο Immanuel Kant γεννήθηκε στο Konigsberg (τώρα Καλίνινγκραντ) στην Ανατολική Πρωσία το 1724. Ο πατέρας του ήταν σαγματοποιός και η μητέρα του ήταν νοικοκυρά, τα έξι παιδιά τους δεν έζησαν μέχρι την ώριμη ηλικία. Ο Καντ θυμόταν πάντα τους γονείς του από ... ... Η δυτική φιλοσοφία από τις απαρχές μέχρι σήμερα

Η ΚΡΙΤΙΚΗ ΦΙΛΟΣΟΦΙΑ ΤΟΥ ΚΑΝΤ: ΔΙΔΑΣΚΑΛΙΑ ΓΙΑ ΤΙΣ ΙΚΑΝΟΤΗΤΕΣ- (La philosophie critique de Kant: Doctrines des facultes, 1963) του Deleuze. Περιγράφοντας την υπερβατική μέθοδο στην εισαγωγή, ο Ντελέζ σημειώνει ότι ο Καντ κατανοεί τη φιλοσοφία ως την επιστήμη της σχέσης όλης της γνώσης με τους ουσιαστικούς στόχους ... ... History of Philosophy: An Encyclopedia

Αρχή της φάρμας- η βασική αρχή της γεωμετρικής οπτικής (βλ. Γεωμετρική οπτική). Η απλούστερη μορφή μετατόπισης φάσης είναι η δήλωση ότι μια ακτίνα φωτός διαδίδεται πάντα στο διάστημα μεταξύ δύο σημείων κατά μήκος της διαδρομής κατά μήκος των οποίων ο χρόνος διέλευσης της είναι μικρότερος από ... Μεγάλη Σοβιετική Εγκυκλοπαίδεια

Η διαδρομή κατά μήκος της διακεκομμένης γραμμής στην εικόνα είναι μικρότερη από τη διαδρομή κατά μήκος της συμπαγούς γραμμής. Και τώρα λίγο πιο αναλυτικά στο παράδειγμα των θαλάσσιων διαδρομών:

Εάν πλέετε με σταθερή κατεύθυνση, τότε η τροχιά της κίνησης του πλοίου στην επιφάνεια της γης θα είναι μια καμπύλη που ονομάζεται στα μαθηματικά λογαριθμικήσπειροειδής.

Στην πλοήγηση, αυτή η σύνθετη γραμμή διπλής καμπυλότητας ονομάζεται λοξοδρομία, που σε μετάφραση από τα ελληνικά σημαίνει "λοξό τρέξιμο".

Ωστόσο, η μικρότερη απόσταση μεταξύ δύο σημείων της υδρογείου μετριέται κατά μήκος του τόξου ενός μεγάλου κύκλου.

Το τόξο μεγάλου κύκλου λαμβάνεται ως ίχνος από την τομή της επιφάνειας της γης με ένα επίπεδο που διέρχεται από το κέντρο της γης, λαμβανόμενο ως μπάλα.

Στην πλοήγηση, ο μεγάλος κύκλος ονομάζεται ορθοδρομία, που σε μετάφραση σημαίνει «ίσιο τρέξιμο». Το δεύτερο χαρακτηριστικό της ορθοδρομίας είναι ότι διασχίζει τους μεσημβρινούς σε διαφορετικές γωνίες (Εικ. 29).

Η διαφορά απόστασης μεταξύ δύο σημείων της επιφάνειας της γης ενός μισού τροχιού και ενός ορθόδρομου έχει πρακτική σημασία μόνο για μεγάλες διαβάσεις ωκεανών.

Υπό κανονικές συνθήκες, αυτή η διαφορά παραμελείται και η κολύμβηση γίνεται σε σταθερή πορεία, δηλ. κατά μήκος του λοξόδρομου.

Για να εξαγάγουμε την εξίσωση, παίρνουμε το λοξοδρόμιο (Εικ. 30, ένα) δύο σημεία ΕΝΑκαι V,η απόσταση μεταξύ των οποίων είναι στοιχειωδώς μικρή. Σχεδιάζοντας μεσημβρινούς και μια παράλληλη μέσα από αυτούς, παίρνουμε ένα στοιχειώδες ορθογώνιο σφαιρικό τρίγωνο ΑΛΦΑΒΗΤΟ.Σε αυτό το τρίγωνο, η γωνία που σχηματίζεται από την τομή του μεσημβρινού και της παραλλήλου είναι ορθή και η γωνία, ΠnΑΒίσο με την επικεφαλίδα του αγγείου Κ. Καθέτ ΟΠΩΣ ΚΑΙαντιπροσωπεύει ένα τμήμα του τόξου του μεσημβρινού και μπορεί να εκφραστεί

που R - ακτίνα της Γης, που λαμβάνεται ως μπάλα.

Δφ - στοιχειώδης αύξηση γεωγραφικού πλάτους (διαφορά γεωγραφικού πλάτους).

Καθετής SVαντιπροσωπεύει ένα τμήμα παράλληλου τόξου

όπου r - παράλληλη ακτίνα

Δλ - στοιχειώδη διαφορά στα γεωγραφικά μήκη.

Από τριγωνικό OO 1 C μπορείς να το βρεις

Στη συνέχεια στην τελική μορφή των ποδιών SVμπορεί να εκφραστεί ως εξής:

Λαμβάνοντας ένα στοιχειώδες σφαιρικό τρίγωνο αλφάβητογια επίπεδη, γράψτε

Μετά το κόψιμο R και αντικαθιστώντας στοιχειωδώς μικρές προσαυξήσεις των συντεταγμένων με απειροελάχιστο θα έχουμε

Ας ενσωματώσουμε την έκφραση που προκύπτει στο εύρος από φ 1, λ 1 έως φ 2, λ 2 υποθέτοντας ότι η τιμή tgK είναι σταθερή:

Στη δεξιά πλευρά, έχουμε ένα ολοκλήρωμα πίνακα. Αφού αντικαταστήσουμε την τιμή του, λαμβάνουμε την εξίσωση λοξοδρομίας στη μπάλα

Η ανάλυση αυτής της εξίσωσης οδηγεί στα ακόλουθα συμπεράσματα:

Στις διαδρομές 0 και 180 °, το λοξοδρόμιο μετατρέπεται σε τόξο μεγάλου κύκλου - τον μεσημβρινό.

Στις διαδρομές των 90 και 270 °, το λοξοδρόμιο συμπίπτει με το παράλληλο.

Το λοξοδρόμιο διασχίζει κάθε παράλληλο μόνο μία φορά, και κάθε μεσημβρινό - αμέτρητες φορές. εκείνοι. πλησιάζοντας σπειροειδώς τον στύλο, δεν τον φτάνει.

Η πλεύση σε σταθερή πορεία, δηλαδή σε λοξοδρόμιο, αν και δεν είναι η μικρότερη απόσταση μεταξύ δύο σημείων στη Γη, παρουσιάζει σημαντική ευκολία για τον πλοηγό.

Οι απαιτήσεις για έναν ναυτικό χάρτη πλοήγησης μπορούν να διαμορφωθούν με βάση το πλεονέκτημα της πλεύσης κατά μήκος του λοξοδρόμου και τα αποτελέσματα της ανάλυσης της εξίσωσής του ως εξής.

1. Η Λοξοδρομία, που διασχίζει τους μεσημβρινούς υπό σταθερή γωνία, πρέπει να απεικονίζεται ως ευθεία γραμμή.

2. Η χαρτογραφική προβολή που χρησιμοποιείται για την κατασκευή των χαρτών πρέπει να είναι σύμμορφη, ώστε οι πορείες, τα έδρανα και οι γωνίες σε αυτήν να αντιστοιχούν στις τιμές τους στο έδαφος.

3. Οι μεσημβρινοί και οι παράλληλοι, όπως οι γραμμές πορείας 0, 90, 180 ° και 270 °, πρέπει να είναι αμοιβαία κάθετες ευθείες γραμμές.

Η μικρότερη απόσταση μεταξύ δύο δεδομένων σημείων στην επιφάνεια της Γης, που λαμβάνονται ως μπάλα, είναι η μικρότερη από τα τόξα του μεγάλου κύκλου που διέρχεται από αυτά τα σημεία. Εκτός από την περίπτωση ενός πλοίου που ακολουθεί τον μεσημβρινό ή τον ισημερινό, ο ορθόδρομος διασχίζει τους μεσημβρινούς σε διαφορετικές γωνίες. Επομένως, ένα σκάφος που ακολουθεί μια τέτοια καμπύλη πρέπει πάντα να αλλάζει την πορεία του. Στην πράξη, είναι πιο βολικό να ακολουθήσετε μια πορεία που κάνει σταθερή γωνία με τους μεσημβρινούς και απεικονίζεται στον χάρτη στην προβολή Mercator ως ευθεία γραμμή - λοξοδρόμιο. Ωστόσο, σε μεγάλες αποστάσεις, η διαφορά στο μήκος του ορθόδρομου και του λοξοδρόμου φτάνει σε σημαντική τιμή. Επομένως, σε τέτοιες περιπτώσεις υπολογίζεται η ορθόδρομος και σημειώνονται σε αυτήν ενδιάμεσα σημεία, μεταξύ των οποίων κολυμπάει το λοξοδρόμιο.

Μια χαρτογραφική προβολή που ικανοποιεί τις απαριθμούμενες απαιτήσεις προτάθηκε από τον Ολλανδό χαρτογράφο Gerard Kramer (Mercator) το 1569. Προς τιμή του δημιουργού της, η προβολή ονομάστηκε εμπορευματικός.

Και όποιος θέλει να πάρει ακόμα πιο ενδιαφέρουσες πληροφορίες, μάθετε περισσότερα Το αρχικό άρθρο βρίσκεται στον ιστότοπο InfoGlaz.rfΟ σύνδεσμος προς το άρθρο από το οποίο δημιουργήθηκε αυτό το αντίγραφο είναι

(Περιγραφική γεωμετρία)
  • CD (CXDX, C2D2)απεικονίζεται ως σημείο C5 = D5 А5В5ισοδυναμεί...
    (Περιγραφική γεωμετρία)
  • Προσδιορισμός της απόστασης μεταξύ δύο παράλληλων επιπέδων
    Προσδιορισμός της απόστασης μεταξύ δύο παράλληλων επιπέδων στη γενική θέση 01 | ΧΕίναι βολικό να το αναγάγετε στο έργο του προσδιορισμού της απόστασης μεταξύ των ίδιων δύο επιπέδων, που μετατρέπεται στη θέση των προβολέων. Στην περίπτωση αυτή, η απόσταση μεταξύ των επιπέδων ορίζεται ως η κάθετη μεταξύ των ευθειών, ...
    (Περιγραφική γεωμετρία)
  • Προσδιορισμός της απόστασης μεταξύ δύο διασταυρούμενων ευθειών
    Εάν θέλετε να προσδιορίσετε τη μικρότερη απόσταση μεταξύ δύο γραμμών διέλευσης, πρέπει να αλλάξετε τα συστήματα των επιπέδων προβολής δύο φορές. Κατά την επίλυση αυτού του προβλήματος, η ευθεία γραμμή CD (CXDX, C2D2)απεικονίζεται ως σημείο C5 = D5(εικ. 198). Απόσταση από αυτό το σημείο έως την προβολή А5В5ισοδυναμεί...
    (Περιγραφική γεωμετρία)
  • Η γωνία μεταξύ δύο διασταυρούμενων ευθειών
    Αυτή είναι η γωνία μεταξύ δύο τεμνόμενων γραμμών παράλληλων προς τα δεδομένα. Έτσι, αυτή η εργασία είναι παρόμοια με την προηγούμενη. Για να το λύσετε, πρέπει να πάρετε ένα αυθαίρετο σημείο και να σχεδιάσετε δύο ευθείες γραμμές μέσα από αυτό, παράλληλες με τις δεδομένες τεμνόμενες ευθείες και χρησιμοποιώντας τον μετασχηματισμό των προβολών, να καθορίσετε την επιθυμητή γωνία ...
    (Βασικές αρχές της περιγραφικής γεωμετρίας. Μια σύντομη πορεία και μια συλλογή προβλημάτων.)
  • Προσδιορισμός της απόστασης μεταξύ δύο παράλληλων ευθειών
    Το πρόβλημα επιλύεται με διπλή αντικατάσταση των επιπέδων προβολής. Στο τελικό στάδιο, ένα από τα επίπεδα προβολής πρέπει να είναι κάθετο σε μία από τις γραμμές διέλευσης. Τότε η μικρότερη απόσταση μεταξύ τους καθορίζεται από το μέγεθος του κάθετου τμήματος σε μια άλλη τεμνόμενη ευθεία (Εικ. 199) ....
    (Περιγραφική γεωμετρία)
  • Ο αλγόριθμος του Dijkstra είναι ένας αλγόριθμος γραφήματος που εφευρέθηκε από τον Ολλανδό επιστήμονα Edsger Dijkstra το 1959. Βρίσκει τα συντομότερα μονοπάτια από μια από τις κορυφές του γραφήματος σε όλες τις άλλες. Ο αλγόριθμος λειτουργεί μόνο για γραφήματα χωρίς ακμές αρνητικού βάρους.

    Ας εξετάσουμε την εκτέλεση του αλγορίθμου χρησιμοποιώντας το παράδειγμα του γραφήματος που φαίνεται στο σχήμα.

    Ας απαιτείται να βρεθούν οι μικρότερες αποστάσεις από την 1η κορυφή σε όλες τις άλλες.

    Οι κύκλοι υποδεικνύουν τις κορυφές, τις γραμμές - τις διαδρομές μεταξύ τους (τις άκρες του γραφήματος). Οι αριθμοί των κορυφών υποδεικνύονται σε κύκλους, η "τιμή" τους υποδεικνύεται πάνω από τις άκρες - το μήκος της διαδρομής. Δίπλα σε κάθε κορυφή υπάρχει μια κόκκινη ετικέτα - το μήκος της συντομότερης διαδρομής προς αυτήν την κορυφή από την κορυφή 1.

    Το πρώτο βήμα... Ας εξετάσουμε ένα βήμα του αλγορίθμου του Dijkstra για το παράδειγμά μας. Η κορυφή 1 έχει την ελάχιστη ετικέτα. Οι γείτονές της είναι οι κορυφές 2, 3 και 6.

    Ο πρώτος γείτονας στη σειρά της κορυφής 1 είναι η κορυφή 2, επειδή το μήκος της διαδρομής προς αυτήν είναι ελάχιστο. Το μήκος της διαδρομής προς αυτήν μέσω της κορυφής 1 είναι ίσο με το άθροισμα της τιμής της ετικέτας της κορυφής 1 και του μήκους της άκρης που πηγαίνει από την 1η στη 2η, δηλαδή 0 + 7 = 7. Αυτό είναι μικρότερη από την τρέχουσα ετικέτα της κορυφής 2, το άπειρο, άρα η νέα ετικέτα της 2ης κορυφής είναι 7.

    Κάνουμε μια παρόμοια πράξη με δύο άλλους γείτονες της 1ης κορυφής - την 3η και την 6η.

    Όλοι οι γείτονες της κορυφής 1 ελέγχονται. Η τρέχουσα ελάχιστη απόσταση μέχρι την κορυφή 1 θεωρείται οριστική και δεν υπόκειται σε αναθεώρηση (το γεγονός ότι αυτό είναι πραγματικά έτσι αποδείχθηκε για πρώτη φορά από τον E. Dijkstra). Ας το διαγράψουμε από το γράφημα για να επισημάνουμε ότι αυτή η κορυφή έχει επισκεφθεί.

    Δεύτερο βήμα... Το βήμα του αλγορίθμου επαναλαμβάνεται. Βρείτε ξανά την «πλησιέστερη» από τις κορυφές που δεν έχετε επισκεφτεί. Αυτή είναι η κορυφή 2, με την ένδειξη 7.

    Προσπαθούμε πάλι να μειώσουμε τις ετικέτες των γειτόνων της επιλεγμένης κορυφής, προσπαθώντας να τις περάσουμε μέσα από τη 2η κορυφή. Οι γείτονες της κορυφής 2 είναι οι κορυφές 1, 3 και 4.

    Ο πρώτος (κατά σειρά) γείτονας της κορυφής 2 είναι η κορυφή 1. Αλλά έχει ήδη επισκεφθεί, οπότε δεν κάνουμε τίποτα με την 1η κορυφή.

    Ο επόμενος γείτονας της κορυφής 2 είναι η κορυφή 3, καθώς έχει την ελάχιστη ετικέτα των κορυφών που επισημαίνονται ως μη επισκέψιμες. Εάν πάτε σε αυτό μέσω του 2, τότε το μήκος μιας τέτοιας διαδρομής θα είναι ίσο με 17 (7 + 10 = 17). Αλλά η τρέχουσα ετικέτα της τρίτης κορυφής είναι 9, που είναι μικρότερη από 17, επομένως η ετικέτα δεν αλλάζει.

    Ένας άλλος γείτονας της κορυφής 2 είναι η κορυφή 4. Αν πάτε σε αυτήν μέσω της 2ης, τότε το μήκος μιας τέτοιας διαδρομής θα είναι ίσο με το άθροισμα της μικρότερης απόστασης από τη 2η κορυφή και την απόσταση μεταξύ των κορυφών 2 και 4, δηλαδή , 22 (7 + 15 = 22) ... Από 22<, устанавливаем метку вершины 4 равной 22.

    Όλοι οι γείτονες της κορυφής 2 έχουν προβληθεί, παγώστε την απόσταση από αυτήν και σημειώστε την ως επίσκεψη.

    Τρίτο βήμα... Επαναλαμβάνουμε το βήμα του αλγορίθμου επιλέγοντας την κορυφή 3. Μετά την «επεξεργασία» του, έχουμε τα ακόλουθα αποτελέσματα:

    Περαιτέρω βήματα... Επαναλαμβάνουμε το βήμα του αλγορίθμου για τις υπόλοιπες κορυφές. Αυτές θα είναι οι κορυφές 6, 4 και 5, αντίστοιχα.

    Ολοκλήρωση Εκτέλεσης Αλγορίθμου... Ο αλγόριθμος τελειώνει όταν δεν είναι δυνατή η επεξεργασία άλλων κορυφών. Σε αυτό το παράδειγμα, όλες οι κορυφές διαγράφονται, αλλά είναι λάθος να πιστεύουμε ότι αυτό θα συμβεί σε οποιοδήποτε παράδειγμα - ορισμένες κορυφές μπορεί να παραμείνουν μη διασταυρούμενες εάν είναι αδύνατο να τις φτάσετε, δηλαδή εάν το γράφημα είναι αποσυνδεδεμένο. Το αποτέλεσμα του αλγορίθμου φαίνεται στο τελευταίο σχήμα: η συντομότερη διαδρομή από την κορυφή 1 έως το 2 είναι 7, στο 3 είναι 9, στο 4 είναι 20, στο 5 είναι 20, στο 6 είναι 11.

    Εφαρμογή του αλγορίθμου σε διάφορες γλώσσες προγραμματισμού:

    C ++

    #include "stdafx.h" #include χρησιμοποιώντας namespace std? const int V = 6; // Ο αλγόριθμος του Dijkstra void Dijkstra (int GR [V] [V], int st) (int distance [V], count, index, i, u, m = st + 1; bool visited [V]; for (i = 0; i "< "<> "; cin >> start; Dijkstra (GR, start-1); σύστημα (" pause >> void ");)

    Πασκάλ

    πρόγραμμα DijkstraAlgorithm; χρησιμοποιεί crt? const V = 6; inf = 100000; τύπος vektor = πίνακας ακέραιου αριθμού; var start: ακέραιος; const GR: πίνακας ακεραίων = ((0, 1, 4, 0, 2, 0), (0, 0, 0, 9, 0, 0), (4, 0, 0, 7, 0, 0), (0, 9, 7, 0, 0, 2), (0, 0, 0, 0, 0, 8), (0, 0, 0, 0, 0, 0)); Διαδικασία (αλγόριθμος Dijkstra) Dijkstra (GR: πίνακας ακέραιου αριθμού, st: ακέραιος); var count, index, i, u, m, min: ακέραιος; απόσταση: vektor; επίσκεψη: συστοιχία boolean; αρχίζω m: = st; για i: = 1 έως V ξεκινήστε την απόσταση [i]: = inf; επίσκεψη [i]: = ψευδής; τέλος; απόσταση: = 0; για μέτρηση: = 1 έως V-1 αρχίζουν min: = inf; για i: = 1 έως V κάντε εάν (δεν επισκεφτήκατε [i]) και (απόσταση [i]<=min) then begin min:=distance[i]; index:=i; end; u:=index; visited[u]:=true; for i:=1 to V do if (not visited[i]) and (GR<>0) και (απόσταση [u]<>στ) και (απόσταση [u] + ΓΡ inf τότε writeln (m, ">", i, "=", απόσταση [i]) else writeln (m, ">", i, "=", "η διαδρομή δεν είναι διαθέσιμη"); τέλος; (κύριο μπλοκ προγράμματος) start clrscr? γράφω ("Start vertex >>"); ανάγνωση (έναρξη) Dijkstra (GR, έναρξη); τέλος.

    Ιάβα

    εισαγωγή java.io.BufferedReader; εισαγωγή java.io.IOException; εισαγωγή java.io.InputStreamReader; εισαγωγή java.io.PrintWriter; εισαγωγή java.util.ArrayList; Εισαγωγή java.util.Arrays; εισαγωγή java.util.StringTokenizer; δημόσια κλάση Λύση (ιδιωτικό στατικό int INF = Integer.MAX_VALUE / 2; private int n; // ο αριθμός των κορυφών στο δίγραφο private int m; // ο αριθμός των τόξων στο δίγραφο private ArrayList adj; // λίστα γειτνίασης ιδιωτικό ArrayList βάρος; // βάρος της ακμής στο διγραφικό ιδιωτικό boolean που χρησιμοποιείται. // πίνακας για την αποθήκευση πληροφοριών σχετικά με περασμένες και μη περασμένες κορυφές private int dist. // πίνακας για την αποθήκευση της απόστασης από την αρχική κορυφή // πίνακα προγόνων που απαιτείται για την επαναφορά της συντομότερης διαδρομής από την αρχική κορυφή private int pred; int start? // αρχική κορυφή, από την οποία αναζητείται η απόσταση από όλες τις άλλες ως private BufferedReader cin. ιδιωτικό PrintWriter cout? ιδιωτική συσκευή StringTokenizer. // διαδικασία για την έναρξη του αλγόριθμου του Dijkstra από την αρχική κορυφή private void dejkstra (int s) (dist [s] = 0; // η μικρότερη απόσταση από την αρχική κορυφή είναι 0 για (int iter = 0; iter< n; ++iter) { int v = -1; int distV = INF; //выбираем вершину, кратчайшее расстояние до которого еще не найдено for (int i = 0; i < n; ++i) { if (used[i]) { continue; } if (distV < dist[i]) { continue; } v = i; distV = dist[i]; } //рассматриваем все дуги, исходящие из найденной вершины for (int i = 0; i < adj[v].size(); ++i) { int u = adj[v].get(i); int weightU = weight[v].get(i); //релаксация вершины if (dist[v] + weightU < dist[u]) { dist[u] = dist[v] + weightU; pred[u] = v; } } //помечаем вершину v просмотренной, до нее найдено кратчайшее расстояние used[v] = true; } } //процедура считывания входных данных с консоли private void readData() throws IOException { cin = new BufferedReader(new InputStreamReader(System.in)); cout = new PrintWriter(System.out); tokenizer = new StringTokenizer(cin.readLine()); n = Integer.parseInt(tokenizer.nextToken()); //считываем количество вершин графа m = Integer.parseInt(tokenizer.nextToken()); //считываем количество ребер графа start = Integer.parseInt(tokenizer.nextToken()) - 1; //инициализируем списка смежности графа размерности n adj = new ArrayList[n]; for (int i = 0; i < n; ++i) { adj[i] = new ArrayList() ) // αρχικοποίηση της λίστας, η οποία αποθηκεύει τα βάρη των ακμών βάρος = νέα ArrayList [n]; για (int i = 0; i< n; ++i) { weight[i] = new ArrayList() ) // διαβάστε το γράφημα που καθορίζεται από τη λίστα ακμών για (int i = 0; i< m; ++i) { tokenizer = new StringTokenizer(cin.readLine()); int u = Integer.parseInt(tokenizer.nextToken()); int v = Integer.parseInt(tokenizer.nextToken()); int w = Integer.parseInt(tokenizer.nextToken()); u--; v--; adj[u].add(v); weight[u].add(w); } used = new boolean[n]; Arrays.fill(used, false); pred = new int[n]; Arrays.fill(pred, -1); dist = new int[n]; Arrays.fill(dist, INF); } //процедура восстановления кратчайшего пути по массиву предком void printWay(int v) { if (v == -1) { return; } printWay(pred[v]); cout.print((v + 1) + " "); } //процедура вывода данных в консоль private void printData() throws IOException { for (int v = 0; v < n; ++v) { if (dist[v] != INF) { cout.print(dist[v] + " "); } else { cout.print("-1 "); } } cout.println(); for (int v = 0; v < n; ++v) { cout.print((v + 1) + ": "); if (dist[v] != INF) { printWay(v); } cout.println(); } cin.close(); cout.close(); } private void run() throws IOException { readData(); dejkstra(start); printData(); cin.close(); cout.close(); } public static void main(String args) throws IOException { Solution solution = new Solution(); solution.run(); } }

    Αλλη επιλογή:

    Εισαγωγή java.io. *; εισαγωγή java.util.*; δημόσια τάξη Dijkstra (ιδιωτική στατική τελική Graph.Edge GRAPH = (new Graph.Edge ("a", "b", 7), new Graph.Edge ("a", "c", 9), new Graph.Edge ( "a", "f", 14), new Graph.Edge ("b", "c", 10), new Graph.Edge ("b", "d", 15), new Graph.Edge ("c "," d ", 11), νέο Graph.Edge (" c "," f ", 2), new Graph.Edge (" d "," e ", 6), new Graph.Edge (" e ", "f", 9),); ιδιωτική στατική τελική συμβολοσειρά START = "a"; ιδιωτική στατική τελική συμβολοσειρά END = "e"; δημόσιο στατικό κενό κύριο (String args) (Γράφημα g = νέο γράφημα (GRAPH); g.dijkstra (START); g.printPath (END); //g.printAllPaths ();)) Graph κατηγορίας (ιδιωτικός τελικός χάρτης γραφική παράσταση; // αντιστοίχιση ονομάτων κορυφών σε αντικείμενα Κορυφής, κατασκευασμένα από ένα σύνολο ακμών / ** Μία άκρη του γραφήματος (χρησιμοποιείται μόνο από τον κατασκευαστή γραφήματος) * / δημόσια στατική κλάση Edge (δημόσια τελική συμβολοσειρά v1, v2; δημόσια τελική int dist; public Edge (String v1, String v2, int dist) (this.v1 = v1; this.v2 = v2; this.dist = dist;)) / ** Μία κορυφή του γραφήματος, πλήρης με αντιστοιχίσεις σε γειτονικές κορυφές * / δημόσια στατική κλάση Vertex υλοποιεί Συγκρίσιμο (δημόσιο τελικό όνομα συμβολοσειράς; δημόσια int dist = Integer.MAX_VALUE; // MAX_VALUE υποτίθεται ότι είναι δημόσιο άπειρο Vertex previous = null; δημόσιος τελικός χάρτης γείτονες = νέος Χάρτης HashMap<>() public Vertex (Όνομα συμβολοσειράς) (this.name = name;) private void printPath () (if (this == this.previous) (System.out.printf ("% s", this.name);) αλλιώς εάν ( this.previous == null) (System.out.printf ("% s (unreached)", this.name);) else (this.previous.printPath (); System.out.printf ("->% s ( % δ) ", this.name, this.dist);)) public int compareTo (Vertex other) (return Integer.compare (dist, other.dist);)) / ** Δημιουργεί ένα γράφημα από ένα σύνολο ακμών * / δημόσιο Γράφημα (άκρες άκρων) (γράφημα = νέο HashMap<>(άκρες.μήκος); // ένα πέρασμα για να βρεθούν όλες οι κορυφές για (Ακμή e: άκρες) (if (! graph.containsKey (e.v1)) graph.put (e.v1, νέα κορυφή (e.v1)), αν (! γράφημα. containKey (e.v2)) graph.put (e.v2, new Vertex (e.v2));) // ένα άλλο πέρασμα για να ορίσετε γειτονικές κορυφές για (Edge e: edges) (graph.get (e.v1). fqinjs.put (graph.get (e.v2), e.dist); //graph.get(e.v2).neighbors.put(graph.get(e.v1), e.dist); // επίσης κάντε το για ένα μη κατευθυνόμενο γράφημα)) / ** Εκτελεί το dijkstra χρησιμοποιώντας μια καθορισμένη κορυφή πηγής * / public void dijkstra (String startName) (if (! graph.containsKey (startName)) (System.err.printf ("Graph does" t περιέχει αρχή έναρξης \ "% s \" \ n ", startName); return;) τελικό Vertex source = graph.get (startName); NavigableSet q = νέο Σύνολο δέντρων<>() // set-up vertices for (Vertex v: graph.values ()) (v.previous = v == source; source: null; v.dist = v == source; 0: Integer.MAX_VALUE; q. add (v);) dijkstra (q); ) / ** Υλοποίηση του αλγορίθμου dijkstra "s χρησιμοποιώντας έναν δυαδικό σωρό. * / Private void dijkstra (τελικό NavigableSet q) (Κορυφή u, v; ενώ (! q.isEmpty ()) (u = q.pollFirst (); // κορυφή με τη μικρότερη απόσταση (η πρώτη επανάληψη θα επιστρέψει την πηγή) εάν (u.dist == Integer.MAX_VALUE) break; // μπορούμε να αγνοήσουμε το u (και οποιεσδήποτε άλλες εναπομείνασες κορυφές) αφού δεν είναι προσβάσιμες // κοιτάξτε τις αποστάσεις από κάθε γείτονα για (Map.Entry a: u.neighbors.entrySet ()) (v = a.getKey (); // ο γείτονας σε αυτήν την επανάληψη τελικό int alternateDist = u.dist + a.getValue (); εάν (alternateDist< v.dist) { // shorter path to neighbour found q.remove(v); v.dist = alternateDist; v.previous = u; q.add(v); } } } } /** Prints a path from the source to the specified vertex */ public void printPath(String endName) { if (!graph.containsKey(endName)) { System.err.printf("Graph doesn"t contain end vertex \"%s\"\n", endName); return; } graph.get(endName).printPath(); System.out.println(); } /** Prints the path from the source to every vertex (output order is not guaranteed) */ public void printAllPaths() { for (Vertex v: graph.values()) { v.printPath(); System.out.println(); } } }

    ντο

    #περιλαμβάνω #περιλαμβάνω #περιλαμβάνω // # define BIG_EXAMPLE typedef struct node_t node_t, * heap_t; typedef struct edge_t edge_t; struct edge_t (node_t * nd; / * target of this edge * / edge_t * sibling; / * for singlely linked list * / int len; / * edge cost * /); struct node_t (edge_t * edge; / * μεμονωμένα συνδεδεμένη λίστα ακμών * / node_t * via; / * όπου ο προηγούμενος κόμβος βρίσκεται στη συντομότερη διαδρομή * / διπλή απόσταση; / * απόσταση από τον αρχικό κόμβο * / όνομα χαρακτήρων; / * the, er , όνομα * / int heap_idx; / * σύνδεσμος στη θέση σωρού για ενημέρωση απόστασης * /); / * --- διαχείριση άκρων --- * / #ifdef BIG_EXAMPLE # define BLOCK_SIZE (1024 * 32 - 1) #else # define BLOCK_SIZE 15 #endif edge_t * edge_root = 0, * e_next = 0; / * Μην πειράζετε τα πράγματα διαχείρισης μνήμης, είναι εκτός θέματος. Προσποιηθείτε e_next = malloc (sizeof (edge_t)) * / void add_edge (node_t * a, node_t * b, double d) (if (e_next == edge_root ) (edge_root = malloc (sizeof (edge_t) * (BLOCK_SIZE + 1)); edge_root.sibling = e_next; e_next = edge_root + BLOCK_SIZE;) --e_next; e_next-> nd = b; e_next-> e_next-> len = -> αδερφός = a-> άκρη; α-> άκρη = e_next;) void free_edges () (για (; edge_root; edge_root = e_next) (e_next = edge_root.sibling; free (edge_root);)) / * --- ουρά προτεραιότητας πράγματα --- * / heap_t * heap; int heap_len; void set_dist (node_t * nd, node_t * via, double d) (int i, j; / * γνώριζε ήδη καλύτερη διαδρομή * / if (nd-> via && d> = nd-> dist) επιστροφή· / * βρείτε την υπάρχουσα καταχώριση σωρού ή δημιουργήστε μια νέα * / nd-> dist = d; nd-> via = via; i = nd-> heap_idx; εάν (! i) i = ++ heap_len; / * upheap * / για (; i> 1 && nd-> dist< heap->απόσταση? i = j) (σωρός [i] = σωρός [j]) -> heap_idx = i; σωρό [i] = nd; nd-> heap_idx = i; ) node_t * pop_queue () (node_t * nd, * tmp; int i, j; if (! heap_len) return 0; / * αφαιρέστε το κύριο στοιχείο, τραβήξτε το στοιχείο ουράς εκεί και downheap * / nd = σωρό, tmp = σωρό, για (i = 1; i< heap_len && (j = i * 2) <= heap_len; i = j) { if (j < heap_len && heap[j]->dist> heap-> dist) j ++; αν (σωρός [j] -> dist> = tmp-> dist) break; (σωρός [i] = σωρός [j]) -> heap_idx = i; ) σωρό [i] = tmp; tmp-> heap_idx = i; επιστροφή nd? ) / * --- Dijkstra πράγματα; οι μη προσβάσιμοι κόμβοι δεν θα μπουν ποτέ στην ουρά --- * / void calc_all (node_t * start) (node_t * lead; edge_t * e; set_dist (start, start, 0); ενώ ((lead = pop_queue ())) για ( e = lead-> άκρο, e; e = e-> αδελφός) set_dist (e-> nd, lead, lead-> dist + e-> len);) void show_path (node_t * nd) (if (nd-> via == nd) printf ("% s", nd-> όνομα); αλλιώς εάν (! nd-> via) printf ("% s (μη πρόσβαση)", nd-> όνομα); else (show_path (nd-> μέσω); printf ("->% s (% g)", nd-> όνομα, nd-> dist);)) int main (void) (#ifndef BIG_EXAMPLE int i; # define N_NODES ("f" - " a "+ 1) node_t * nodes = calloc (sizeof (node_t), N_NODES); for (i = 0; i< N_NODES; i++) sprintf(nodes[i].name, "%c", "a" + i); # define E(a, b, c) add_edge(nodes + (a - "a"), nodes + (b - "a"), c) E("a", "b", 7); E("a", "c", 9); E("a", "f", 14); E("b", "c", 10);E("b", "d", 15);E("c", "d", 11); E("c", "f", 2); E("d", "e", 6); E("e", "f", 9); # undef E #else /* BIG_EXAMPLE */ int i, j, c; # define N_NODES 4000 node_t *nodes = calloc(sizeof(node_t), N_NODES); for (i = 0; i < N_NODES; i++) sprintf(nodes[i].name, "%d", i + 1); /* given any pair of nodes, there"s about 50% chance they are not connected; if connected, the cost is randomly chosen between 0 and 49 (inclusive! see output for consequences) */ for (i = 0; i < N_NODES; i++) { for (j = 0; j < N_NODES; j++) { /* majority of runtime is actually spent here */ if (i == j) continue; c = rand() % 100; if (c < 50) continue; add_edge(nodes + i, nodes + j, c - 50); } } #endif heap = calloc(sizeof(heap_t), N_NODES + 1); heap_len = 0; calc_all(nodes); for (i = 0; i < N_NODES; i++) { show_path(nodes + i); putchar("\n"); } #if 0 /* real programmers don"t free memories (they use Fortran) */ free_edges(); free(heap); free(nodes); #endif return 0; }

    PHP

    $ edge, "cost" => $ edge); $ γείτονες [$ edge] = πίνακας ("end" => $ edge, "cost" => $ edge); ) $ vertices = array_unique ($ vertices); foreach ($ κορυφές ως $ κορυφή) ($ dist [$ vertex] = INF; $ προηγούμενο [$ vertex] = NULL;) $ dist [$ source] = 0; $ Q = $ κορυφές; while (count ($ Q)> 0) (// TODO - Βρείτε πιο γρήγορο τρόπο για να λάβετε ελάχιστο $ min = INF; foreach ($ Q ως $ κορυφή) (if ($ dist [$ vertex])< $min) { $min = $dist[$vertex]; $u = $vertex; } } $Q = array_diff($Q, array($u)); if ($dist[$u] == INF or $u == $target) { break; } if (isset($neighbours[$u])) { foreach ($neighbours[$u] as $arr) { $alt = $dist[$u] + $arr["cost"]; if ($alt < $dist[$arr["end"]]) { $dist[$arr["end"]] = $alt; $previous[$arr["end"]] = $u; } } } } $path = array(); $u = $target; while (isset($previous[$u])) { array_unshift($path, $u); $u = $previous[$u]; } array_unshift($path, $u); return $path; } $graph_array = array(array("a", "b", 7), array("a", "c", 9), array("a", "f", 14), array("b", "c", 10), array("b", "d", 15), array("c", "d", 11), array("c", "f", 2), array("d", "e", 6), array("e", "f", 9)); $path = dijkstra($graph_array, "a", "e"); echo "path is: ".implode(", ", $path)."\n";


    Πύθων

    από συλλογές εισαγωγή namedtuple, ουρά από pprint εισαγωγή pprint ως pp inf = float ("inf") Edge = namedtuple ("Edge", "start, end, cost") class Graph (): def __init __ (self, edges): self .edges = edges2 = self.vertices = σύνολο (άθροισμα ((για e στις ακμές2),)) def dijkstra (self, source, dest): βεβαιώσω πηγή σε self.vertices dist = (κορυφή: inf για κορυφή στον εαυτό. κορυφές ) previous = (κορυφή: Καμία για κορυφή σε self.vertices) dist = 0 q = self.vertices.copy () γείτονες = (κορυφή: σύνολο () για κορυφή σε self.vertices) για αρχή, τέλος, κόστος σε εαυτό . άκρες: γείτονες.add ((τέλος, κόστος)) #pp (γείτονες) ενώ q: u = min (q, κλειδί = κορυφή λάμδα: dist) q.remove (u) εάν dist [u] == inf ή u = = προορισμό: διάλειμμα για v, κόστος σε γείτονες [u]: alt = απόσταση [u] + κόστος εάν alt< dist[v]: # Relax (u,v,a) dist[v] = alt previous[v] = u #pp(previous) s, u = deque(), dest while previous[u]: s.pushleft(u) u = previous[u] s.pushleft(u) return s graph = Graph([("a", "b", 7), ("a", "c", 9), ("a", "f", 14), ("b", "c", 10), ("b", "d", 15), ("c", "d", 11), ("c", "f", 2), ("d", "e", 6), ("e", "f", 9)]) pp(graph.dijkstra("a", "e")) Output: ["a", "c", "d", "e"]

    Έχοντας σημειώσει δύο σημεία στον μαυροπίνακα με κιμωλία, ο δάσκαλος προσφέρει στον μικρό μαθητή μια εργασία: να χαράξει τη συντομότερη διαδρομή μεταξύ των δύο σημείων.

    Ο μαθητής, έχοντας σκεφτεί, σχεδιάζει προσεκτικά μια γραμμή περιέλιξης ανάμεσά τους.

    - Αυτός είναι ο συντομότερος δρόμος! - ο δάσκαλος ξαφνιάζεται. - Ποιος σου το έμαθε αυτό;

    - Ο μπαμπάς μου. Είναι οδηγός ταξί.

    Το σχέδιο ενός αφελούς μαθητή είναι, φυσικά, ανέκδοτο, αλλά δεν θα χαμογελούσατε αν σας έλεγαν ότι το διακεκομμένο τόξο στο Σχ. 1 είναι η συντομότερη διαδρομή από το Ακρωτήριο της Καλής Ελπίδας στο νότιο άκρο της Αυστραλίας!

    Ακόμη πιο εντυπωσιακή είναι η ακόλουθη δήλωση: απεικονίζεται στο σχ. 2 η διαδρομή κυκλικού κόμβου από την Ιαπωνία προς τη Διώρυγα του Παναμά είναι συντομότερη από την ευθεία που χαράσσεται μεταξύ τους στον ίδιο χάρτη!

    Ρύζι. 1. Σε έναν ναυτικό χάρτη, η συντομότερη διαδρομή από το Ακρωτήριο της Καλής Ελπίδας προς το νότιο άκρο της Αυστραλίας δεν υποδεικνύεται από μια ευθεία γραμμή ("λοξοδρόμιο"), αλλά από μια καμπύλη ("ορθόδρομος")


    Όλα αυτά μοιάζουν με αστείο, και όμως μπροστά σας υπάρχουν αδιαμφισβήτητες αλήθειες, γνωστές στους χαρτογράφους.




    Ρύζι. 2. Φαίνεται απίστευτο ότι η καμπύλη διαδρομή που συνδέει τη Γιοκοχάμα με τη Διώρυγα του Παναμά σε έναν ναυτικό χάρτη είναι μικρότερη από μια ευθεία γραμμή που χαράσσεται μεταξύ των ίδιων σημείων


    Για να διευκρινιστεί το θέμα, θα πρέπει να πω λίγα λόγια για τους χάρτες γενικά και για τους θαλάσσιους χάρτες ειδικότερα. Η απεικόνιση τμημάτων της επιφάνειας της γης σε χαρτί δεν είναι εύκολη ακόμη και κατ' αρχήν, επειδή η Γη είναι μια σφαίρα και είναι γνωστό ότι κανένα μέρος μιας σφαιρικής επιφάνειας δεν μπορεί να αναπτυχθεί σε ένα επίπεδο χωρίς πτυχώσεις και σπασίματα. Αναπόφευκτα, πρέπει να ανεχθείτε τις αναπόφευκτες στρεβλώσεις στα χαρτιά. Έχουν εφευρεθεί πολλοί τρόποι σχεδίασης χαρτών, αλλά όλοι οι χάρτες δεν είναι απαλλαγμένοι από ελαττώματα: κάποιοι έχουν παραμορφώσεις ενός είδους, άλλοι άλλου είδους, αλλά δεν υπάρχουν καθόλου χάρτες χωρίς παραμορφώσεις.

    Οι ναυτικοί χρησιμοποιούν χάρτες που σχεδιάστηκαν σύμφωνα με τη μέθοδο του παλιού Ολλανδού χαρτογράφου και μαθηματικού του 16ου αιώνα. Mercator. Αυτή η μέθοδος ονομάζεται «μερκατορική προβολή». Είναι εύκολο να αναγνωρίσετε έναν ναυτικό χάρτη από το ορθογώνιο πλέγμα του: οι μεσημβρινοί απεικονίζονται σε αυτόν με τη μορφή μιας σειράς παράλληλων ευθειών γραμμών. οι κύκλοι του γεωγραφικού πλάτους είναι επίσης ευθείες γραμμές κάθετες στην πρώτη (βλ. Εικ. 5).

    Φανταστείτε τώρα ότι θέλετε να βρείτε το συντομότερο μονοπάτι από το ένα ωκεάνιο λιμάνι στο άλλο, που βρίσκεται στον ίδιο παράλληλο. Στον ωκεανό, όλα τα μονοπάτια είναι προσβάσιμα και είναι πάντα δυνατό να ταξιδέψετε κατά μήκος του συντομότερου μονοπατιού εκεί, εάν γνωρίζετε πώς τρέχει. Στην περίπτωσή μας, είναι φυσικό να πιστεύουμε ότι το συντομότερο μονοπάτι ακολουθεί τον παράλληλο στον οποίο βρίσκονται και τα δύο λιμάνια: τελικά, στον χάρτη είναι μια ευθεία γραμμή, και τι μπορεί να είναι πιο σύντομο από μια ευθεία διαδρομή! Όμως κάνουμε λάθος: η παράλληλη διαδρομή δεν είναι σε καμία περίπτωση η συντομότερη.

    Πράγματι: στην επιφάνεια της μπάλας, η μικρότερη απόσταση μεταξύ δύο σημείων είναι το τόξο ενός μεγάλου κύκλου που τα συνδέει. Αλλά ο κύκλος των παραλλήλων - μικρό ένας κύκλος. Ένα τόξο μεγάλου κύκλου είναι λιγότερο κυρτό από ένα τόξο οποιουδήποτε μικρού κύκλου που διασχίζεται από τα ίδια δύο σημεία: μια μεγαλύτερη ακτίνα αντιστοιχεί σε μια μικρότερη καμπυλότητα. Τραβήξτε το νήμα ανάμεσα στα δύο σημεία μας στην υδρόγειο (βλ. εικ. 3). θα φροντίσετε να μην βρίσκεται καθόλου στον παράλληλο. Ένα τεντωμένο νήμα είναι ένας αναμφισβήτητος δείκτης της συντομότερης διαδρομής και αν δεν συμπίπτει με παράλληλο σε μια υδρόγειο, τότε σε έναν ναυτικό χάρτη η συντομότερη διαδρομή δεν υποδεικνύεται από μια ευθεία γραμμή: θυμηθείτε ότι οι κύκλοι των παραλλήλων απεικονίζονται σε τέτοια ένας χάρτης με ευθείες γραμμές, οποιαδήποτε γραμμή που δεν συμπίπτει με μια ευθεία γραμμή, υπάρχει καμπύλη .



    Ρύζι. 3. Ένας απλός τρόπος για να βρείτε το συντομότερο μονοπάτι μεταξύ δύο σημείων: πρέπει να τραβήξετε μια κλωστή στην υδρόγειο μεταξύ αυτών των σημείων


    Μετά από όσα ειπώθηκαν, γίνεται σαφές γιατί η συντομότερη διαδρομή σε έναν ναυτικό χάρτη δεν απεικονίζεται ως ευθεία, αλλά ως καμπύλη γραμμή.

    Λένε ότι όταν επιλέγαμε μια κατεύθυνση για τον σιδηρόδρομο Nikolaev (τώρα Οκτώβρη), υπήρχαν ατελείωτες διαφωνίες σχετικά με τον τρόπο τοποθέτησης του. Το τέλος της διαμάχης έβαλε η παρέμβαση του Τσάρου Νικολάου Α', ο οποίος έλυσε το πρόβλημα κυριολεκτικά «ευθέως»: συνέδεσε την Πετρούπολη με τη Μόσχα κατά μήκος μιας γραμμής. Αν αυτό είχε γίνει σε έναν χάρτη Merker, θα είχε αποδειχθεί μια ενοχλητική έκπληξη: αντί για μια ευθεία γραμμή, ο δρόμος θα αποδεικνυόταν μια καμπύλη.

    Αυτός που δεν αποφεύγει τους υπολογισμούς μπορεί να βεβαιωθεί με έναν απλό υπολογισμό ότι η διαδρομή που μας φαίνεται καμπυλωμένη στον χάρτη είναι στην πραγματικότητα μικρότερη από αυτή που είμαστε έτοιμοι να θεωρήσουμε ευθεία. Αφήστε τα δύο λιμάνια μας να βρίσκονται στον 60ο παράλληλο και χωρίζονται από απόσταση 60 °. (Το αν υπάρχουν στην πραγματικότητα τέτοια δύο λιμάνια είναι, φυσικά, άσχετο για τον υπολογισμό.)



    Ρύζι. 4. Για τον υπολογισμό των αποστάσεων μεταξύ των σημείων Α και Β της μπάλας κατά μήκος του τόξου του παραλλήλου και κατά μήκος του τόξου ενός μεγάλου κύκλου


    Στο σχ. 4 βαθμοί Ο -κέντρο του πλανήτη, AB -τόξο ενός κύκλου γεωγραφικού πλάτους στο οποίο βρίσκονται λιμάνια Α και Β; vτης 60°. Το κέντρο του κύκλου του γεωγραφικού πλάτους βρίσκεται σε ένα σημείο ΜΕΦανταστείτε το από το κέντρο Οη υδρόγειος σύρεται μέσα από το ίδιο λιμενικό τόξο ενός μεγάλου κύκλου: την ακτίνα του OB = OA = R;θα περάσει κοντά στο τραβηγμένο τόξο AB,αλλά δεν θα συμπίπτει μαζί της.

    Ας υπολογίσουμε το μήκος κάθε τόξου. Από τα σημεία ΕΝΑκαι Vβρίσκονται σε γεωγραφικό πλάτος 60 °, μετά οι ακτίνες ΟΑκαι OVσυμφιλιώνομαι OS(ο άξονας της υδρογείου) γωνία 30 °. Σε ορθογώνιο τρίγωνο ASOπόδι AC (= r),απέναντι από γωνία 30 °, ίση με το ήμισυ της υποτείνουσας JSC;

    που σημαίνει, r = R / 2Μήκος τόξου ΑΒείναι το ένα έκτο του μήκους του κύκλου του γεωγραφικού πλάτους, και εφόσον αυτός ο κύκλος είναι το μισό του μήκους του μεγάλου κύκλου (αντίστοιχα η μισή ακτίνα), το μήκος του τόξου του μικρού κύκλου



    Για να προσδιορίσετε τώρα το μήκος του τόξου ενός μεγάλου κύκλου που τραβιέται μεταξύ των ίδιων σημείων (δηλαδή, η συντομότερη διαδρομή μεταξύ τους), πρέπει να γνωρίζετε την τιμή της γωνίας AOB.Χορδή ΟΠΩΣ ΚΑΙπου συστέλλεται ένα τόξο 60° (μικρός κύκλος) είναι η πλευρά ενός κανονικού εξαγώνου που εγγράφεται στον ίδιο μικρό κύκλο. Να γιατί AB = r = R / 2

    Έχοντας τραβήξει μια ευθεία γραμμή OD,κέντρο σύνδεσης Οη υδρόγειος με τη μέση ρεσυγχορδίες AB,παίρνουμε ένα ορθογώνιο τρίγωνο ΕΑΒ,που είναι η γωνία Δ -ευθεία:

    DA = 1/2 AB και OA = R.

    sinAOD = AD: AO = R / 4: R = 0,25

    Από εδώ βρίσκουμε (σύμφωνα με τους πίνακες):

    = 14 ° 28", 5

    και ως εκ τούτου

    = 28 ° 57".

    Τώρα δεν είναι δύσκολο να βρεις το απαιτούμενο μήκος του συντομότερου μονοπατιού σε χιλιόμετρα. Ο υπολογισμός μπορεί να απλοποιηθεί αν θυμηθούμε ότι το μήκος ενός λεπτού του μεγάλου κύκλου της υδρογείου είναι mo

    Μαθαίνουμε ότι το μονοπάτι σε κύκλο γεωγραφικού πλάτους, που απεικονίζεται στον θαλάσσιο χάρτη ως ευθεία γραμμή, είναι 3333 km και το μονοπάτι σε μεγάλο κύκλο - κατά μήκος μιας καμπύλης στον χάρτη - 3213 km, δηλαδή 120 km μικρότερο.

    Οπλισμένοι με μια κλωστή και έχοντας μια υδρόγειο στο χέρι, μπορείτε εύκολα να ελέγξετε την ορθότητα των σχεδίων μας και να βεβαιωθείτε ότι τα τόξα των μεγάλων κύκλων τρέχουν πραγματικά όπως φαίνεται στα σχέδια. Εμφανίζεται στο σχ. 1 υποτίθεται ότι η "άμεση" θαλάσσια διαδρομή από την Αφρική προς την Αυστραλία είναι 6020 μίλια και η "κυρτή" - 5450 μίλια, δηλαδή μικρότερη κατά 570 μίλια, ή 1050 χλμ. Η «άμεση» αεροπορική διαδρομή στον θαλάσσιο χάρτη από το Λονδίνο στη Σαγκάη κόβει την Κασπία Θάλασσα, ενώ η πραγματικά συντομότερη διαδρομή εκτείνεται βόρεια της Αγίας Πετρούπολης. Είναι σαφές τι ρόλο παίζουν αυτά τα ζητήματα στην εξοικονόμηση χρόνου και καυσίμων.

    Εάν στην εποχή της ιστιοπλοΐας, ο χρόνος δεν εκτιμούνταν πάντα - τότε ο "χρόνος" δεν θεωρούνταν ακόμη "χρήματα" - τότε με την εμφάνιση των ατμοπλοίων πρέπει να πληρώσετε για κάθε άσκοπα ξοδευμένο τόνο άνθρακα. Αυτός είναι ο λόγος για τον οποίο σήμερα τα πλοία καθοδηγούνται κατά μήκος της πραγματικά συντομότερης διαδρομής, χρησιμοποιώντας συχνά χάρτες που δεν έγιναν στο Mercatorian, αλλά στη λεγόμενη "κεντρική" προβολή: σε αυτούς τους χάρτες, τα τόξα μεγάλων κύκλων απεικονίζονται με ευθείες γραμμές.

    Γιατί οι πρώην πλοηγοί χρησιμοποίησαν τόσο παραπλανητικούς χάρτες και επέλεξαν ασύμφορα μονοπάτια; Είναι λάθος να πιστεύουμε ότι παλιά δεν γνώριζαν για αυτό το ιδιαίτερο χαρακτηριστικό των ναυτικών χαρτών. Ο λόγος φυσικά δεν είναι αυτός, αλλά το γεγονός ότι τα χαρτιά που κληρώνονται με τη μέθοδο του Mercator, μαζί με τις ταλαιπωρίες, έχουν οφέλη πολύτιμα για τους ναυτικούς. Ένας τέτοιος χάρτης, πρώτον, απεικονίζει μεμονωμένα μικρά τμήματα της επιφάνειας της γης χωρίς παραμόρφωση, διατηρώντας παράλληλα τις γωνίες του περιγράμματος. Αυτό δεν έρχεται σε αντίθεση με το γεγονός ότι με την απόσταση από τον ισημερινό όλα τα περιγράμματα τεντώνονται αισθητά. Σε μεγάλα γεωγραφικά πλάτη, το τέντωμα είναι τόσο σημαντικό που ο ναυτικός χάρτης εμπνέει ένα άτομο που δεν είναι εξοικειωμένο με τα χαρακτηριστικά του, μια εντελώς λανθασμένη ιδέα για το πραγματικό μέγεθος των ηπείρων: η Γροιλανδία φαίνεται να έχει το ίδιο μέγεθος με την Αφρική, η Αλάσκα είναι μεγαλύτερη από την Αυστραλία , αν και η Γροιλανδία είναι 15 φορές μικρότερη από την Αφρική, και η Αλάσκα έχει μαζί με τη Γροιλανδία το μισό μέγεθος της Αυστραλίας. Αλλά ένας ναυτικός που γνωρίζει καλά αυτά τα χαρακτηριστικά της κάρτας δεν μπορεί να παραπλανηθεί. Τα ανέχεται, ειδικά αφού μέσα σε μικρές περιοχές ο θαλάσσιος χάρτης δίνει μια ακριβή ομοιότητα της φύσης (Εικ. 5).

    Όμως ο ναυτικός χάρτης διευκολύνει πολύ την επίλυση των καθηκόντων της ναυτικής πρακτικής. Αυτό είναι το μόνο είδος χαρτών στους οποίους η διαδρομή ενός πλοίου σε σταθερή πορεία αντιπροσωπεύεται από μια ευθεία γραμμή. Το να πας "σταθερή πορεία" σημαίνει να κρατάς συνεχώς προς μια κατεύθυνση, μια καθορισμένη "ρούμπα", με άλλα λόγια, να πηγαίνεις έτσι ώστε να διασχίζεις όλους τους μεσημβρινούς σε ίση γωνία. Αλλά αυτό το μονοπάτι ("λοξοδρομία") μπορεί να απεικονιστεί ως ευθεία γραμμή μόνο σε έναν χάρτη στον οποίο όλοι οι μεσημβρινοί είναι ευθείες γραμμές παράλληλες μεταξύ τους. Και δεδομένου ότι στον πλανήτη οι κύκλοι του γεωγραφικού πλάτους τέμνονται με τους μεσημβρινούς σε ορθή γωνία, τότε σε έναν τέτοιο χάρτη οι κύκλοι του γεωγραφικού πλάτους πρέπει να είναι ευθείες γραμμές κάθετες στις γραμμές των μεσημβρινών. Εν ολίγοις, φτάνουμε ακριβώς σε αυτό το πλέγμα συντεταγμένων, που είναι το χαρακτηριστικό γνώρισμα του ναυτικού χάρτη.




    Ρύζι. 5. Ναυτικός ή μερκάτορας χάρτης της υδρογείου. Σε τέτοιους χάρτες, οι διαστάσεις των περιγραμμάτων μακριά από τον ισημερινό είναι πολύ υπερβολικές. Ποιο, για παράδειγμα, είναι μεγαλύτερο: Γροιλανδία ή Αυστραλία; (Η απάντηση σε κείμενο)


    Η προτίμηση των ναυτικών για τις κάρτες Mercator είναι πλέον ξεκάθαρη. Θέλοντας να καθορίσει την πορεία που θα πραγματοποιηθεί όταν πηγαίνει στο καθορισμένο λιμάνι, ο πλοηγός εφαρμόζει έναν χάρακα στα τελικά σημεία της διαδρομής και μετρά τη γωνία που κάνει με τους μεσημβρινούς. Παραμένοντας στην ανοιχτή θάλασσα όλη την ώρα προς αυτή την κατεύθυνση, ο πλοηγός θα φέρει με ακρίβεια το πλοίο στον στόχο. Βλέπετε ότι η "λοξοδρομία" - αν και όχι η πιο σύντομη και όχι η πιο οικονομική, αλλά, από μια άποψη, ένας πολύ βολικός τρόπος για τον ναύτη. Για να φτάσετε, για παράδειγμα, από το Ακρωτήρι της Καλής Ελπίδας στο νότιο άκρο της Αυστραλίας (βλ. Εικ. 1), πρέπει να διατηρήσετε πάντα την ίδια διαδρομή S 87 °, 50 ". "), Είναι απαραίτητο, όπως φαίνεται από το σχήμα, για να αλλάζετε συνεχώς την πορεία του σκάφους: ξεκινήστε από την πορεία S 42 °, 50" και τελειώστε με την πορεία N 53 °, 50 "(στην περίπτωση αυτή, η συντομότερη διαδρομή είναι ακόμη και αδύνατη - στηρίζεται σε το τείχος πάγου της Ανταρκτικής).

    Και τα δύο μονοπάτια - κατά μήκος του "λοξοδρόμου" και κατά μήκος του "ορθόδρομου" - συμπίπτουν μόνο όταν το μονοπάτι κατά μήκος ενός μεγάλου κύκλου απεικονίζεται στον θαλάσσιο χάρτη με μια ευθεία γραμμή: όταν κινείται κατά μήκος του ισημερινού ή κατά μήκος του μεσημβρινού. Σε όλες τις άλλες περιπτώσεις, αυτές οι διαδρομές είναι διαφορετικές.