Hengefinder: Xây dựng công cụ tìm kiếm khoảnh khắc mặt trời thẳng hàng với phố xá
Hengefinder là một dự án phần mềm thú vị giúp xác định thời điểm mặt trời thẳng hàng với bất kỳ con phố nào, tương tự như hiện tượng Manhattanhenge. Bài viết chia sẻ hành trình giải quyết các bài toán hình cầu và thuật toán tìm kiếm để xây dựng nên công cụ này.

Hengefinder: Xây dựng công cụ tìm kiếm khoảnh khắc mặt trời thẳng hàng với phố xá
Tuần tới tại Manhattan, mặt trời sẽ lặn thẳng hàng hoàn hảo với các con phố chạy theo hướng Đông - Tây của thành phố. Đây là một khoảnh khắc tuyệt đẹp, được đám đông tụ tập để chiêm ngưỡng hai lần mỗi năm, khi mặt trời nằm ngay trên đường chân trời, được khung bởi những tòa nhà chọc trời hai bên. Hiện tượng này được gọi là Manhattanhenge, lấy cảm hứng từ Stonehenge.
Đám đông chụp ảnh Manhattanhenge tại phố 42, NYC
Tôi đã tự hỏi làm thế nào các nhà thiên văn học tính toán được thời điểm Manhattanhenge diễn ra. Và nếu tôi có thể tìm ra câu trả lời, tại sao lại giới hạn nó ở Manhattan? Đây là một trong những dự án đầu tiên của tôi tại Recurse Center: Hengefinder, một công cụ cho phép bạn tìm thấy một "henge" (điểm thẳng hàng của mặt trời) ở hầu hết mọi nơi có mặt trời lặn.
Dự án này bao gồm các bước cơ bản: tìm góc của một con đường (hướng của nó tương đối với hướng Bắc thật), tìm góc của mặt trời lúc hoàng hôn mỗi ngày (góc phương vị), và tìm những ngày mà hai góc này khớp nhau.
Thách thức 1: Tìm hướng của con đường (và tái phát hiện Trái Đất không phẳng)
Thách thức đầu tiên là tính toán hướng của một con đường. Nếu lấy vĩ độ và kinh độ của một địa chỉ và một địa chỉ khác xuống phố, ta có tọa độ của hai điểm trên Trái Đất. Ta có thể dùng lượng giác để tìm góc. Phỏng đoán ban đầu (sai lầm) của tôi là lấy chênh lệch vĩ độ và chênh lệch kinh độ, sau đó dùng hàm atan2 (tangent ngược) để lấy góc.
Vấn đề là cách này chỉ hoạt động nếu Trái Đất phẳng.
Sơ đồ hướng của vĩ độ và kinh độ
Các đường vĩ độ (chạy Đông - Tây) được phân bổ đều: một độ vĩ độ cơ bản có cùng khoảng cách ở mọi nơi trên Trái Đất. Tuy nhiên, các đường kinh độ (chạy Bắc - Nam) thì không. Chúng hội tụ khi bạn tiến về các cực. Ví dụ, một độ kinh độ kéo dài khoảng 84 km ở New York City, nhưng ít hơn nhiều ở vĩ độ cao (khoảng 53 km ở Anchorage).
Để quản lý việc này, chúng ta cần một chút hình học hình cầu. Cần phải scale kinh độ theo cos(vĩ độ), đưa kinh độ và vĩ độ về cùng một "đơn vị". Chỉ sau đó mới dùng được atan2.
Thách thức 2: Tìm phương vị mặt trời (hoặc, hoàng hôn nghĩa là gì?)
Để có một khoảnh khắc "henge" hoàn hảo, mặt trời cần nằm ngay trên đường chân trời. Tôi đã sử dụng thư viện Python Astral để tính toán thời gian, độ cao và góc phương vị của các sự kiện mặt trời tại một vị trí nhất định. Tuy nhiên, định nghĩa về hoàng hôn của Astral hơi khác so với những gì tôi cần. Astral sử dụng định nghĩa thiên văn chuẩn, tức là khi mặt trời đã lặn hoàn toàn xuống dưới đường chân trời. Đối với mục đích của tôi, điều đó quá muộn. Tôi muốn biết khi mặt trời nằm ngay trên đỉnh đường chân trời.
Định nghĩa kỹ thuật về hoàng hôn
Vì độ cao của mặt trời thay đổi đơn điệu khi hoàng hôn đến gần, điều này chỉ ra một giải pháp tìm kiếm nhị phân (binary search). Thay vì tìm kiếm tuyến tính từng phút một (tốn kém API calls), tôi sử dụng phương pháp "last true" binary search để tìm phút cuối cùng mà mặt trời vẫn ở trên độ cao mục tiêu.
Thách thức 3: Tìm khi nào hướng = phương vị (tìm kiếm hai giai đoạn)
Sau khi biết cách lấy hướng đường và phương vị mặt trời lúc hoàng hôn, tôi cần tìm khi nào hai cái này khớp nhau. Tôi không thể thực hiện tìm kiếm nhị phân trên 365 ngày tới, vì phương vị mặt trời trong năm không đơn điệu (nó tăng rồi giảm).
Tôi đã sử dụng một giải pháp thỏa hiệp là tìm kiếm hai giai đoạn.
Giai đoạn 1: Tìm kiếm thô Tôi bắt đầu bằng cách lấy mẫu ở các khoảng thời gian thô, ví dụ mỗi 30 ngày một lần. Mục tiêu là xác định một khoảng thời gian mà chúng ta có thể đã "bỏ lỡ" một henge, để có thể chuyển sang tìm kiếm chi tiết trong khoảng đó. Tôi theo dõi không chỉ phương vị mặt trời mà còn cả phía của hướng đường mà phương vị hoàng hôn nằm ở đó và hướng di chuyển của nó.
Giai đoạn 2: Tìm kiếm tinh Nếu xác định được một khoảng tiềm năng, tôi chuyển sang tìm kiếm chi tiết từng ngày trong khoảng cửa sổ đó để xác định chính xác ngày và giờ henge.
Kết quả và Ứng dụng
Tôi đã gói gọn tất cả các thành phần này vào một trang web nhỏ Hengefinder. Bạn có thể nhập địa chỉ của một điểm bạn nghĩ sẽ có cảnh đẹp và tìm henge tiếp theo của nó. John Pribyl, một đồng nghiệp, cũng đã phát triển thêm một ứng dụng di động Hengefinder cực kỳ thú vị, mở rộng chức năng cho cả mặt trăng và các "Sauron Henges" (khi mặt trời hoặc mặt trăng ngồi ngay trên đỉnh một tòa nhà).
Hengefinder cho NYC vào ngày 28/5/2026
Việc kích hoạt Hengefinder có nghĩa là giờ đây chúng ta có thể khám phá các henge bên ngoài Manhattan. Tôi bị cuốn hút bởi kênh Haarlemmertrekvaart ở Amsterdam. Phần lớn châu Âu về cơ bản là "không thể henge", do thiết kế đường phố thời trung cổ. Nhưng Amsterdam có nhiều kênh đào thẳng hàng từ nhiều thế kỷ trước. Có lẽ, những khoảnh khắc mặt trời phản chiếu trong nước, thẳng hàng với kênh đào đã diễn ra hai lần mỗi năm trong bốn thế kỷ qua, mà không ai lên kế hoạch để xem nó.
Henges hiếm về mặt hình học vì mặt trời rất hiếm khi thẳng hàng. Và chúng càng cảm thấy hiếm hơn vì chúng ta ít khi tìm thấy chúng. Nhưng những khoảnh khắc này đang diễn ra mọi lúc, trên khắp thế giới, dù chúng ta có quan sát hay không.
Bài viết liên quan

Công nghệ
Cảnh sát bắt giữ nghi can được cho là "ông trùm" của trang web buôn bán ma túy Dream Market
14 tháng 5, 2026

Công nghệ
Thử nghiệm tính năng Avatar AI của Google Gemini: Bản sao số của tôi thật đáng sợ nhưng chân thực
21 tháng 5, 2026

Công nghệ
Elon Musk muốn chi 119 tỷ USD xây nhà máy chip, dù chưa từng có kinh nghiệm trong lĩnh vực này
06 tháng 5, 2026
