Ru-Board.club
← Вернуться в раздел «Программы»

» Программы для разработки, тестирования, оптических систем

Автор: Igorr
Дата сообщения: 02.05.2014 00:51

Цитата:
а в непоследовательном - есть ли такой объект, к которому я могу прикрепить эту неравномерную функцию?

Полагаю, что на входной порт.

Добавлено:
К тому же (стр. 416):
"User defined apertures User defined apertures (UDA) may be placed on some NSC surface objects. UDA’s are defined exactly as described for sequential surfaces, see “User defined apertures and obscurations” on page 78 for a complete description. To place an aperture on an object surface, open the Object properties dialog box, choose the "Type" tab, select the "User Defined Aperture" checkbox, and select the UDA data file name from the menu. The UDA file must be placed in the \Objects\Apertures directory."
Автор: DSoln
Дата сообщения: 02.05.2014 09:54

Цитата:
К тому же (стр. 416): "User defined apertures User defined apertures (UDA) may be placed on some NSC surface objects. UDA’s are defined exactly as described for sequential surfaces, see “User defined apertures and obscurations” on page 78 for a complete description. To place an aperture on an object surface, open the Object properties dialog box, choose the "Type" tab, select the "User Defined Aperture" checkbox, and select the UDA data file name from the menu. The UDA file must be placed in the \Objects\Apertures directory."

что-то туплю: при работе в полностью непоследовательном режиме, где как я понимаю, о входных/выходных портах речь не идет, а uda-файл - определяет только геометрию апертуры, а мне нужно задать пропускание ...
Автор: ging
Дата сообщения: 02.05.2014 11:14
Ну, если не надо будет оптимизировать, возьмите "Slide"
Автор: DSoln
Дата сообщения: 02.05.2014 13:29

Цитата:
Ну, если не надо будет оптимизировать, возьмите "Slide"

Оптимизировать не надо, надо просто посмотреть, что будет.
Спасибо, со слайдом получилось, осталось только свое пропускание создать так, чтоб было удобно и точно известно, какой именно закон пропускания по зрачку.
Автор: paparazzo
Дата сообщения: 02.05.2014 16:22

Цитата:
что-то туплю: при работе в полностью непоследовательном режиме, где как я понимаю, о входных/выходных портах речь не идет, а uda-файл - определяет только геометрию апертуры, а мне нужно задать пропускание ...


Я бы взял написал пользовательский Scatter Dll.
Там можно какой угодно задать закон пропускания в зависимости от координат луча на поверхности.

Я моделировал фильтр такого типа http://www.jdsu.com/en-us/Custom-Optics/Products/a-z-product-list/Pages/filter-linear-variable.aspx#.U2OaxPl_vTc

Там пропускание по длинам волн распределено по апертуре. У вас одна длина волны, проблем быть не должно.
Код ниже, data[12] - есть энергия луча, её и меняем в зависимости от координат x,y. Выделил красным, что нужно изменить, ставите свой закон распределения, либо таблица, либо из внешнего файла подгружаете.

data[1], data[2], data[3] - координаты луча.

[more]#include <windows.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <stdio.h>

/*
Written by Kenneth E. Moore
July 1, 2003
February 3, 2004: added maximum angle feature.
July 10, 2007: added support for importance sampling by adding TIS code.
March 12, 2008: modified to include new docs and sample code on string passing capability. KEM
May 1, 2008: modified to correct factor of 1/pi in the importance sampling logic (this had no affect on accuracy but was done to be consistent with conventions) KEM
September 4, 2008: added docs for passing of the incident and substrate index, no affect on Lambertian scattering KEM
*/

int __declspec(dllexport) APIENTRY UserScatterDefinition(double *data);
int __declspec(dllexport) APIENTRY UserParamNames(char *data);
void CrossProduct(double x1, double y1, double z1, double x2, double y2, double z2, double *x3, double *y3, double *z3);
void Normalize(double *x, double *y, double *z);

BOOL WINAPI DllMain (HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved)
    {
return TRUE;
}

/* the data is stored as follows:
data[ 0] = the total number of (double) values in the passed data array
data[ 1] = x position of specular ray
data[ 2] = y position of specular ray
data[ 3] = z position of specular ray
data[ 4] = x cosine of specular ray, on output it is the scattered ray
data[ 5] = y cosine of specular ray, on output it is the scattered ray
data[ 6] = z cosine of specular ray, on output it is the scattered ray
data[ 7] = x normal
data[ 8] = y normal
data[ 9] = z normal

data[10] = 0 initially
if the DLL scatters the ray return 1 in data[10].
if the DLL returns full polarization data return 2 in data[10].

data[11] = millimeters per unit length (1.0 for mm, 25.4 for inches, 10.0 for cm and 1000.0 for meters)
data[12] = relative energy (to be computed by the dll and returned)
data[13] = incident media index
data[14] = substrate media index
data[15] = 1 for refraction, 0 for reflection
data[16] = a random value to use as a seed
data[17] = wavelength in µm

// the following feature is used only for importance sampling
data[18] = 0 normally
if data[18] = -1, ZEMAX is requesting the DLL compute the total integrated scatter
instead of the scattered ray vector. Once the TIS is computed, return the TIS in
data[18]. If the DLL cannot compute the TIS (or the BSDF), ignore data[18] and leave
the value unchanged. ZEMAX will then call the usual scatter algorithm and not use
importance sampling.
if data[18] = -2, ZEMAX is requesting the DLL compute the BSDF*cos(scatter_angle)
instead of the scattered ray vector (this value multiplied by the solid angle should
yield the total flux through that solid angle). Once the product BSDF*cos(scatter_angle)
is computed, return the value in data[18]. If the DLL cannot compute the BSDF, ignore
data[18] and leave the value unchanged. ZEMAX will then call the usual scatter algorithm
and not use importance sampling.
The BSDF in general depends upon the specular ray and the scattered ray ZEMAX has chosen to trace.
The scattered ray ZEMAX has already chosen is stored in data[30] - data[32] below

data[19] = 1 if ray has already bulk scattered

data[20] = incident Ex real
data[21] = incident Ex imaginary
data[22] = incident Ey real
data[23] = incident Ey imaginary
data[24] = incident Ez real
data[25] = incident Ez imaginary


the following feature is used only for importance sampling, see discussion above
data[30] = scattered ray x cosine
data[31] = scattered ray y cosine
data[32] = scattered ray z cosine

data 40-45 need to be computed if the DLL sets data[10] = 2
data[40] = output Ex real
data[41] = output Ex imaginary
data[42] = output Ey real
data[43] = output Ey imaginary
data[44] = output Ez real
data[45] = output Ez imaginary

data[50] = The maximum number of parameters passed
data[51] = input parameter 1 from user
data[52] = input parameter 2 from user
etc... up to data[50 + maxdata] where maxdata = int(data[50])

data[200] - data[249] = reserved block of data (400 bytes) for the data string argument
data[250] - data[299] = reserved block of data (400 bytes) for the suggested path for the DLL data

Return 0 if it works; else return -1.

*/

/* this DLL models an ideal Lambertian scattering surface */
/* if the max angle is greater than 0 and less than 90, the output cone angle is limited */

int __declspec(dllexport) APIENTRY UserScatterDefinition(double *data)
    {
    double px, py, pz, qx, qy, qz, nx, ny, nz,sx,sy,sz;
    double A, B, C, MAG, random_number, max_angle, R, T;
    char data_string1[400];
    char data_string2[400];

    // the following code is only used to implement importance sampling and is not required
    if (data[18] < 0)
        {
        if (data[18] == -1)
            {
            // compute the TIS and return the value in data[18]
            // the TIS may depend upon the specular ray.
            // For this simple Lambertian sample, TIS = 1
            //data[18] = 3.14159265;
            data[18] = 1.0;
            return 0;
            }
        if (data[18] == -2)
            {
            // compute the BSDF*cos(scatter_angle) for the ray ZEMAX has chosen and return
            // the value in data[18]
            // For this simple Lambertian sample, BSDF = 1/pi
            // the scatter_angle is given by the dot product of the scattered ray and the
            // surface normal vector
            data[18] = fabs(data[30]*data[7] + data[31]*data[8] + data[32]*data[9]);
            data[18] /= 3.14159265;
            return 0;
            }
        if (data[18] == -3)
            {
            // the DLL is being called for the first time
            return 0;
            }
        if (data[18] == -4)
            {
            // the DLL is being called for the last time
            return 0;
            }
        return 0;
        }

    // this sample code does nothing, but illustrates how to read the string that may have been passed.
    // this string could be used to pass a data file name, for example
    memcpy(data_string1, &data[200], 400);
    memcpy(data_string2, &data[250], 400);

    /* we need some way of randomizing the random number generator */
    srand((unsigned int) data[16]);

    /* return transmission */
    T = data[51];
    
    
    //data[12]= (data[17]+(0.0296875*(data[1]+3.2) + 0.51))/2;
    /*if (data[17]-(0.0296875*(data[1]+3.2) + 0.51)<0.02)
    {
    
    data[12]=1;
    }
    else
    {
    data[12]=0;
    
    }*/

    data[12]=exp((-20000)*(0.0296875*(data[1]+3.2)-data[17] + 0.51)*( 0.0296875*(data[1]+3.2)-data[17] + 0.51));

    /* return flag to indicate we scattered */
    data[10] = 1.0;


    /*
    The main thing is to make sure the scattered ray lies within a
    hemisphere centered on the normal vector. The angle between the
    normal and the scattered ray must be less than max_angle degrees.
    */

    sx = data[4]; // specular ray
    sy = data[5];
    sz = data[6];

    nx = data[7]; // normal vector
    ny = data[8];
    nz = data[9];

    /*
    Note the Lambertian distribution does not depend upon s.
    */

    /* find vectors p,q perpindicular to n */
    /* first pick any vector other than n */
    if (fabs(nz) < 0.9)
        {
        px = 0.0;
        py = 0.0;
        pz = 1.0;
        }
    else
        {
        px = 1.0;
        py = 0.0;
        pz = 0.0;
        }
    /* this creates q normal to n */
    CrossProduct(nx, ny, nz, px, py, pz, &qx, &qy, &qz);
    Normalize(&qx, &qy, &qz);
    /* this creates p normal to both q and n */
    CrossProduct(nx, ny, nz, qx, qy, qz, &px, &py, &pz);
    //Normalize(&px, &py, &pz); // not needed since n and q are orthonormal already

    /* randomly choose new direction cosines */
    

    data[4] = sx;
    data[5] = sy;
    data[6] = sz;
    /* that's the scattered ray! */

    return 0;
}

int __declspec(dllexport) APIENTRY UserParamNames(char *data)
    {
    /* this function returns the name of the parameter requested */
    int i;
    i = (int) data[0];
    strcpy(data,"");
    if (i == 1) strcpy(data,"Transmission");
    if (i == 2) strcpy(data,"Max Angle");
    return 0;
    }

void CrossProduct(double x1, double y1, double z1, double x2, double y2, double z2, double *x3, double *y3, double *z3)
{
*x3 = y1*z2 - z1*y2;
*y3 = z1*x2 - x1*z2;
*z3 = x1*y2 - y1*x2;
}

void Normalize(double *x, double *y, double *z)
{
double temp;
temp = (*x)*(*x) +(*y)*(*y)+(*z)*(*z);
temp = sqrt(temp);
if (temp == 0) return;
temp = 1.0/temp;
*x *= temp;
*y *= temp;
*z *= temp;
}
[/more]
Автор: paparazzo
Дата сообщения: 15.05.2014 23:38
Подниму старый вопрос.
Какой порядок цен на расчет осветительной оптики, удаленно, т.е.. фриланс.

Например рассчитать линзу полного внутреннего отражения работающую со светодиодом. Сколько?
Автор: Paredam
Дата сообщения: 20.05.2014 17:20

Цитата:
Какой порядок цен на расчет осветительной оптики


Сильно зависит от страны и материалов, которые нужно предоставить заказчику. Конечный заказчик, или кто-то посередине, отдающий часть работ. Думаю, что не меньше 2,5-4 000$



Добавлено:
Колеги, каково мнение о Zemax как компании сейчас.
С новой политикой поддержки, ценами и прочим.
У меня ощущение, что для классической оптики в последние 2 года ничего нового не сделано (не принимая в расчет исправление мелких багов), концентрируются на тематике освещенности (что не удивительно - Radiant).
В результате для меня, в основном работающего с классической оптикой - одни недостатки, стоимость поддерки растет, нового - ничего. Цена нового модуля - запредельная.
Подумываю - не перейти ли на CodeV при всей моей любви к Zemax.

Какие мнения?
Автор: Cano_J
Дата сообщения: 20.05.2014 18:44
Просто из любопытства - а что бы Вам хотелось увидеть в Zemax?
Автор: A_P_V
Дата сообщения: 20.05.2014 19:55

Цитата:
Подумываю - не перейти ли на CodeV при всей моей любви к Zemax.


Стоимость Кода пока значительно выше. И, вы покупаете только временную лицензию. То есть после окончания срока программа не запустится.

В 20-х числах июня планируется несколько презентаций Кода в Москве. Можно подготовить к этому времени вопросы.
Автор: yevogre
Дата сообщения: 21.05.2014 06:57

Цитата:
Подумываю - не перейти ли на CodeV при всей моей любви к Zemax.

Думаю, не пожалеете.
Мне не хватает только одного - графического вывода Зейделя.
По цифиркам трудно работать, но привыкнуть можно.
Земакс попробовал разок - так и не смог. Держу копию только для анализа систем из ЗеБэйса.
Автор: paparazzo
Дата сообщения: 21.05.2014 10:08

Цитата:
Колеги, каково мнение о Zemax как компании сейчас.
С новой политикой поддержки, ценами и прочим.



Отрицательное, после того как выпустили преждевременно Optics Studio c кучей недоработок и с меньшим функционалом, чем Zemax 13.
Хотя в плане графики и визуализации функционал больше.

Code V давно не пользовался для расчета объективов, но нравилось, что можно жестко задать увеличение системы. Как в Opal. И афокальный режим там всегда был.

Хотя Земакс проще для освоения.


Добавлено:

Цитата:
Сильно зависит от страны и материалов, которые нужно предоставить заказчику.


Страна Россия. Я при расчете исхожу из затраченного времени, и своей зарплаты на основном месте.
Материалы - только расчет, т.к. я не производитель.
Автор: Aspirant_Levin
Дата сообщения: 22.05.2014 11:19
Подскажите, пожалуйста, по расчёту бленды на телеобъектив. В Кругере есть формула вполне логичная для расчёта длины бленды:

L=D0/(tg(w1)-tg(w))

w-половинный полевой угол

w1-угол к солнцу

По логике вещей D0 должно быть диаметром входного зрачка, что подтверждается, если использовать также весьма логичную формулу для расчета внешнего диаметра бленды:

D1=(y'*L/f)+f/n (Д.С. Гурлев справочник по фотографии фотосъемка)

1/n - относительное отверстие

Собственно вопрос: Что такое D0? Диаметр входного зрачка или световой диаметр фронтальной поверхности первой линзы системы.
Потому как на одном не очень достоверном сайте видел, что для "широкоугольных" систем D0 это световой диаметр первой линзы (логики в этом не нашёл да собственно сильно и не искал, а сомнения запали).

И ещё, если D0 диаметр входного зрачка, то длину бленды логично откладовать от положения входного зрачка в системе. Так ведь?

И, если система с переменным фокусом и положение входного зрачка гуляет внутри системы и даже выходит за её пределы (зрачок мнимый), как быть в этом случае, какие значения подставлять в D0 и w?
Автор: yevogre
Дата сообщения: 22.05.2014 11:24

Цитата:
Потому как на одном не очень достоверном сайте видел, что для "широкоугольных" систем D0 это световой диаметр первой линзы (логики в этом не нашёл да собственно сильно и не искал, а сомнения запали).  

Совершенно верно, это световой диаметр линзы, а не входного зрачка.
Широкоугольники ограничивают пучок диафрагмой, которая расположена далеко за передней поверхностью.
Но работает (с наклонными пучками) вся поверхность передней линзы.
Впрочем, это не только для широкоугольников.
Только у Пецваля, ИМХО, они совпадают.

Хотя, подумав, пожалуй это все-таки зрачок входной. Т.е. расчитывается степень виньетирования, а не ограничение поля.
Автор: Aspirant_Levin
Дата сообщения: 24.05.2014 15:41
yevogre
A_P_V
Спасибо
Автор: yevogre
Дата сообщения: 25.05.2014 07:55

Цитата:
Code V давно не пользовался для расчета объективов, но нравилось, что можно жестко задать увеличение системы.

А в чем проблема с этим в Земаксе? Нельзя задать пользовательский параметр на фокус?
Имеется в виду не EFL, а высота изображения для наклонного пучка.
Автор: A_P_V
Дата сообщения: 25.05.2014 09:33

Цитата:
А в чем проблема с этим в Земаксе? Нельзя задать пользовательский параметр на фокус? Имеется в виду не EFL, а высота изображения для наклонного пучка.


Можно задать высоту луча для требуемого поля.
Автор: yevogre
Дата сообщения: 25.05.2014 09:51

Цитата:
Можно задать высоту луча для требуемого поля.

При трассировке реального луча, так и есть. И еще параметр ограничения дисторсии.
В Коде это без проблем, а в Земаксе как?
Автор: A_P_V
Дата сообщения: 25.05.2014 11:52

Цитата:
При трассировке реального луча, так и есть. И еще параметр ограничения дисторсии. В Коде это без проблем, а в Земаксе как?


Да, задаешь высоту реального луча на поверхности изображения. И на дисторсию есть операнд (задаешь ограничения на значение в требуемых точках).

Может paparazzo что-то другое имел в виду.
Автор: Paredam
Дата сообщения: 25.05.2014 21:01

Цитата:
Я при расчете исхожу из затраченного времени, и своей зарплаты на основном месте


Я считаю это не верным. Оплата за фриланс должна быть выше, плюс профессионализм, плюс/минус отсутствие-наличие конкуренции, личная загрузка играет роль, а так же история взаимоотношений.


Не знаю как в России - я бы меньше 4K$ не взял.

Добавлено:

Цитата:
Отрицательное


Вот и я про то же

Добавлено:

Цитата:
Мне не хватает только одного - графического вывода Зейделя.


А для чего вообще? Не пользуюсь Зейделем уже лет 10 (возможно ошибаюсь). Время не экономят, а в заблуждение вводят, особенно для быстрых систем
Автор: yevogre
Дата сообщения: 26.05.2014 09:05

Цитата:
А для чего вообще?

Хорошо определяет поверхность, на которой система спотыкается.
При "гладком" расчете после каждой итерации виден прогресс, а вот если параметры начинают прыгать в довольно широком диапазоне,
то надобно найти причину. У меня так. Но это зависит от техники счета.

Цитата:
я бы меньше 4K$ не взял

На фрилансе такую сумму можно просить только с хорошим именем и за полный комплект с анализом.
Можно и не взять, вопрос в том, кто даст
Автор: SiberianBird
Дата сообщения: 26.05.2014 10:00

Цитата:
Например рассчитать линзу полного внутреннего отражения работающую со светодиодом. Сколько?

можно прикинуть по затраченому времени. 80 евро/час будет близко к среднему запросу фриланселов в Европе.
Автор: glazar
Дата сообщения: 26.05.2014 10:28

Цитата:
можно прикинуть по затраченому времени. 80 евро/час будет близко к среднему запросу фриланселов в Европе.

Именно так.
Автор: paparazzo
Дата сообщения: 26.05.2014 10:59

Цитата:
можно прикинуть по затраченому времени. 80 евро/час будет близко к среднему запросу фриланселов в Европе.


Для меня эти линзы, как орехи. Я их уже более 200 рассчитал.
Поэтому много брать совесть не позволит , т.к. косяки все известны и я их еще до расчета решаю и в процессе.
А что посложнее, то побольше.


Цитата:
Можно и не взять, вопрос в том, кто даст


Да, это вопрос кто даст. Вот фару считал пару лет назад, не очень сложная, но пучок асимметричный. Взял 500$. Без вопросов заказчик расплатился, из России.
Сейчас линзу хотят уличную, запросил 700$ - думают. Хотя возможно кто-то дешевле берет в России за расчет. )))

Хотя всё это так, мелочи жизни.
Автор: glazar
Дата сообщения: 02.06.2014 13:48
У меня в ОС с плоскости _зрачка_ стоит нечто вроде дифракционной решетки с периодом около 4 мкм. Источник излучения - зеленый пп лазер с шириной линии около 2 нм. Изображение в промежуточной плоскости проецируется на стену с большим увеличением. Из-за решетки изображение размывается к краю поля - видна дисперсия источника.
Теперь вопрос. Как это скомпенсировать? Можно ли сконструировать объектив, который будет давать соответствующий хроматизм, чтобы убрать размазывание изображения? Спектральная ширина-то всего 2 нм. Что-нибудь с линзами Френеля?
Автор: BookWarrior
Дата сообщения: 03.06.2014 02:15
друзья, пишу пока сюда, не в книги, поскольку здесь списки книг по оптике проплывали и три из них как минимум - того же автора:

Кто-нибудь может помочь достать книгу

Slyusarev, Aberration and Optical Design Theory (1984)
ISBN-13: 9780852743577



Заранее спасибо,
bw
Автор: VECTORRR
Дата сообщения: 03.06.2014 12:00
glazar

Цитата:
Спектральная ширина-то всего 2 нм.


2 нм Вы бы никогда глазом не увидели. Думаю, что это у него в паспорте так написано про 2 нм, а в действительности пп-лазер генерит еще набор дополнительных линий меньшей интенсивности относительно главной. Если у Вас ещё зелёный лазер на кристалле с преобразованием частоты, то ещё хуже, наверное. )


Цитата:
Можно ли сконструировать объектив, который будет давать соответствующий хроматизм, чтобы убрать размазывание изображения?

Так обычно и делают.)

Автор: glazar
Дата сообщения: 03.06.2014 15:27
VECTORRR

Это лазерный диод зелёный. Глазом я видел в другом эксперименте, там был красный СЛД с шириной в 10 нм. Здесь пока еще до экспериментов не дошли. Если взять дифракционный угол как lambda/p (p=4мкм - период решетки), то получается следующее. В фокальной плоскости линзы имеем для одного луча lambda*f/p, для другого (lambda+2нм)*f/p. Разница получается 2 нм*f/p. Если взять f=40 мм, то это 2Е-6*40/4Е-3 мм = 20 мкм. Это промежуточное изображение проецируется с увеличением около сотни. Получается размазывание в 2 мм только лишь от ширины линии лазерного диода (при условии, что она будет действительно 2 нм). Я видел публикации, где это дело компенсировали с помощью комбинации из линз Френеля, но не очень понимаю как.
Автор: wyndyday
Дата сообщения: 03.06.2014 23:04

Цитата:
при условии, что она будет действительно 2 нм).


Какой диод?
У меня некоторые Osram 520 нм зеленные дают около 1 нм. Не знаю как важно для вас, но разброс длины +- 5 нм и больше.
Автор: VECTORRR
Дата сообщения: 05.06.2014 06:24
glazar

Ваши расчёты верны про 2 мм. Не знаю, мне ничего не приходит в голову, как только использовать после решётки специально рассчитанный объектив с противоположным по знаку хроматизмом, да и то непонятно сколько много линз в нём должно быть, так как дисперсия стекла на ширине 2 нм может быть слишком мала.
Автор: MrSidoy
Дата сообщения: 05.06.2014 14:51
Уважаемые коллеги, подскажите где можно почитать о Хоффмановском модуляционном контрасте. Суть метода ясна, но я не исключаю наличия "подводных камней". Может кто-нибудь подскажет литературу по теме.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378

Предыдущая тема: Maxthon 3.x - быстрый и мощный браузер


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.