![На первую страницу](http://images.astronet.ru/img/bookicon.gif)
Разделы
- 3.1. Чтение полной версии каталога
- 3.2. Постановка задачи
- 3.3. Использование собственных критериев отбора звезд
- 3.4. Использование номеров звезд, сгенерированных программой Celestia, в пользовательских программах
3. Работа с ASCII версией каталога Hipparcos
3.1. Чтение полной версии каталога
Несмотря на большие возможности программы Celestia 2000, существует большое число задач, которые не могут быть решены с ее помощью. Например, сбор различных статистических характеристик: распределение по расстояниям, абсолютной звездной величине и т. п.; построение диаграммы Герцшпрунга-Рессела для различных выборок звезд; изучение распределения звезд в пространстве и разнообразные звездно-кинематические исследования. Для проведения такого рода исследований придется прибегнуть к программированию на универсальных языках высокого уровня (C/C++, Fortran, Pascal/Delphi и т. п.) с использованием полных версий каталогов.
Полная электронная версия каталогов включает 6 компакт-дисков. Главный из них - первый, он содержит собственно каталоги Hipparcos и Tycho объемом 53 и 373 Мбайт соответственно. Остальные компакт-диски содержат информацию о двойных и кратных звездах, кривые блеска переменных звезд, фотометрические приложения к Hipparcos и Tycho, времена прохождения звезд через решетку аппарата, а также полную документацию. Эти диски поступили в библиотеку Астрономического института СПбГУ, так как сотрудники института принимали участие в работе над проектом Hipparcos, и копии их доступны всем желающим. Подробно содержание этих дисков изложено в [The Hipparcos/Tycho ASCII CDROMs and Access Software (H. Schrijver)].
Вместо полных версий каталогов в качестве исходных данных программы могут фигурировать и текстовые файлы, создаваемые программой Celestia 2000. Однако этот путь, вероятно, не очень удобен, поскольку формат выходных файлов Celestia зависит от полей, которые выберет пользователь, кроме того, при проведении большого числа различных экспериментов дисковая система компьютера будет быстро заполнена достаточно большими файлами с данными.
Можно предложить компромисс - в качестве основного источника данных все-таки использовать полную версию Hipparcos с первого ASCII CD-ROM (ее без труда можно перенести на локальный диск компьютера для более быстрого доступа), а для выбора звезд, удовлетворяющих какому-либо критерию, использовать файл с номерами звезд, сформированный программой Celestia, который весьма компактен по размеру. С помощью программы, написанной на любом языке высокого уровня, каждый пользователь сможет сам выбрать необходимые ему поля из основного каталога Hipparcos. Интерпретация полной версии каталога не сложнее, чем синтаксический разбор файлов, формируемых программой Celestia. На наш взгляд, самая большая сложность при таком анализе - учет пустых полей в записи звезды (в случае отсутствия данных в поле помещаются пробелы - рис. 3.1), что делает невозможным прямое применение операторов форматного ввода, которые есть практически в любом языке программирования, поскольку это может привести к искаженным результатам (например, в языке Fortran поле, состоящее целиком из пробелов, может пониматься как имеющее нулевое значение). Нам следует для каждого (или почти каждого) поля задать какой-либо способ, который позволил бы понять, имеются ли в каталоге данные для него или нет.
3.2. Постановка задачи
Напишем программный модуль (подпрограмму), читающую из основного каталога Hipparcos только те поля, которые наиболее часто используются в звездно-кинематических исследованиях (табл. 3.1), и только для тех номеров звезд, которые хранятся в файле, сгенерированном программой Celestia 2000 при указании только первого флага для сохраняемой информации (рис. 3.2).
![](http://images.astronet.ru/pubd/2006/01/25/0001211124/hipparcos22.png)
Рис. 3.1. Фрагмент полной версии каталога Hipparcos. Обратите внимание на пустые поля у некоторых звезд.
Файл номеров звезд (рис. 3.3) предваряется несколькими строками служебной информации, а далее идут собственно данные в три колонки:
H0 - каталог H или T;
H1 - номер по Hipparcos;
H2 - Proximity flag - есть ли ближе 10? другие объекты.
![](http://images.astronet.ru/pubd/2006/01/25/0001211124/hipparcos24.png)
Рис. 3.3. Файл номеров звезд, удовлетворяющих заданному критерию, сформированный программой Celestia 2000.
Хранить прочитанные из полной версии каталога Hipparcos данные о звезде мы будем в структуре. Такой способ организации данных есть во всех современных языках программирования (включая Fortran-77, 90). Это позволит манипулировать прочитанной записью о звезде как единым целым. Для учета пустых полей применим стандартный подход - битовую маску - целочисленную переменную, установка отдельных битов которой обозначает наличие тех или иных данных. С помощью логической операции AND и набора констант будет легко осуществить контроль прочитанной информации. Забегая вперед, скажем, что "полноценных" звезд, для которых заполнено большинство полей в Hipparcos - 117955, для 263 звезд нет точной астрометрической информации (собственных движений, параллакса) и многих других параметров. Это в основном слабые звезды, использовавшиеся для привязки каталога к системе квазаров.
Основное изложение проведем на языке Pascal, как наиболее абстрактном алгоритмическом языке. В Приложениях D и E даны тексты на языках Fortran-90 и ANSI C.
Рассмотрим устройство модуля, реализующего процедуру чтения полной версии каталога Hipparcos (листинг 3.1).
В начале модуля определены константы, определяющие местоположение каталога и
количество звезд в нем. Далее идут битовые константы, которые будут
использоваться в условных операторах для выяснения наличия или отсутствия
данных о точных координатах, звездной величине, собственных движениях. Ниже
приводится описание структуры (в терминах Pascal - записи) THipparcos. Ее
поля: номер звезды, координаты, параллакс, собственные движения, флаг для
кратных систем, звездная величина и показатель цвета, данные о спектральном
классе, а также подструктура sigma, содержащая значения ошибок
соответствующих величин. Поле info - целочисленная переменная, установка
отдельных битов которой свидетельствует об отсутствии в записи у звезды
определенных данных.
Модуль экспортирует три функции: OpenHipparcosMain открывает каталог,
CloseHipparcosMain закрывает, ReadHipparosName читает одну запись из
каталога, заполняя структуру типа THipparcos.
Изучим устройство функции ReadHipparcosMain. Функция возвращает True в
случае успешного чтения и False при достижении конца файла. Такой способ
позволяет использовать ее непосредственно в условии оператора цикла While.
Оператор read считывает одну запись каталога (включая символы конца строки)
в буфер hs.
Основная часть текста состоит из операторов, интерпретирующих отдельные
колонки в записи звезды. Рассмотрим подробнее эти фрагменты кода на примере
чтения звездной величины.
Val(StrLCopy(st,@hs[42],5),VMag,code);
if code<>0 then info :=
info or NoVMag;
В данном примере функция StrLCopy копирует в буфер st 5 байтов, начиная с
42-го байта строки hs. Функция возвращает результат - адрес первого
параметра, поэтому она может использоваться в качестве аргумента функции
Val, которая преобразовывает текст в своем первом аргументе в числовое
значение переменной, которая задается вторым параметром. Третий параметр -
код ошибки конвертации. Он равняется нулю в случае отсутствия ошибок и
отличен от нуля, если перевод символьной строки в числовое значение
невозможен. В последнем случае мы с помощью логической операции or
устанавливаем соответствующий бит в поле info.
Листинг 3.1. Модуль чтения каталога Hipparcos
Unit HipMain; { Чтение
каталога Hipparcos }
Interface { Интерфейсная часть
модуля }
{ Расположение полной версии каталога Hipparcos
}
Const HipparcosName = 'D:/CATALOGS/HIPARCOS/hip_main.dat';
HipNumOfStars = 118218;
{ Битовые константы флага о наличии
информации }
Const NoRaDe = 1; { Нет данных
о точных координатах }
NoPlx = 2; { Нет данных о параллаксе
}
Nopm = 4; { Нет данных о собственных
движениях }
NoVMag = 8; { Нет данных о звездной
величине }
NoB_V = 16; { Нет данных о показателе
цвета }
Type THipparcos=record
{ Идентификаторы }
HIP : longint; {
Номер звезды по Hipparcos }
{ Астрометрическая информация }
RAdeg,DEdeg : double; {
Экваториальные координаты в градусах }
Plx : double; {
Тригонометрический параллакс в mas }
pmRa,pmDE : double; {
Собств. движ. ma*cos(d) и md mas/год }
AstroRef : char; {
Флаг для кратных систем }
{ Фотометрическая инфомация }
VMag : single; {
Звездная вел. по шкале Джонсона }
B_V : single; {
Показатель цвета B-V по шкале Джонсона }
sigma : record {
ошибки соотв. величин }
RAdeg,DEdeg : double;
Plx : double;
pmRa,pmDE : double;
end;
Sp : array [0..9] of
char; { Развернутый
спектральный класс }
Info : integer; {
Битовый флаг отсутствия информации }
end;
Procedure OpenHipparcosMain; {
Открытие файла каталога }
Procedure CloseHipparcosMain; {
Закрытие файла каталога }
{ Чтение одной строчки каталога:Результат помещается в s,
возвращает false при достижении конца файла }
Function
ReadHipparcosMain(var s :
THipparcos):boolean;
Implementation { Исполнительная часть модуля
}
Uses Strings;
Type
THipStr=array[1..452] of
char; { Тип строчки
каталога }
Var f : file of
THipStr; { Файловая переменная каталога }
{ Открытие файла каталога в режиме "только
чтение" }
Procedure OpenHipparcosMain;
begin
FileMode:=0; { Read only }
assign(f,HipparcosName);
reset(f);
end;
{ Закрытие файла каталога }
Procedure CloseHipparcosMain;
begin
close(f);
end;
{ Чтение одной записи }
Function
ReadHipparcosMain(var s :
THipparcos):boolean;
{ Локальные переменные функции }
var hs : THipStr; { Строчка
каталога }
st : array [0..15]
ofchar; {
вспомогательный буфер }
code : integer; { код
ошибки при преобразовании в число }
i : integer; {
вспомогательная переменная }
begin
{ Если достигнут конец файла, то возвращаем
False }
ifeof(f)
then
ReadHipparcosMain:=falseelse
begin
ReadHipparcosMain:=true; {
Результат функции - true }
read(f,hs); { Чтение одной
строчки каталога }
with s do {
Операции с полями структуры s }
begin
info:=0; { Обнуление всех битов флага
}
{ + Операция @ обозначает адрес.
+ Процедура Val преобразует текстовую строку в число,
code отличается от нуля в случае ошибки преобразования.
+ Функция StrLCopy копирует подстроку с указанием
стартовой позиции и количества байт. }
{ Интерпретация 12 байт, начиная с 3-го - это номер HIP. }
Val(StrLCopy(st,@hs[3],12),hip,code);
{ Чтение координат: по 12 байт с 52 и с 65
позиции. }
Val(StrLCopy(st,@hs[52],12),RAdeg,code);
if code<>0 then info :=
NoRaDe;
Val(StrLCopy(st,@hs[65],12),DEdeg,code);
if code<>0 then info :=
NoRaDe;
{ Чтение параллакса - 7 байт с 80-й
позиции }
Val(StrLCopy(st,@hs[80],7),Plx,code);
if code<>0 then info :=
info or NoPlx;
{ Чтениесобственных
движений: по 8 байт с 88 и с 97 позиции }
Val(StrLCopy(st,@hs[88],8),pmRA,code);
if code<>0 then info :=
info or Nopm;
Val(StrLCopy(st,@hs[97],8),pmDE,code);
if code<>0 then info :=
info or Nopm;
s.AstroRef:=hs[78]; { Флаг кратной звезды }
{ Чтение зв.величины и показателя цвета B-V по
шкале Джонсона }
Val(StrLCopy(st,@hs[42],5),VMag,code);
if code<>0 then info :=
info or NoVMag;
Val(StrLCopy(st,@hs[246],6),B_V,code);
if code<>0 then info :=
info or NoB_V;
{ Чтение ошибок соотв. величин }
with sigma dobegin
if (info and NoRADE) = 0 then
begin
{ Данные об ошибках всегда
присутствуют, }
{ если присутствуют и сами координаты.
}
Val(StrLCopy(st,@hs[106],6),RAdeg,code);
Val(StrLCopy(st,@hs[113],6),DEdeg,code);
end;
if (info and NoPlx) = 0
then
begin
Val(StrLCopy(st,@hs[120],6),Plx ,code);
end;
if (info and Nopm) = 0
then
begin
Val(StrLCopy(st,@hs[127],6),pmRA,code);
Val(StrLCopy(st,@hs[134],6),pmDE,code);
end;
end; { with sigma }
{ Чтение данных о спектральном классе
}
for i:=0 to 9
do Sp[i]:=hs[436+i];
end; { with s }
end; { if eof(f)
}
end; { Function
}
end.
Функция ReadHipparcosMain читает далеко не все поля каталога, однако нет никаких трудностей в дополнении записи THipparcos другими полями и по приведенному образцу прочитать их значения из текстового буфера hs.
Листинг 3.2 представляет пример использования данного модуля. Программа TestHip подсчитывает: сколько звезд в каталоге Hipparcos не имеют данных о точных координатах, собственных движениях и параллаксах. На рис. 3.4 можно видеть результаты.
Листинг 3.2. Подсчет звезд без данных о координатах, собственных движениях и параллаксах
Program TestHip;
Uses HipMain; { Подключение
модуля работы с каталогом }
var s : THipparcos; {
Структура данных о звезде }
NoCoord : longint; {Счетчик звезд без точных
координат }
NoProp : longint; {Счетчик звезд без собств.
движений }
NoPar : longint; {Счетчик звезд без параллаксов
}
begin
NoCoord:=0; NoProp:=0; NoPar:=0; { Обнуление
счетчиков }
OpenHipparcosMain; { Открытие каталога
}
while ReadHipparcosMain(s) do {
Цикл чтения каталога }
begin
{ Сравнение битов в маске с
константами }
if (s.info and
NoRADE)<>0 then inc(NoCoord);
if (s.info and Nopm)
<>0 then inc(NoProp);
if (s.info and NoPlx)
<>0 then inc(NoPar);
end;
CloseHipparcosMain; { Закрытие каталога }
{ Вывод результатов }
writeln('Звезд без точных координат ',NoCoord);
writeln('Звезд без собственных движений ',NoProp);
writeln('Звезд без параллаксов ', NoPar);
end.
Как мы видим, звезд без точных астрометрических данных - 263. Путем небольшого усложнения программы (сделайте самостоятельно) можно показать, что если у звезды нет данных о точных координатах, то нет данных ни о параллаксе, ни о собственных движениях.
3.3. Использование собственных критериев отбора звезд
Несложные критерии отбора звезд легко можно реализовать самостоятельно в программе, не прибегая к помощи Celestia. Например, напишем программу, которая построила бы распределение звезд Hipparcos по абсолютной звездной величине с шагом в одну величину для звезд, относительная точность определения параллаксов которых лучше, чем 50% (следует отметить, что даже отбор звезд по такому критерию не возможен в Celestia).
Программа на листинге 3.3 решает поставленную задачу.
Листинг 3.3. Вычисление распределения звезд по абсолютной
звездной величине
Program AbsMagDistrib;
Uses HipMain;
{ Реализация функции вычисления десятичного
логарифма }
function log(x:double):double;
begin
log:=ln(x)/ln(10.0);
end;
var s : THipparcos;
a : array [-12..+12] of
longint; {
статистика }
i : integer; {
вспомогательнаяпеременная }
r : double; {
расстояние }
m : double; {
абсолютнаязвезднаявеличина }
begin
for i:=low(a) to
high(a) do a[i]:=0;
{обнулениестатистики
}
OpenHipparcosMain;
while ReadHipparcosMain(s) do
begin
if (s.info and
NoPlx)<>0 thencontinue;{нет данных о
паралл.}
if s.plx<=0.0 thencontinue; { неположительный
параллакс }
if s.sigma.plx/s.plx>0.5
thencontinue;
{точность хуже 50%}
r:=1000.0/s.plx; { Вычисление расстояния в
пк }
m:=S.VMag-5.0*log(r)+5.0; {Вычисл. абсолютной
звезд. величины }
i:=round(m); { Определение индекса ячейки
массива }
if (i>=low(a)) and
(i<=high(a)) then
inc(a[i]);{ув.на 1}
end;
CloseHipparcosMain;
for i:=low(a) to
high(a) do writeln(i:3,a[i]:7);
end.
Разберем структуру программы. Массив служит для накопления статистики
распределения звезд по абсолютным звездным величинам. Элемент с индексом
содержит количество звезд, попадающих в диапазон звездных величин от
- 0.5 до
+ 0.5. Например, элемент с индексом -3 содержит количество
звезд, у которых звездная величина в диапазоне от -3.5 до -2.5.
В цикле чтения звезд сначала мы отбрасываем звезды, у которых нет данных о параллаксе (оператор continue приводит к пропуску оставшихся операторов тела цикла и начинает следующую итерацию). Следующий условный оператор отбрасывает звезды с отрицательным и нулевым значением параллакса. Таких звезд относительно немного - 4245, неположительное значение параллакса свидетельствует о том, что ошибка определения параллакса оказалась больше самой величины, а решение для конкретной звезды дало формальное значение величины.
Третий условный оператор пропускает звезды, для которых относительная точность определения параллакса оказалась хуже, чем 0.5 (50%).
Следующие два оператора вычисляют расстояние и абсолютную звездную величину.
Следующая строка содержит оператор, определяющий индекс элемента массива
[
], в который "попадает" звезда. Это делается с помощью встроенной функции
округления вещественного числа до ближайшего целого round. Если индекс
находится
в допустимом диапазоне, то соответствующий элемент массива увеличивается на
единицу оператором inc.
После завершения цикла чтения каталога в элементах массива будет храниться
распределение звезд Hipparcos по абсолютным звездным величинам. В цикле
for результаты выводятся на экран (или по желанию в файл). Эти данные могут
быть обработаны другими программами, например, электронной таблицей MS Excel
в Windows или OO Spread в Linux. Диаграмма, полученная таким способом,
представлена на рис. 3.5.
3.4. Использование номеров звезд, сгенерированных программой Celestia, в пользовательских программах
Поставим такую задачу: "узнать среднюю абсолютную звездную величину звезд, класс светимости которых от Ia0-a до Ib".
С помощью программы Celestia найдем номера звезд, удовлетворяющих такому критерию, сформируем выборку (sample) и выведем ее в текстовый файл, отметив только первый флаг в диалоге, изображенному на рис. 3.2. Назовем формируемый файл lumin.txt. Надо сказать что, используя только полную версию каталога Hipparcos, без Celestia, эту задачу решить невозможно.
Следующая программа определит среднюю абсолютную звездную величину (листинг 3.4). В программе появляется три новых имени функций: InitCriteria, InCelestia, ClearCriteria. Первая из них читает список номеров звезд (рис. 3.3), переданный через единственный параметр и инициализирует в памяти массив их номеров. Функция InCelestia проверяет, находится ли передаваемый в качестве параметра номер в списке прочитанных номеров. Последняя функция очищает массив номеров. Ее всегда следует использовать, если вы хотите определить новый список.
Мы добавили текст этих трех функций в модуль HipMain (листинг 3.5). Давайте
познакомимся с ним.
Функция InitCriteria читает текстовый файл, сформированный программой
Celestia и интерпретирует его содержимое. В третьей строке находится число
звезд NList, удовлетворяющих заданному в программе Celestia критерию.
Процедура GetMem выделяет память под массив List (который объявлен как
ссылка) в размере NList*SizeOf(longint) байт.
Листинг 3.4. Вычисление средней абсолютной звездной величины звезд, список которых находится в файле lumin.txt
Program Aver;
Uses HipMain;
{ Реализация функции вычисления десятичного
логарифма }
function
log(x:double):double;
begin
log:=ln(x)/ln(10.0);
end;
var s : THipparcos;
r : double; { расстояние }
m : double; { абсолютная звездная
величина }
mav : double; { средняя абсолютная звездная
величина }
n : longint; { количество подходящих
звезд }
begin
n:=0; mav:=0;
OpenHipparcosMain;
{ Инициализация критерия }
writeln(InitCriteria('lumin.txt'),' звезд в критерии.');
while ReadHipparcosMain(s) do
begin
if (s.info and NoPlx)<>0
then continue; {нет данных о
паралл.}
if s.plx<=0.0 then
continue; { неположительный параллакс }
r:=1000.0/s.plx; { Вычисление расстояния в
пк }
m:=S.VMag-5.0*log(r)+5.0; { Вычисл. абс. звезд.
величины }
if inCelestia(s.HIP)
then { Звезда в списке
Celestia }
begin
mav:=mav+m; { накопление суммы абс. зв.
величин }
inc(n); { суммирование числа звезд
}
end;
end; { while }
ClearCriteria; { Очистка критерия }
CloseHipparcosMain;
mav:=mav/n; { Вычисление среднего
значения }
writeln('Средняя абсолютная звездная величина ',mav:6:2);
writeln('Обработано ',n,' звезд');
end.
Листинг 3.5. Исходный текст функций InitCriteria, InCelestia, ClearCriteria
{ добавления в интерфейсную часть модуля }
{ Инициализация критерия с использованием
выходного файла
программы Celestia 2000. name - имя файла.
Возвращает число звезд в списке }
Function InitCriteria(name:string):longint;
{ Функция проверяет, есть ли звезда в
списке }
Function InCelestia(n:longint):boolean;
{ Очистка критерия }
Procedure ClearCriteria;
{ добавления в исполнительную часть модуля }
{ Максимально возможное количество звезд в
списке в 16-разрядных
версиях компилятора Pascal, в 32-разрядных - неограничен }
Const MaxList = 16383;
{ Тип списка звезд }
Type PList = array [1..MaxList] of longint;
Var List : PList;
{Указатель на начало списка номеров звезд}
Const NList : Longint = 0; {
Количество звезд в списке }
{ Инициализация критерия с использованием
выходного файла
программы Celestia 2000. name - имя файла.
Возвращает число звезд в списке }
Function InitCriteria(name:string):longint;
var t : text; { файловая
переменная }
s : string; { строка-буфер }
i : longint; { индекс для цикла for
}
code : integer; { код ошибки }
begin
assign(t,name); reset(t); { Открываем
файл }
for i:=1 to 2
do readln(t); { Пропуск двух
первых строк }
readln(t,NList); { В третьей строке - количество
звезд }
if NList>MaxList then
begin
writeln('Слишком много звезд в списке'); Halt;
end;
{ Выделение памяти под список }
GetMem(List,NList*SizeOf(longint));
for i:=4 to 12
do readln(t); { Пропуск с 4
по 12 строку }
for i:=1 to NList
do { чтение с 3-го байта 12
байт номера }
begin
readln(t,s);
Val(copy(s,3,12),List [i],code);
if code<>0 then
begin
writeln('Ошибка в формате файла. Строка ',i+12); Halt;
end;
end;
close(t);
InitCriteria:=NList;
end; {Function}
{ Функция проверяет, есть ли звезда в
списке }
Function InCelestia(n:longint):boolean;
var i : longint;
begin
InCelestia:=False; { объект пока не
найден }
if NList=0 then exit;
{ если критерий не установлен - выход }
for i:=1 to NList
do { обход звезд в цикле
for }
if List [i]=n then
begin { если звезда найдена в
списке }
InCelestia:=True;
break; { досрочно прервать цикл }
end;
end; {Function}
{ Очистка критерия }
Procedure ClearCriteria;
begin
FreeMem(List,NList*SizeOf(longint));
NList:=0;
end; {Function}
При использовании 16-разрядной версии Pascal, например такой популярной, как
Borland Pascal 7.0, число звезд в списке, организованном в виде массива, не
может превышать 2-1 (при 4-байтных элементах), даже при
использовании DPMI режима. Для преодоления этого ограничения мы рекомендуем
использовать бесплатную версию Free Pascal 0.9.2 или более позднюю,
доступную для многих программных платформ, в том числе DOS, Windows, Linux,
FreeBSD. В этих версиях компилятора объем массива может достигать 2 Гбайт.
Начиная с 13-й строки, идут номера звезд, которые занимают с 3 по 14 позиции. Мы извлекаем из них число стандартным способом: процедурой Val, подстрока извлекается функцией copy, которую предпочтительней использовать для коротких (<255 символов) строк.
Если все данные успешно введены, то функция InitCriteria возвращает число звезд в списке.
Алгоритм функции InCelestia очень прост. В цикле for последовательно сравниваются элементы списка с переданным значением. В случае совпадения цикл прерывается, а функция возвращает значение True.
Процедура ClearCriteria очищает память, выделенную ранее в функции InitCriteria, и обнуляет значение переменной NList. При нулевом значении NList функция InCelestia независимо от значения аргумента возвращает False.
Результат работы программы Aver (листинг 3.4) показан на рис. 3.6. Как мы видим, только 754 из 949 звезд имеют приемлемую точность параллакса. Таким образом, мы имеем возможность применять и свои собственные критерии к звездам, список которых составлен программой Celestia.
<< 2. Программное обеспечение каталогов | Оглавление | 4. Построение распределения звезд >>
Публикации с ключевыми словами:
астрометрия - каталоги - Hipparcos
Публикации со словами: астрометрия - каталоги - Hipparcos | |
См. также:
Все публикации на ту же тему >> |