1 /*
2  *  This library is free software; you can redistribute it and/or
3  *  modify it under the terms of the GNU Lesser General Public
4  *  License as published by the Free Software Foundation; either
5  *  version 2 of the License, or (at your option) any later version.
6  *
7  *  This library is distributed in the hope that it will be useful,
8  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
9  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
10  *  Lesser General Public License for more details.
11  *
12  *  You should have received a copy of the GNU General Public License
13  *  along with this program; if not, write to the Free Software
14  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
15  *
16  *  Copyright (C) 2015 Lukasz Komsta
17  */
18 
19 module nova.constellation;
20 
21 import nova.lunar;
22 import nova.julian_day;
23 import nova.rise_set;
24 import nova.transform;
25 
26 extern (C) {
27 
28 /*! \fn const char* ln_get_constellation(struct ln_equ_posn *position)
29 * \param position Equitorial position
30 *
31 * \return Name of the the constellation at the given position, or "---" if constellation
32 * cannot be found.
33 *
34 * Returns name of the constellation based on boundaries found at:
35 * http://vizier.u-strasbg.fr/viz-bin/VizieR?-source=6042
36 */
37 @nogc string ln_get_constellation(const ref ln_equ_posn position) nothrow
38 {
39 	static immutable float[357] ra_lower = [
40 		0,
41 		120,
42 		315,
43 		270,
44 		0,
45 		137.5,
46 		0,
47 		160,
48 		262.5,
49 		302.5,
50 		0,
51 		172.5,
52 		248,
53 		302.5,
54 		119.5,
55 		137.5,
56 		195,
57 		46.5,
58 		306.25,
59 		170,
60 		0,
61 		210,
62 		353.75,
63 		180,
64 		202.5,
65 		347.5,
66 		91.5,
67 		300,
68 		308,
69 		105,
70 		119.5,
71 		296.5,
72 		300,
73 		343,
74 		0,
75 		291.25,
76 		25.5,
77 		36.5,
78 		46.5,
79 		334.75,
80 		75,
81 		210.5,
82 		216.25,
83 		47.5,
84 		332,
85 		309,
86 		0,
87 		91.5,
88 		181.25,
89 		228.75,
90 		329.5,
91 		50,
92 		343,
93 		236.25,
94 		30.625,
95 		255,
96 		0,
97 		20.5,
98 		97.5,
99 		350,
100 		202.5,
101 		0,
102 		353.75,
103 		272.625,
104 		273.5,
105 		286.25,
106 		25,
107 		126.25,
108 		2.5,
109 		180,
110 		102,
111 		328.625,
112 		328.125,
113 		287.5,
114 		137.5,
115 		152.5,
116 		231.5,
117 		236.25,
118 		138.75,
119 		0,
120 		37.75,
121 		290.375,
122 		67.5,
123 		326,
124 		328.125,
125 		98,
126 		110.5,
127 		0,
128 		330,
129 		342.25,
130 		343,
131 		38.5,
132 		161.75,
133 		180,
134 		116.25,
135 		138.75,
136 		10.75,
137 		227.75,
138 		352.5,
139 		185,
140 		356.25,
141 		209.375,
142 		36.25,
143 		40.75,
144 		67.5,
145 		272.625,
146 		165,
147 		295,
148 		71.25,
149 		148.25,
150 		198.75,
151 		0,
152 		21.125,
153 		88.25,
154 		118.25,
155 		313.75,
156 		288.875,
157 		28.75,
158 		242.5,
159 		226.25,
160 		227.75,
161 		275.5,
162 		161.25,
163 		283,
164 		25,
165 		10.75,
166 		157.5,
167 		318.75,
168 		85.5,
169 		1,
170 		238.75,
171 		88.25,
172 		297.5,
173 		283,
174 		2.125,
175 		303.75,
176 		117.125,
177 		308.5,
178 		288.75,
179 		49.25,
180 		283,
181 		85.5,
182 		93.25,
183 		285,
184 		74.5,
185 		238.75,
186 		297.5,
187 		69.25,
188 		80,
189 		192.5,
190 		258.75,
191 		178,
192 		112.5,
193 		251.25,
194 		0,
195 		84,
196 		105,
197 		316.75,
198 		94.625,
199 		273.75,
200 		313.125,
201 		315.75,
202 		172.75,
203 		93.625,
204 		104,
205 		117.125,
206 		357.5,
207 		25,
208 		302.125,
209 		202.5,
210 		341.25,
211 		118.875,
212 		138.75,
213 		273.75,
214 		279.875,
215 		312.5,
216 		105,
217 		273.75,
218 		241.25,
219 		273.75,
220 		322,
221 		0,
222 		278.75,
223 		304.5,
224 		312.5,
225 		320,
226 		330,
227 		325,
228 		105.25,
229 		53.75,
230 		69.25,
231 		108,
232 		220,
233 		267.5,
234 		39.75,
235 		49.25,
236 		226.25,
237 		70,
238 		87.5,
239 		267.5,
240 		273.75,
241 		278.75,
242 		341.25,
243 		161.25,
244 		172.75,
245 		0,
246 		357.5,
247 		213.75,
248 		238.75,
249 		300,
250 		320,
251 		257.5,
252 		87.5,
253 		73.75,
254 		76.25,
255 		121.25,
256 		143.75,
257 		177.5,
258 		263.75,
259 		283,
260 		72.5,
261 		308,
262 		257.5,
263 		273.75,
264 		125.5,
265 		244,
266 		128.75,
267 		161.25,
268 		244,
269 		235,
270 		188.75,
271 		192.5,
272 		136.25,
273 		25,
274 		39.75,
275 		162.5,
276 		177.5,
277 		213.75,
278 		244,
279 		0,
280 		320,
281 		328,
282 		357.5,
283 		146.25,
284 		70.5,
285 		72.5,
286 		300,
287 		153.75,
288 		188.75,
289 		223.75,
290 		235,
291 		68.75,
292 		251.25,
293 		264,
294 		158.75,
295 		91.75,
296 		183.75,
297 		162.5,
298 		52.5,
299 		125.5,
300 		64,
301 		267.5,
302 		320,
303 		345,
304 		45,
305 		140.5,
306 		0,
307 		25,
308 		58,
309 		350,
310 		212.5,
311 		235,
312 		240,
313 		72.5,
314 		75,
315 		120,
316 		51.25,
317 		246.25,
318 		267.5,
319 		287.5,
320 		305,
321 		45,
322 		67.5,
323 		230,
324 		0,
325 		40,
326 		61.25,
327 		64,
328 		320,
329 		90,
330 		120,
331 		36.25,
332 		57.5,
333 		0,
334 		90,
335 		122.5,
336 		52.5,
337 		57.5,
338 		0,
339 		32.5,
340 		67.5,
341 		225.75,
342 		126.75,
343 		92.5,
344 		177.5,
345 		212.5,
346 		225.75,
347 		60,
348 		132.5,
349 		165,
350 		262.5,
351 		270,
352 		330,
353 		48,
354 		75,
355 		97.5,
356 		0,
357 		20,
358 		350,
359 		65,
360 		230,
361 		305,
362 		82.5,
363 		227.5,
364 		246.25,
365 		223.75,
366 		248.75,
367 		90,
368 		102.5,
369 		168.75,
370 		177.5,
371 		192.5,
372 		202.5,
373 		251.25,
374 		32.5,
375 		48,
376 		221.25,
377 		252.5,
378 		262.5,
379 		330,
380 		68.75,
381 		205,
382 		221.25,
383 		0,
384 		52.5,
385 		98.75,
386 		135.5,
387 		168.75,
388 		270,
389 		320,
390 		350,
391 		11.25,
392 		0,
393 		115,
394 		205,
395 		52.5,
396 		0
397 	];
398 
399 	static immutable float[357] ra_upper = [
400 		360,
401 		217.5,
402 		345,
403 		315,
404 		120,
405 		160,
406 		75,
407 		217.5,
408 		270,
409 		315,
410 		52.625,
411 		203.75,
412 		262.5,
413 		310,
414 		137.5,
415 		170,
416 		248,
417 		51.25,
418 		310,
419 		180,
420 		5,
421 		235,
422 		360,
423 		202.5,
424 		216.25,
425 		353.75,
426 		105,
427 		306.25,
428 		309,
429 		119.5,
430 		126.25,
431 		300,
432 		308,
433 		347.5,
434 		36.5,
435 		296.5,
436 		28.625,
437 		46.5,
438 		47.5,
439 		343,
440 		91.5,
441 		216.25,
442 		291.25,
443 		50,
444 		334.75,
445 		329.5,
446 		25.5,
447 		97.5,
448 		202.5,
449 		236.25,
450 		332,
451 		75,
452 		350,
453 		255,
454 		37.75,
455 		273.5,
456 		20.5,
457 		25,
458 		102,
459 		360,
460 		210.5,
461 		16.75,
462 		360,
463 		273.5,
464 		286.25,
465 		287.5,
466 		30.625,
467 		137.5,
468 		13,
469 		181.25,
470 		110.5,
471 		329.5,
472 		328.625,
473 		291,
474 		152.5,
475 		161.75,
476 		236.25,
477 		245,
478 		143.75,
479 		37.75,
480 		38.5,
481 		291,
482 		70.375,
483 		328.125,
484 		330,
485 		110.5,
486 		116.25,
487 		30,
488 		342.25,
489 		343,
490 		352.5,
491 		40.75,
492 		165,
493 		185,
494 		138.75,
495 		148.25,
496 		21.125,
497 		231.5,
498 		356.25,
499 		198.75,
500 		360,
501 		210.5,
502 		40.75,
503 		67.5,
504 		71.25,
505 		290.375,
506 		180,
507 		313.75,
508 		88.25,
509 		157.5,
510 		209.375,
511 		1,
512 		25,
513 		98,
514 		120,
515 		326,
516 		295,
517 		36.25,
518 		245,
519 		227.75,
520 		242.5,
521 		283,
522 		165,
523 		288.875,
524 		28.75,
525 		12.75,
526 		161.25,
527 		321.25,
528 		88.25,
529 		2.125,
530 		240.5,
531 		93.25,
532 		303.75,
533 		288.75,
534 		12.75,
535 		308.5,
536 		118.25,
537 		318.75,
538 		297.5,
539 		50.5,
540 		285,
541 		86.5,
542 		94.625,
543 		297.5,
544 		80,
545 		241.25,
546 		303.75,
547 		74.5,
548 		84,
549 		202.5,
550 		273.75,
551 		192.5,
552 		117.125,
553 		258.75,
554 		2.125,
555 		86.5,
556 		112.5,
557 		320,
558 		104,
559 		283,
560 		315.75,
561 		316.75,
562 		178,
563 		94.625,
564 		105,
565 		118.875,
566 		360,
567 		49.25,
568 		304.5,
569 		226.25,
570 		357.5,
571 		138.75,
572 		161.25,
573 		279.875,
574 		283,
575 		313.125,
576 		105.25,
577 		276.375,
578 		251.25,
579 		276.375,
580 		325,
581 		30,
582 		283,
583 		312.5,
584 		320,
585 		322,
586 		341.25,
587 		330,
588 		108,
589 		69.25,
590 		70,
591 		121.25,
592 		226.25,
593 		273.75,
594 		49.25,
595 		53.75,
596 		244,
597 		76.25,
598 		93.625,
599 		269.5,
600 		278.75,
601 		283,
602 		357.5,
603 		172.75,
604 		177.5,
605 		5,
606 		360,
607 		220,
608 		244,
609 		308,
610 		328,
611 		269.5,
612 		121.25,
613 		76.25,
614 		87.5,
615 		125.5,
616 		161.25,
617 		192.5,
618 		265,
619 		300,
620 		73.75,
621 		320,
622 		273.75,
623 		283,
624 		128.75,
625 		245.625,
626 		136.25,
627 		162.5,
628 		245.625,
629 		238.75,
630 		192.5,
631 		213.75,
632 		146.25,
633 		39.75,
634 		56.25,
635 		177.5,
636 		188.75,
637 		223.75,
638 		251.25,
639 		25,
640 		328,
641 		357.5,
642 		360,
643 		153.75,
644 		72.5,
645 		91.75,
646 		320,
647 		158.75,
648 		223.75,
649 		235,
650 		240,
651 		70.5,
652 		264,
653 		267.5,
654 		162.5,
655 		110.5,
656 		188.75,
657 		183.75,
658 		56.25,
659 		140.5,
660 		68.75,
661 		287.5,
662 		345,
663 		350,
664 		52.5,
665 		165,
666 		25,
667 		45,
668 		64,
669 		360,
670 		223.75,
671 		240,
672 		246.25,
673 		75,
674 		98.75,
675 		125.5,
676 		58,
677 		267.5,
678 		287.5,
679 		305,
680 		320,
681 		51.25,
682 		72.5,
683 		235,
684 		35,
685 		45,
686 		64,
687 		67.5,
688 		330,
689 		120,
690 		122.5,
691 		40,
692 		61.25,
693 		27.5,
694 		92.5,
695 		126.75,
696 		57.5,
697 		60,
698 		23.75,
699 		36.25,
700 		75,
701 		230,
702 		132.5,
703 		97.5,
704 		192.5,
705 		225.75,
706 		230,
707 		65,
708 		165,
709 		168.75,
710 		270,
711 		305,
712 		350,
713 		52.5,
714 		82.5,
715 		102.5,
716 		20,
717 		32.5,
718 		360,
719 		68.75,
720 		246.25,
721 		320,
722 		90,
723 		230,
724 		248.75,
725 		227.5,
726 		251.25,
727 		102.5,
728 		135.5,
729 		177.5,
730 		192.5,
731 		218,
732 		205,
733 		252.5,
734 		48,
735 		68.75,
736 		223.75,
737 		262.5,
738 		270,
739 		350,
740 		98.75,
741 		221.25,
742 		255,
743 		20,
744 		68.75,
745 		135.5,
746 		168.75,
747 		205,
748 		320,
749 		350,
750 		360,
751 		20,
752 		52.5,
753 		205,
754 		270,
755 		115,
756 		360
757 	];
758 
759 	static immutable float[357] dec_lower = [
760 		88,
761 		86.5,
762 		86.1667,
763 		86,
764 		85,
765 		82,
766 		80,
767 		80,
768 		80,
769 		80,
770 		77,
771 		77,
772 		75,
773 		75,
774 		73.5,
775 		73.5,
776 		70,
777 		68,
778 		67,
779 		66.5,
780 		66,
781 		66,
782 		66,
783 		64,
784 		63,
785 		63,
786 		62,
787 		61.5,
788 		60.9167,
789 		60,
790 		60,
791 		59.5,
792 		59.5,
793 		59.0833,
794 		58.5,
795 		58,
796 		57.5,
797 		57,
798 		57,
799 		56.25,
800 		56,
801 		55.5,
802 		55.5,
803 		55,
804 		55,
805 		54.8333,
806 		54,
807 		54,
808 		53,
809 		53,
810 		52.75,
811 		52.5,
812 		52.5,
813 		51.5,
814 		50.5,
815 		50.5,
816 		50,
817 		50,
818 		50,
819 		50,
820 		48.5,
821 		48,
822 		48,
823 		47.5,
824 		47.5,
825 		47.5,
826 		47,
827 		47,
828 		46,
829 		45,
830 		44.5,
831 		44,
832 		43.75,
833 		43.5,
834 		42,
835 		40,
836 		40,
837 		40,
838 		39.75,
839 		36.75,
840 		36.75,
841 		36.5,
842 		36,
843 		36,
844 		36,
845 		35.5,
846 		35.5,
847 		35,
848 		35,
849 		34.5,
850 		34.5,
851 		34,
852 		34,
853 		34,
854 		33.5,
855 		33.5,
856 		33,
857 		33,
858 		32.0833,
859 		32,
860 		31.3333,
861 		30.75,
862 		30.6667,
863 		30.6667,
864 		30,
865 		30,
866 		29,
867 		29,
868 		28.5,
869 		28.5,
870 		28.5,
871 		28,
872 		28,
873 		28,
874 		28,
875 		28,
876 		27.5,
877 		27.25,
878 		27,
879 		26,
880 		26,
881 		26,
882 		25.5,
883 		25.5,
884 		25,
885 		23.75,
886 		23.5,
887 		23.5,
888 		22.8333,
889 		22,
890 		22,
891 		21.5,
892 		21.25,
893 		21.0833,
894 		21,
895 		20.5,
896 		20,
897 		19.5,
898 		19.1667,
899 		19,
900 		18.5,
901 		18,
902 		17.5,
903 		16.1667,
904 		16,
905 		16,
906 		15.75,
907 		15.5,
908 		15.5,
909 		15,
910 		14.3333,
911 		14,
912 		13.5,
913 		12.8333,
914 		12.5,
915 		12.5,
916 		12.5,
917 		12.5,
918 		12,
919 		12,
920 		11.8333,
921 		11.8333,
922 		11,
923 		10,
924 		10,
925 		10,
926 		10,
927 		9.9167,
928 		8.5,
929 		8,
930 		7.5,
931 		7,
932 		7,
933 		6.25,
934 		6.25,
935 		6,
936 		5.5,
937 		4.5,
938 		4,
939 		3,
940 		2.75,
941 		2,
942 		2,
943 		2,
944 		2,
945 		2,
946 		2,
947 		1.75,
948 		1.5,
949 		0,
950 		0,
951 		0,
952 		0,
953 		0,
954 		-1.75,
955 		-1.75,
956 		-3.25,
957 		-4,
958 		-4,
959 		-4,
960 		-4,
961 		-4,
962 		-4,
963 		-6,
964 		-6,
965 		-7,
966 		-7,
967 		-8,
968 		-8,
969 		-9,
970 		-9,
971 		-10,
972 		-11,
973 		-11,
974 		-11,
975 		-11,
976 		-11,
977 		-11,
978 		-11.6667,
979 		-12.0333,
980 		-14.5,
981 		-15,
982 		-16,
983 		-16,
984 		-17,
985 		-18.25,
986 		-19,
987 		-19,
988 		-19.25,
989 		-20,
990 		-22,
991 		-22,
992 		-24,
993 		-24.3833,
994 		-24.3833,
995 		-24.5,
996 		-24.5,
997 		-24.5,
998 		-24.5833,
999 		-25.5,
1000 		-25.5,
1001 		-25.5,
1002 		-25.5,
1003 		-26.5,
1004 		-27.25,
1005 		-27.25,
1006 		-28,
1007 		-29.1667,
1008 		-29.5,
1009 		-29.5,
1010 		-29.5,
1011 		-30,
1012 		-30,
1013 		-30,
1014 		-31.1667,
1015 		-33,
1016 		-33,
1017 		-35,
1018 		-36,
1019 		-36.75,
1020 		-37,
1021 		-37,
1022 		-37,
1023 		-37,
1024 		-39.5833,
1025 		-39.75,
1026 		-40,
1027 		-40,
1028 		-40,
1029 		-40,
1030 		-42,
1031 		-42,
1032 		-42,
1033 		-43,
1034 		-43,
1035 		-43,
1036 		-44,
1037 		-45.5,
1038 		-45.5,
1039 		-45.5,
1040 		-45.5,
1041 		-46,
1042 		-46.5,
1043 		-48,
1044 		-48.1667,
1045 		-49,
1046 		-49,
1047 		-49,
1048 		-50,
1049 		-50.75,
1050 		-50.75,
1051 		-51,
1052 		-51,
1053 		-51.5,
1054 		-52.5,
1055 		-53,
1056 		-53.1667,
1057 		-53.1667,
1058 		-53.5,
1059 		-54,
1060 		-54,
1061 		-54,
1062 		-54.5,
1063 		-55,
1064 		-55,
1065 		-55,
1066 		-55,
1067 		-56.5,
1068 		-56.5,
1069 		-56.5,
1070 		-57,
1071 		-57,
1072 		-57,
1073 		-57.5,
1074 		-57.5,
1075 		-58,
1076 		-58.5,
1077 		-58.5,
1078 		-58.5,
1079 		-59,
1080 		-60,
1081 		-60,
1082 		-61,
1083 		-61,
1084 		-61,
1085 		-63.5833,
1086 		-63.5833,
1087 		-64,
1088 		-64,
1089 		-64,
1090 		-64,
1091 		-64,
1092 		-65,
1093 		-65,
1094 		-67.5,
1095 		-67.5,
1096 		-67.5,
1097 		-67.5,
1098 		-67.5,
1099 		-67.5,
1100 		-70,
1101 		-70,
1102 		-70,
1103 		-75,
1104 		-75,
1105 		-75,
1106 		-75,
1107 		-75,
1108 		-75,
1109 		-75,
1110 		-75,
1111 		-76,
1112 		-82.5,
1113 		-82.5,
1114 		-82.5,
1115 		-85,
1116 		-90
1117 	];
1118 
1119 	static immutable int[357] constel_numbers = [
1120 		84,
1121 		84,
1122 		84,
1123 		84,
1124 		16,
1125 		11,
1126 		16,
1127 		11,
1128 		84,
1129 		34,
1130 		16,
1131 		11,
1132 		84,
1133 		16,
1134 		11,
1135 		34,
1136 		84,
1137 		14,
1138 		34,
1139 		34,
1140 		16,
1141 		84,
1142 		16,
1143 		34,
1144 		34,
1145 		16,
1146 		11,
1147 		34,
1148 		16,
1149 		11,
1150 		83,
1151 		34,
1152 		16,
1153 		16,
1154 		14,
1155 		34,
1156 		14,
1157 		14,
1158 		11,
1159 		16,
1160 		11,
1161 		83,
1162 		34,
1163 		11,
1164 		16,
1165 		16,
1166 		14,
1167 		51,
1168 		83,
1169 		34,
1170 		16,
1171 		11,
1172 		14,
1173 		34,
1174 		63,
1175 		34,
1176 		14,
1177 		63,
1178 		51,
1179 		14,
1180 		83,
1181 		14,
1182 		14,
1183 		40,
1184 		34,
1185 		31,
1186 		63,
1187 		83,
1188 		14,
1189 		83,
1190 		51,
1191 		31,
1192 		31,
1193 		31,
1194 		83,
1195 		83,
1196 		9,
1197 		40,
1198 		51,
1199 		1,
1200 		63,
1201 		52,
1202 		63,
1203 		31,
1204 		45,
1205 		8,
1206 		51,
1207 		1,
1208 		45,
1209 		45,
1210 		1,
1211 		63,
1212 		83,
1213 		30,
1214 		51,
1215 		49,
1216 		1,
1217 		9,
1218 		1,
1219 		30,
1220 		1,
1221 		30,
1222 		81,
1223 		63,
1224 		8,
1225 		52,
1226 		83,
1227 		31,
1228 		8,
1229 		49,
1230 		30,
1231 		1,
1232 		81,
1233 		8,
1234 		38,
1235 		31,
1236 		31,
1237 		81,
1238 		26,
1239 		9,
1240 		26,
1241 		52,
1242 		49,
1243 		52,
1244 		81,
1245 		67,
1246 		49,
1247 		88,
1248 		78,
1249 		1,
1250 		74,
1251 		38,
1252 		88,
1253 		88,
1254 		1,
1255 		88,
1256 		38,
1257 		88,
1258 		88,
1259 		7,
1260 		76,
1261 		60,
1262 		38,
1263 		76,
1264 		78,
1265 		40,
1266 		76,
1267 		78,
1268 		78,
1269 		24,
1270 		40,
1271 		24,
1272 		38,
1273 		40,
1274 		62,
1275 		78,
1276 		38,
1277 		62,
1278 		38,
1279 		40,
1280 		32,
1281 		62,
1282 		46,
1283 		60,
1284 		38,
1285 		22,
1286 		62,
1287 		7,
1288 		32,
1289 		9,
1290 		62,
1291 		22,
1292 		46,
1293 		59,
1294 		4,
1295 		32,
1296 		21,
1297 		74,
1298 		40,
1299 		59,
1300 		62,
1301 		67,
1302 		74,
1303 		32,
1304 		35,
1305 		62,
1306 		62,
1307 		62,
1308 		21,
1309 		78,
1310 		60,
1311 		21,
1312 		86,
1313 		59,
1314 		17,
1315 		78,
1316 		74,
1317 		60,
1318 		60,
1319 		74,
1320 		74,
1321 		4,
1322 		67,
1323 		46,
1324 		86,
1325 		67,
1326 		67,
1327 		86,
1328 		59,
1329 		4,
1330 		5,
1331 		59,
1332 		55,
1333 		36,
1334 		60,
1335 		42,
1336 		75,
1337 		86,
1338 		59,
1339 		4,
1340 		36,
1341 		5,
1342 		74,
1343 		73,
1344 		42,
1345 		59,
1346 		42,
1347 		27,
1348 		72,
1349 		48,
1350 		29,
1351 		86,
1352 		42,
1353 		17,
1354 		36,
1355 		27,
1356 		29,
1357 		48,
1358 		59,
1359 		17,
1360 		12,
1361 		5,
1362 		17,
1363 		42,
1364 		36,
1365 		47,
1366 		12,
1367 		42,
1368 		42,
1369 		48,
1370 		72,
1371 		36,
1372 		59,
1373 		77,
1374 		42,
1375 		20,
1376 		42,
1377 		42,
1378 		37,
1379 		69,
1380 		36,
1381 		77,
1382 		66,
1383 		71,
1384 		37,
1385 		2,
1386 		71,
1387 		37,
1388 		36,
1389 		71,
1390 		15,
1391 		50,
1392 		72,
1393 		10,
1394 		23,
1395 		68,
1396 		36,
1397 		72,
1398 		25,
1399 		77,
1400 		54,
1401 		36,
1402 		10,
1403 		50,
1404 		64,
1405 		36,
1406 		41,
1407 		10,
1408 		39,
1409 		68,
1410 		85,
1411 		36,
1412 		41,
1413 		64,
1414 		13,
1415 		85,
1416 		41,
1417 		33,
1418 		64,
1419 		36,
1420 		65,
1421 		50,
1422 		85,
1423 		13,
1424 		15,
1425 		50,
1426 		57,
1427 		33,
1428 		85,
1429 		15,
1430 		6,
1431 		79,
1432 		39,
1433 		41,
1434 		65,
1435 		13,
1436 		64,
1437 		36,
1438 		64,
1439 		33,
1440 		57,
1441 		44,
1442 		65,
1443 		19,
1444 		6,
1445 		19,
1446 		6,
1447 		65,
1448 		13,
1449 		15,
1450 		28,
1451 		15,
1452 		19,
1453 		6,
1454 		41,
1455 		70,
1456 		19,
1457 		6,
1458 		61,
1459 		82,
1460 		33,
1461 		19,
1462 		80,
1463 		82,
1464 		43,
1465 		87,
1466 		13,
1467 		56,
1468 		61,
1469 		44,
1470 		82,
1471 		82,
1472 		43,
1473 		18,
1474 		3,
1475 		53,
1476 		58
1477 	];
1478 
1479 	static immutable constel_names = [
1480 		"And",
1481 		"Ant",
1482 		"Aps",
1483 		"Aql",
1484 		"Aqr",
1485 		"Ara",
1486 		"Ari",
1487 		"Aur",
1488 		"Boo",
1489 		"Cae",
1490 		"Cam",
1491 		"Cap",
1492 		"Car",
1493 		"Cas",
1494 		"Cen",
1495 		"Cep",
1496 		"Cet",
1497 		"Cha",
1498 		"Cir",
1499 		"CMa",
1500 		"CMi",
1501 		"Cnc",
1502 		"Col",
1503 		"Com",
1504 		"CrA",
1505 		"CrB",
1506 		"Crt",
1507 		"Cru",
1508 		"Crv",
1509 		"CVn",
1510 		"Cyg",
1511 		"Del",
1512 		"Dor",
1513 		"Dra",
1514 		"Equ",
1515 		"Eri",
1516 		"For",
1517 		"Gem",
1518 		"Gru",
1519 		"Her",
1520 		"Hor",
1521 		"Hya",
1522 		"Hyi",
1523 		"Ind",
1524 		"Lac",
1525 		"Leo",
1526 		"Lep",
1527 		"Lib",
1528 		"LMi",
1529 		"Lup",
1530 		"Lyn",
1531 		"Lyr",
1532 		"Men",
1533 		"Mic",
1534 		"Mon",
1535 		"Mus",
1536 		"Nor",
1537 		"Oct",
1538 		"Oph",
1539 		"Ori",
1540 		"Pav",
1541 		"Peg",
1542 		"Per",
1543 		"Phe",
1544 		"Pic",
1545 		"PsA",
1546 		"Psc",
1547 		"Pup",
1548 		"Pyx",
1549 		"Ret",
1550 		"Scl",
1551 		"Sco",
1552 		"Sct",
1553 		"Ser",
1554 		"Sex",
1555 		"Sge",
1556 		"Sgr",
1557 		"Tau",
1558 		"Tel",
1559 		"TrA",
1560 		"Tri",
1561 		"Tuc",
1562 		"UMa",
1563 		"UMi",
1564 		"Vel",
1565 		"Vir",
1566 		"Vol",
1567 		"Vul"
1568 	];
1569 
1570 	int i = 0;
1571 
1572 	if((position.ra >= 0) || (position.ra < 360) || (position.dec >= -90) || (position.dec <= 90))
1573 	{
1574 		while((position.ra < ra_lower[i]) || (position.ra >= ra_upper[i]) || (position.dec < dec_lower[i]))
1575 			i++;
1576 
1577 		return constel_names[constel_numbers[i] - 1];
1578 	}
1579 	else
1580 	{
1581 		return "---";
1582 	}
1583 }
1584 
1585 }