Форум сайта python.su
Суть в том что есть программа для коммуникации с микроскопом, который электронным пучком точечно выжигает квадратную матрицу. Нужно чтобы данная программа выжигала пяти или шестиугольную матрицу. Квадрат задается как высота и ширина + кол-во точек. И как задать чтоб кол-во точек в каждой линии можно было задать.
import sem def main(): # parameters of exposition view_field = 0.1 # view field [mm] pxl_matrix_w = 28 # ширина квадрата в точках n_fields_x = 3 # количество линий (ширина) n_fields_y = 3 # количество линий (высота) field_spacing = 0.11 # расстояние между полями [mm] # pixel dwell time для единичной линии [ms], количество = n_fields_x * n_fields_y dwell_list = [ 0.50, 1.0, 5.0, 10.0, 15.0, 30.0, 50.0, 500.0, 5000.0 ] # подключение к микроскопу SEM m = sem.Sem() res = m.Connect('localhost', 8300) if res < 0: print("Error: unable to connect") return # important: stop the scanning before we start scanning or before automatic procedures m.ScStopScan() # view field = 100 um m.SetViewField(view_field) # vypnout akvizici obrazu behem skenovani (SEM ma 4 kanaly, vypnout vsechny) m.DtEnable(0, 0, 8) m.DtEnable(1, 0, 8) m.DtEnable(2, 0, 8) m.DtEnable(3, 0, 8) # elmag blanker je treba vypnout elbl = m.ScGetBlanker(1) m.ScSetBlanker(1, 0) # elstat blanker - on acquisition m.ScSetBlanker(0, 2) # каждую команду будет ждать до конца сканирования и перемещения манипулятора m.SetWaitFlags(0x03) # оригинальная позиция манипулятора stg_orig_pos = m.StgGetPosition() # pole for fldyy in range (0, n_fields_y): for fldxx in range (0, n_fields_x): # dwell time pxl_dwell = dwell_list[fldyy * n_fields_x + fldxx] # rozdelit na skutecny dwell time [ns] a pixel count if pxl_dwell < 100.0: dwell = int(pxl_dwell * 100000) pxlcount = 10 else: dwell = int(pxl_dwell * 10) pxlcount = 100000 # manipulator m.StgMoveTo(stg_orig_pos[0] - fldxx * field_spacing, stg_orig_pos[1] + fldyy * field_spacing) # expozice for yy in range (0, pxl_matrix_w + 1): for xx in range (0, pxl_matrix_w + 1): virtfld = 1000 xpos = virtfld * xx / pxl_matrix_w ypos = virtfld * yy / pxl_matrix_w # viz dokumentace m.ScScanLine(0, virtfld, virtfld, xpos, ypos, xpos, ypos, dwell, pxlcount, 1) # stop the scanning m.ScStopScan() # progress print("field (%d %d) pixel: (%d %d)" % (fldxx, fldyy, xx, yy)) # manipulator back m.StgMoveTo(stg_orig_pos[0], stg_orig_pos[1]) # elmag blanker to begin m.ScSetBlanker(1, elbl) # wait for all process m.GetWD() # finish m.Disconnect() if __name__ == '__main__': main()
Офлайн
ChiliCну тут как то уже не согласовывается. если у вас задана ширина в 28 точек то изменив количество точек в строке вы измените ширину
pxl_matrix_w = 28 # ширина квадрата в точках
Офлайн
marvellikВ том то и суть, что изменив кол-во точек я изменю сторону квадрата, а мне нужна другая фигура, пятиугольник то имеет не равные стороны.
pxl_matrix_w = 28
Офлайн
задать то не проблема. проблема в том что нужно составить алгоритм смещения последующей строки для получения нужной фигуры. примерно так для простоты матрица задана в 9 столбцов и 4 строки
def mark(str_matrix, points): for i in range(points): str_matrix[i] = '1' return ''.join(str_matrix) matrix = [['0' for _ in range(9)] for _ in range(4)] stroka = 1 list_points = [] for i in matrix: print('точек в строке',stroka) list_points.append(int(input())) stroka += 1 for str_matrix, points in zip(matrix, list_points): print(mark(str_matrix, points))
000000000 000010000 000000000 000111000 000000000 001111100 000000000 011111110
100000000 111000000 111110000 111111100
Отредактировано marvellik (Сен. 8, 2016 20:57:16)
Офлайн
marvellikспасибо большое!
задать то не проблема. проблема в том что нужно составить алгоритм смещения последующей строки для получения нужной фигуры. примерно так для простоты матрица задана в 9 столбцов и 4 строки
Офлайн