add my own simple JSON parser instead of json-c

This commit is contained in:
eddyem
2016-06-01 13:59:47 +03:00
parent 8602fda187
commit f68362a8b3
25 changed files with 2449 additions and 937 deletions

22
mask/README.fmt.RU Normal file
View File

@@ -0,0 +1,22 @@
формат JSON для файла описания диафрагмы:
Файл состоит из некоторого количества глобальных параметров и одного массива с описанием отверстий
в диафрагме
В глобальных объектах обязательно должен находиться параметр "Z" или "maskz" (это одно и то же) -
координата Z (от вершины зеркала) расположения диафрагмы Гартманна
Также можно объявить глобальные параметры - одну или несколько характеристик отверстий диафрагмы,
в этом случае в тех отверстиях массива, где данный параметр опущен, он будет браться из глобальных.
Центр диафрагмы располагается на оптической оси зеркала. Считается, что диафрагма строго
перпендикулярна оптической оси.
Массив, задающий параметры отверстий диафрагмы, именуется "holes", каждый член массива может
содержать следующие поля (они могут быть и описаны в глобальных):
"shape" - форма отверстия ("square" - квадрат, "round" -круг, "ellipse" - эллипс)
"radius" - скаляр или массив из двух значений - радиус отверстия
"center" - массив из двух значений - координаты центра отверстия (относительно центра диафрагмы)
"bbox" - массив из четырех значений - координаты двух противоположных углов прямоугольника, описывающего отверстие
Независимо от формы отверстия его можно задать двумя способами: либо комбинацией "radius" и "center",
либо одним полем "bbox". Если заданы оба параметра, учитывается лишь первый.

View File

@@ -1,5 +1,5 @@
{
"maskz": 20.0,
"maskz": 20.017,
"shape": "round", "radius": 0.007500,
"holes": [
{ "ring": 0, "number": 0, "center": [ 0.1742, 0.0172 ] },
@@ -258,7 +258,7 @@
{ "ring": 7, "number": 29, "center": [ 0.4216, -0.2253 ] },
{ "ring": 7, "number": 30, "center": [ 0.4574, -0.1388 ] },
{ "ring": 7, "number": 31, "center": [ 0.4757, -0.0469 ] },
{ "mark": 1, "number": 0, "center": [ 0.3141, -0.1301 ] },
{ "mark": 1, "number": 1, "center": [ 0.0933, -0.4688 ] },
{ "mark": 1, "number": 0, "center": [ 0.4416, -0.1829 ] },
{ "mark": 1, "number": 1, "center": [ 0.0576, -0.2893 ] },
]
}

View File

@@ -3,6 +3,7 @@ function make_mask()
% ÐÏÓÔÒÏÅÎÉÅ ÇÁÒÔÍÁÎÏ×ÓËÏÊ ÍÁÓËÉ
% SS - ÒÁÚÍÅÒ ÍÁÓËÉ
f = fopen("holes.json", "w");
X = []; Y = [];
R = [175 247 295 340 379 414 448 478] * 1e-3; % ÒÁÄÉÕÓÙ ËÏÌÅÃ ÎÁ ÇÁÒÔÍÁÎÏÇÒÁÍÍÅ
HoleR = 7.5e-3; % ÒÁÄÉÕÓ ÏÔ×ÅÒÓÔÉÊ - 7.5ÍÍ
R0 = .6; % ÒÁÄÉÕÓ ÓÁÍÏÊ ÇÁÒÔÍÁÎÏÇÒÁÍÍÙ
@@ -11,20 +12,23 @@ function make_mask()
% ÄÌÑ ÔÏÇÏ, ÞÔÏÂÙ ÒÁÚÍÅÓÔÉÔØ ÎÁ ÍÁÓËÅ ÏËÒÕÖÎÏÓÔÉ, ÓÏÚÄÁÄÉÍ ÍÁÓËÕ
% ÏËÒÕÖÎÏÓÔÉ: zeros(15) Ó ÅÄÉÎÉÃÁÍÉ ÔÁÍ, ÇÄÅ ÄÏÌÖÎÁ ÂÙÔØ ÄÙÒËÁ. úÁÔÅÍ
% ÐÏÍÅÔÉÍ ÅÄÉÎÉÃÁÍÉ × mask ÔÅ ÔÏÞËÉ, ËÕÄÁ ÄÏÌÖÅÎ ÐÏÐÁÄÁÔØ ÌÅ×ÙÊ ×ÅÒÈÎÉÊ
fprintf(f, "{\n\t\"shape\": \"round\", \"radius\": %f,\n\t\"holes\": [\n" , HoleR);
fprintf(f, "{\n\t\"maskz\": 20.017,\n\t\"shape\": \"round\", \"radius\": %f,\n\t\"holes\": [\n" , HoleR);
for i = [1 : size(R,2)] % ÃÉËÌ ÐÏ ËÏÌØÃÁÍ
x = R(i) * cos(Angles);
y = R(i) * sin(Angles);
X = [X x]; Y = [Y y];
%fprintf(f, "\t\t{\"ring\": %d, \"center\": [%f, %f]\n", i, x[j], y[j]]);
printR(f, sprintf("\"ring\": %d", i-1), x, y);
endfor
% ÐÏÍÅÞÁÅÍ ÍÁÒËÅÒÙ
x = R([4 8]) .* cos([-2 -7]* 2 * alpha0);
y = R([4 8]) .* sin([-2 -7]* 2 * alpha0);
x = R([8 3]) .* cos([-2 -7]* 2 * alpha0);
y = R([8 3]) .* sin([-2 -7]* 2 * alpha0);
X = [X x]; Y = [Y y];
%fprintf(f, "\t\t{\"marker\", \"center\": [%f, %f]\n", x, y);
printR(f, sprintf("\"mark\": 1"), x, y);
fprintf(f, "\t]\n}\n");
fclose(f);
plot(X, Y, 'o'); axis square;
endfunction
function printR(f, msg, x, y)