-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Inaccurate lat/lon at center of Orthographic projection #103
Labels
Comments
This is a patch to diff --git a/tests/Orthographic_Test.cpp b/tests/Orthographic_Test.cpp
index 031be70..140810b 100644
--- a/tests/Orthographic_Test.cpp
+++ b/tests/Orthographic_Test.cpp
@@ -42,16 +42,16 @@ namespace
constexpr double sub_observ_lon = 160;
constexpr double position_angle = 35;
constexpr double km_per_pixel = -1; // Choose automatically.
+ constexpr double lat_at_center = 20;
+ constexpr double lon_at_center = 130;
// Place the sub-observation point at the center of the map.
- constexpr MaRC::OrthographicCenter center(MaRC::LAT_LON_GIVEN,
- sub_observ_lat,
- sub_observ_lon);
+ MaRC::OrthographicCenter const center;
std::shared_ptr<MaRC::OblateSpheroid> body =
std::make_shared<MaRC::OblateSpheroid>(prograde, eq_rad, pol_rad);
- auto projection =
+ auto const projection =
std::make_unique<MaRC::Orthographic>(body,
sub_observ_lat,
sub_observ_lon,
@@ -148,7 +148,15 @@ bool test_make_map()
MaRC::plot_info info(*image, minimum, maximum, blank);
- auto const map =
+ constexpr auto center_sample = samples / 2;
+ constexpr auto center_line = lines / 2;
+ constexpr auto center_offset = center_line * samples + center_sample;
+
+ // -----------------------------------------------------------------
+ // Case 1: Sub-observeration point at center of image (the default).
+ // -----------------------------------------------------------------
+
+ auto map =
projection->template make_map<data_type>(info, samples, lines);
if (map.empty())
@@ -168,19 +176,38 @@ bool test_make_map()
if (non_blank == std::cend(map))
return false; // All blank!
- constexpr auto sub_observation_sample = samples / 2;
- constexpr auto sub_observation_line = lines / 2;
- constexpr auto sub_observation_offset =
- sub_observation_line * samples + sub_observation_sample;
+ auto const sub_observation_data =
+ map[center_offset] * image->scale() + image->offset();
+
+ // -----------------------------------------------------------------
+ // Case 2: Latitude and longitude at center of image provided.
+ // -----------------------------------------------------------------
+
+ // Place the chosen latitude and longitue at the center of the
+ // map translating the body in the projection, accordingly.
+ constexpr MaRC::OrthographicCenter center2(MaRC::LAT_LON_GIVEN,
+ lat_at_center,
+ lon_at_center);
+
+ auto const p =
+ std::make_unique<MaRC::Orthographic>(body,
+ sub_observ_lat,
+ sub_observ_lon,
+ position_angle,
+ km_per_pixel,
+ center2);
+
+ map = p->template make_map<data_type>(info, samples, lines);
- auto const sub_observation_data =
- map[sub_observation_offset] * image->scale() + image->offset();
+ auto const lat_at_center_data =
+ map[center_offset] * image->scale() + image->offset();
constexpr int ulps = 2;
return
!map.empty()
- && MaRC::almost_equal(sub_observation_data, sub_observ_lat, ulps);
+ && MaRC::almost_equal(sub_observation_data, sub_observ_lat, ulps)
+ && MaRC::almost_equal(lat_at_center_data, lat_at_center, ulps);
}
/** See commit 88ad28b. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Describe the bug
The specified latitude and longitude at the center of an Orthographic projection are off-center if they do not match the sub-observation latitude and longitude, respectively. The values have been observed to be off by several degrees, apparently depending on how far the sub-observation latitude differs from the equator, as well as the eccentricity of the body. That is not acceptable.
To Reproduce
Steps to reproduce the behavior:
Check the latitude value at the center of plane
1
using a FITS image viewer, such as ds9.Similarly, check the longitude value
Expected behavior
The latitude value should be equal, or at least very close (e.g.
20.000001
), to theLAT_AT_CENTER
value set in the above MaRC input, but it is not. For example, the latitude value at the center (500, 500) is21.2677
instead of the expected20
.Similarly, the longitude value at the center is also off. Instead of the expected value of
75
the value is76.1545
.Note: The desired latitude and longitude at the center do have the expected values when they match the sub-observation latitude and longitude.
Desktop (please complete the following information):
The text was updated successfully, but these errors were encountered: