1. Друзья, "лихорадка" вокруг тем об альтернативной энергии заставила возбудиться и мошенников! Будьте бдительны и не ведитесь на дешевые разводы. Помните, что если Вам предлагают купить рабочий БТГ по цене дешевле миллиона долларов, то на 99% это развод Вас на деньги. Если же Вам предлагают купить БТГ дороже миллиона долларов, то это развод на 100%. Увы чудес и исключений пока нет, хотя Вы всегда можете это проверить самостоятельно... :-)
    Скрыть объявление

Пикотехнологический ДНК-конструктор...

Тема в разделе "Свободное общение", создана пользователем Kushelev, 28 Март 2011.

  1. Kushelev

    Kushelev Антитентурианец

    Сегодня, 2011-03-27, мне удалось создать скрипт для 3DS Max, который строит пикотехнологическую модель ДНК/РНК по нуклеотидной последовательности и последовательности пар композиционных углов.

    Вот как выглядит модель одного нуклеотида:

    [​IMG] [​IMG]

    А так выглядит модель, состоящая из 10 нуклеотидов:

    [​IMG]
    Оригинал: http://img-fotki.yandex.ru/get/5503/nanoworld2003.18/0_48c8a_69d6a025_orig.png

    p = #(); p1 = #(); p2 = #(); aa = #(); ax = #(); ay = #(); r = #(); nuclcol = #(); gp = #(); gn = #(); gg = #()
    -- adenosine, cytosine, guanine, timidine, uracil, inosine, pseudouracil, dihydrouracil, methyl inosine, x-circles maximum, w-methyl-2-guanine, v-methyl-1-guanine
    nucl = #("a","c","g","t","u","i","p","d","m","x","w","v")
    nuclcolor = #([200,0,0],[200,100,100],[0,200,200],[0,0,200],[100,0,200],[200,0,200],[150,0,0],[100,50,0],[0,80,50],[100,100,100])
    --*****************************************************************************************************************
    seq = #("a","c","c","a","c","c","u","g","c","u","c","a","g","g","c","c","u","u","a","g","c","p","t","g","g","c","c"
    ,"u","c","d","g","g","a","g","a","g","g","g","p","m","c","g","i","u","u","c","c","c","u","c","w"
    ,"c","g","c","g","a","d","g","g","c","d","g","a","u","g","c","g","v","u","g","u","g","c","g","g","g")
    --*****************************************************************************************************************
    anglecomp1 = #(0,0,0,0,0,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
    anglecomp2 = #(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
    --*****************************************************************************************************************
    px = #(4.2,-4.2,4.2,-4.2,-4.2,4.2,-4.2,4.2); py = #(-4.2,-4.2,4.2,4.2,4.2,4.2,-4.2,-4.2); pz = #(4.2,4.2,4.2,4.2,-4.2,-4.2,-4.2,-4.2)
    pa = #(35.27,35.27,-35.27,-35.27,35.27,35.27,-35.27,-35.27); pb = #(45,-45,45,-45,45,-45,45,-45)
    -- PH2
    pindex = #(1,0,0,1,0,1,1,0, 0,0,0,0,0,0,0,0, 1,1,1,1,1,0,1,1, 0,1,1,1,1,1,1,1, 1,1,1,0,1,0,1,1, 1,0,1,1,0,1,1,1)
    pindex2 = #(1,0,0,1,0,1,1,0, 0,0,0,0,0,0,0,0, 1,1,1,1,1,0,1,1, 0,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0)
    trnk = torus radius1:0.1 radius2:0.04 segs:3 sides:3 position: [0,0,0] wirecolor:[200,200,200]
    select #(trnk); macros.run "Modifier stack" "convert_to_Mesh"
    for k = 1 to 10 do(
    for ll = 1 to 8 do(if pindex[ll] > 0 then (p[ll] = torus radius1:4.8 radius2:0.4 segs:20 sides:12 position: [px[ll],py[ll],pz[ll]] wirecolor:[0,200,0]
    rotate p[ll] pa[ll] [1,0,0]; rotate p[ll] pb[ll] [0,1,0])); g0 = group #(p[01],p[04],p[06],p[07])
    for ll = 17 to 24 do(if pindex[ll] > 0 then (p[ll] = torus radius1:4.8 radius2:0.4 segs:20 sides:12 position: [px[ll-16],py[ll-16],pz[ll-16]] wirecolor:[0,200,0]
    rotate p[ll] pa[ll-16] [1,0,0]; rotate p[ll] pb[ll-16] [0,1,0])); g2 = group #(p[17],p[18],p[19],p[20],p[21],p[23],p[24])
    rotate g2 60 [-1,-1,1]; move g2 [-8.4,-8.4,8.4]
    for ll = 25 to 32 do(if pindex[ll] > 0 then (p[ll] = torus radius1:4.8 radius2:0.4 segs:20 sides:12 position: [px[ll-24],py[ll-24],pz[ll-24]] wirecolor:[0,200,0]
    rotate p[ll] pa[ll-24] [1,0,0]; rotate p[ll] pb[ll-24] [0,1,0])); g3 = group #(p[26],p[27],p[28],p[29],p[30],p[31],p[32])
    rotate g3 60 [-1,1,-1]; move g3 [-8.4,8.4,-8.4]; g6 = group #(g0,g2,g3); g6.pivot = [0,0,0]
    rotate g6 -45 [0,0,1]; rotate g6 -15.5 [1,0,0]; move g6 [-37.5,-9.5,11.5]; ungroup g6; ungroup g3; ungroup g2; ungroup g0
    select #(p[01],p[04],p[06],p[07],p[17],p[18],p[19],p[20],p[21],p[23],p[24],p[26],p[27],p[28],p[29],p[30],p[31],p[32])
    macros.run "Modifier stack" "convert_to_Mesh"; element2 = copy p[1] wirecolor: [0,200,0]
    for ll = 2 to 32 do(if pindex2[ll] > 0 then (attach element2 p[ll])); delete p[1]
    -- rybose
    x = #(6,-6,0,0,0,0,15,-15,23.5,-23.5,25,-25,20,-20,19,-19,19,-19,22.5,-22.5,22.5,-22.5,10,-10,10,-10,15.5,-15.5,15.5,-15.5,0,6,-6,0,-5.5,5.5,0,-23.7,-16.5,-26
    ,-23.5,-18,-15.5,-26,-29.53,-31.51,-21.611,-23.59,-21.611,-19.631,-29.53,-27.55,-43.389,-43.39,-37.45,-37.45,-31.51,-31.51,-37.45,-37.45)
    y = #(-58,-58,-58,-58,-49,-49,-55,-55,-47,-47,-37.5,-37.5,-26.5,-26.5,-50.5,-50.5,-50.5,-50.5,-32,-32,-32,-32,-47,-47,-47,-47,-38.5,-38.5,-38.5,-38.5,-55,-63
    ,-63,-69,-60.5,-60.5,-66,-55.7,-48,-58,-48,-58,-56,-50,-28.049,-26.864,-25.754,-24.57,-32.563,-33.747,-34.857,-36.042,-26.864,-19.981,-23.46,-16.576,-19.981
    ,-26.864,-23.385,-30.268)
    z = #(0,0,6,-6,7,-7,0,0,0,0,0,0,0,0,6,6,-6,-6,6,6,-6,-6,7,7,-7,-7,7,7,-7,-7,-13.5,-8.5,-8.5,-10.5,-16,-16,-18,-17.5,-13,-10,-15.5,-8,-15.5,-8,17.242,9.165
    ,15.637,7.56,5.902,13.98,7.507,15.584,9.165,4.35,14.032,9.217,4.35,9.165,-0.517,4.297)
    a = #(90,90,30,-30,-20,20,90,90,90,90,90,90,90,90,30,30,-30,-30,30,30,-30,-30,-20,-20,20,20,-20,-20,20,20,75,50,50,75,50,50,-30,-30,80,80,60,60,60,60,40,70
    ,-55,55,40,70,-55,55,71.5,71.5,0,-71.5,71.5,71.5,0,-71.5)
    b = #(45,-45,0,0,0,0,-5,5,95,-95,65,-65,-15,15,45,-45,45,-45,120,-120,120,-120,30,-30,30,-30,90,-90,90,-90,0,75,-75,0,75,-75,0,-45,-45,-45,30,30,235,235,-120
    ,60,-40,-18,-120,60,-40,-18,-60,60,0,0,-60,60,0,0)
    ri = #(1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,1,1)
    for l = 1 to 60 do(
    if ri[l] > 0 then (r[l] = torus radius1:4.8 radius2:0.4 segs:20 sides:12 position: [x[l],y[l],z[l]] wirecolor: [200,200,0]
    rotate r[l] a[l] [1,0,0]
    rotate r[l] b[l] [0,0,1]
    ))
    select #(r[1],r[2],r[3],r[5],r[6],r[7],r[8],r[9],r[10],r[11],r[12],r[13],r[14],r[15],r[16],r[17],r[19]
    ,r[21],r[22],r[23],r[24],r[25],r[26],r[27],r[28],r[29],r[30],r[31],r[32],r[33],r[34],r[35],r[36],r[37],r[38],r[39]
    ,r[41],r[42],r[43],r[44],r[45],r[47],r[48],r[50],r[51],r[52],r[53],r[54],r[55],r[57],r[59],r[60])
    macros.run "Modifier stack" "convert_to_Mesh"
    element1 = copy r[1] wirecolor: [200,200,0]
    for ll = 2 to 60 do(if ri[ll] > 0 then (attach element1 r[ll]))
    delete r[1]
    -- adenosine, cytosine, guanine, timidine, uracil, inosine, pseudouracil, dihydrouracil, methyl inosine, x-circles maximum, w-methyl-2-guanine, v-methyl-1-guanine
    if (seq[k] == nucl[10]) then (ai = #(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1); axi = #(1,1,1,1,1,1,1,1); ayi = #(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1); nuclcol = nuclcolor[10])
    if (seq[k] == nucl[1]) then (ai = #(0,0,0,1,1,1,1,1,1,1,1,1,0,1,0); axi = #(0,0,1,1,0,0,0,0); ayi = #(0,1,0,0,0,0,0,0,0,1,0,1,0,1,0); nuclcol = nuclcolor[1])
    if (seq[k] == nucl[2]) then (ai = #(0,0,0,1,1,1,1,1,1,1,0,1,0,0,0); axi = #(0,0,1,1,0,0,0,0); ayi = #(0,1,0,0,0,0,0,1,0,1,0,1,0,0,0); nuclcol = nuclcolor[2])
    if (seq[k] == nucl[3]) then (ai = #(0,1,0,1,1,1,1,1,1,1,1,1,0,1,0); axi = #(0,0,1,1,0,0,0,0); ayi = #(0,0,0,0,0,0,0,0,0,1,0,1,0,1,0); nuclcol = nuclcolor[3])
    if (seq[k] == nucl[4]) then (ai = #(0,0,0,1,1,1,1,1,1,1,0,1,0,0,0); axi = #(0,0,1,1,0,0,0,0); ayi = #(0,1,0,0,0,0,0,1,0,1,0,1,0,0,0); nuclcol = nuclcolor[4])
    if (seq[k] == nucl[5]) then (ai = #(0,0,0,1,1,1,1,1,1,1,0,1,0,0,0); axi = #(0,0,1,1,0,0,0,0); ayi = #(0,1,0,0,0,0,0,1,0,1,0,1,0,0,0); nuclcol = nuclcolor[5])
    if (seq[k] == nucl[6]) then (ai = #(0,0,0,1,1,1,1,1,1,1,1,1,0,1,0); axi = #(0,0,1,1,0,0,0,0); ayi = #(0,1,0,0,0,0,0,0,0,1,0,1,0,1,0); nuclcol = nuclcolor[6])
    if (seq[k] == nucl[7]) then (ai = #(0,0,0,1,1,1,1,1,1,1,0,1,0,0,0); axi = #(0,0,1,1,0,0,0,0); ayi = #(0,1,0,0,0,0,0,1,0,1,0,1,0,0,0); nuclcol = nuclcolor[7])
    if (seq[k] == nucl[8]) then (ai = #(0,0,0,1,1,1,1,1,1,1,0,1,0,0,0); axi = #(0,0,1,1,0,0,0,0); ayi = #(0,1,0,0,0,0,0,1,0,1,0,1,0,0,0); nuclcol = nuclcolor[8])
    if (seq[k] == nucl[9]) then (ai = #(0,0,0,1,1,1,1,1,1,1,1,1,0,1,0); axi = #(0,0,1,1,0,0,0,0); ayi = #(0,1,0,0,0,0,0,0,0,1,0,1,0,1,0); nuclcol = nuclcolor[9])
    --
    element0 = torus radius1:0.1 radius2:0.05 segs:3 sides:3 position:[0,0,0] wirecolor: nuclcol
    select #(element0); macros.run "Modifier stack" "convert_to_Mesh"
    for i = 1 to 3 do for j = 1 to 5 do (n = i + 3*(j-1)
    if ai[n] > 0 then (aa[n] = torus radius1:4.8 radius2:0.4 segs:20 sides:12 position:[10*(i-2),10*(j-5),10*0.5] wirecolor: nuclcol
    aa[n+12]=copy aa[n] wirecolor: nuclcol; move aa[n] [0,0,-10]; select #(aa[n],aa[n+12]); macros.run "Modifier stack" "convert_to_Mesh"
    attach element0 aa[n];attach element0 aa[n+12]))
    for i = 1 to 2 do for j = 1 to 4 do (m = i + 2*(j-1)
    if axi[m] > 0 then (ax[m] = torus radius1:4.8 radius2:0.4 segs:20 sides:12 position:[10*(3*(i-1.5)),10*(j-4),0] wirecolor: nuclcol
    rotate ax[m] 90 [0,1,0]; select #(ax[m]); macros.run "Modifier stack" "convert_to_Mesh"
    attach element0 ax[m]))
    for i = 1 to 3 do for j = 1 to 5 do (m = i + 3*(j-1)
    if ayi[m] > 0 then (ay[m] = torus radius1:4.8 radius2:0.4 segs:20 sides:12 position:[10*(i-2),10*(j-4.5),0] wirecolor: nuclcol
    rotate ay[m] 90 [1,0,0]; select #(ay[m]); macros.run "Modifier stack" "convert_to_Mesh"
    attach element0 ay[m]))
    -- first vector
    gr1 = group #(element0, element1,trnk)
    gr1.pivot = [-19.632, -33.750, 13.980]
    rotate gr1 anglecomp1[k] [23.759, -13.767, 9.629]
    ungroup gr1
    -- second vector
    gr2 = #(element0, element1, element2,trnk)
    gr2.pivot = [-43.391, -10.855, 7.631]
    rotate gr2 anglecomp2[k] [-11.880, -2.245, -8.094]
    -- translation vector
    ungroup gr2
    attach trnk element0
    attach trnk element1
    attach trnk element2
    move trnk [5.511 ,-49.39, -25.725]
    trnk.pivot = [-26, -58, -10]
    -- translation angles
    rotate trnk 50 [0, 1, 0]
    rotate trnk 35 [0, 0, 1])
     
  2. Kushelev

    Kushelev Антитентурианец

    Скрипт-генератор ДНК / РНК

    [​IMG][​IMG]
    Анимация: http://video.yandex.ru/users/nanoworld2003/view/24/

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

    Скрипт: cuuagc787
    Пикотехнологическая модель фрагмента тРНК / tRNA, состоящий из 6 нуклеотидов: CUUAGC псевдоуридиловой петли.

    Для точной настройки углов нужно изготовить приспособление, например, дигитайзер, встроенный в пластмассовую версию пикотехнологического ДНК-конструктора. В этом случае последовательность композиционных углов можно будет просто считывать с дигитайзера.

    Подробнее о виртуальном и пластмассовом пикотехнологическом ДНК-конструкторе можно прочесть в рассылке "Новости лаборатории Наномир" и на форуме лаборатории Наномир, начиная с 2011-03-29
     
  3. Kushelev

    Kushelev Антитентурианец

    Формы, механизмы, энергия наномира-27

    Кушелев: Плохо ли, хорошо ли, а скрипт "Виртуальный пикотехнологический ДНК-конструктор" написан и работает. Аналогов в мире нет. :tongue:

    Конечно, программисты-профессионалы могли бы написать лучше меня, но не написали. Так что придётся пока пользоваться скриптом, написанным дилетантом :smile3:
     
  4. Kushelev

    Kushelev Антитентурианец

    Пространственная структура биомолекул

    Кушелев: Вот скрипт, который строит фрагмент cuuagc псевдоурациловой петли тРНК.

    ***

    p = #(); p1 = #(); p2 = #(); aa = #(); ax = #(); ay = #(); r = #(); nuclcol = #(); gp = #(); gn = #(); gg = #()
    -- adenosine, cytosine, guanine, timidine, uracil, inosine, pseudouracil, dihydrouracil, methyl inosine, x-circles maximum, w-methyl-2-guanine, v-methyl-1-guanine
    nucl = #("a","c","g","t","u","i","p","d","m","x","w","v")
    nuclcolor = #([200,0,0],[200,100,100],[0,200,200],[0,0,200],[100,0,200],[200,0,200],[150,0,0],[100,50,0],[0,80,50],[100,100,100])
    --*****************************************************************************************************************
    seq = #("a","c","c","a","c","c","u","g","c","u","c","a","g","g","c","c","u","u","a","g","c","p","t","g","g","c","c"
    ,"u","c","d","g","g","a","g","a","g","g","g","p","m","c","g","i","u","u","c","c","c","u","c","w"
    ,"c","g","c","g","a","d","g","g","c","d","g","a","u","g","c","g","v","u","g","u","g","c","g","g","g")
    --*****************************************************************************************************************
    -- turn
    anglecomp1 = #(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,0, 60, 120, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
    anglecomp2 = #(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,-120,-120, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
    --*****************************************************************************************************************
    px = #(4.2,-4.2,4.2,-4.2,-4.2,4.2,-4.2,4.2); py = #(-4.2,-4.2,4.2,4.2,4.2,4.2,-4.2,-4.2); pz = #(4.2,4.2,4.2,4.2,-4.2,-4.2,-4.2,-4.2)
    pa = #(35.27,35.27,-35.27,-35.27,35.27,35.27,-35.27,-35.27); pb = #(45,-45,45,-45,45,-45,45,-45)
    -- PH2
    pindex = #(1,0,0,1,0,1,1,0, 0,0,0,0,0,0,0,0, 1,1,1,1,1,0,1,1, 0,1,1,1,1,1,1,1, 1,1,1,0,1,0,1,1, 1,0,1,1,0,1,1,1)
    pindex2 = #(1,0,0,1,0,1,1,0, 0,0,0,0,0,0,0,0, 1,1,1,1,1,0,1,1, 0,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0)
    trnk = torus radius1:0.1 radius2:0.04 segs:3 sides:3 position: [0,0,0] wirecolor:[200,200,200]
    select #(trnk); macros.run "Modifier stack" "convert_to_Mesh"
    for k = 18 to 22 do(
    for ll = 1 to 8 do(if pindex[ll] > 0 then (p[ll] = torus radius1:4.8 radius2:0.4 segs:20 sides:12 position: [px[ll],py[ll],pz[ll]] wirecolor:[0,200,0]
    rotate p[ll] pa[ll] [1,0,0]; rotate p[ll] pb[ll] [0,1,0])); g0 = group #(p[01],p[04],p[06],p[07])
    for ll = 17 to 24 do(if pindex[ll] > 0 then (p[ll] = torus radius1:4.8 radius2:0.4 segs:20 sides:12 position: [px[ll-16],py[ll-16],pz[ll-16]] wirecolor:[0,200,0]
    rotate p[ll] pa[ll-16] [1,0,0]; rotate p[ll] pb[ll-16] [0,1,0])); g2 = group #(p[17],p[18],p[19],p[20],p[21],p[23],p[24])
    rotate g2 60 [-1,-1,1]; move g2 [-8.4,-8.4,8.4]
    for ll = 25 to 32 do(if pindex[ll] > 0 then (p[ll] = torus radius1:4.8 radius2:0.4 segs:20 sides:12 position: [px[ll-24],py[ll-24],pz[ll-24]] wirecolor:[0,200,0]
    rotate p[ll] pa[ll-24] [1,0,0]; rotate p[ll] pb[ll-24] [0,1,0])); g3 = group #(p[26],p[27],p[28],p[29],p[30],p[31],p[32])
    rotate g3 60 [-1,1,-1]; move g3 [-8.4,8.4,-8.4]; g6 = group #(g0,g2,g3); g6.pivot = [0,0,0]
    rotate g6 -45 [0,0,1]; rotate g6 -15.5 [1,0,0]; move g6 [-37.5,-9.5,11.5]; ungroup g6; ungroup g3; ungroup g2; ungroup g0
    select #(p[01],p[04],p[06],p[07],p[17],p[18],p[19],p[20],p[21],p[23],p[24],p[26],p[27],p[28],p[29],p[30],p[31],p[32])
    macros.run "Modifier stack" "convert_to_Mesh"; element2 = copy p[1] wirecolor: [0,200,0]
    for ll = 2 to 32 do(if pindex2[ll] > 0 then (attach element2 p[ll])); delete p[1]
    -- rybose
    x = #(6,-6,0,0,0,0,15,-15,23.5,-23.5,25,-25,20,-20,19,-19,19,-19,22.5,-22.5,22.5,-22.5,10,-10,10,-10,15.5,-15.5,15.5,-15.5,0,6,-6,0,-5.5,5.5,0,-23.7,-16.5,-26
    ,-23.5,-18,-15.5,-26,-29.53,-31.51,-21.611,-23.59,-21.611,-19.631,-29.53,-27.55,-43.389,-43.39,-37.45,-37.45,-31.51,-31.51,-37.45,-37.45)
    y = #(-58,-58,-58,-58,-49,-49,-55,-55,-47,-47,-37.5,-37.5,-26.5,-26.5,-50.5,-50.5,-50.5,-50.5,-32,-32,-32,-32,-47,-47,-47,-47,-38.5,-38.5,-38.5,-38.5,-55,-63
    ,-63,-69,-60.5,-60.5,-66,-55.7,-48,-58,-48,-58,-56,-50,-28.049,-26.864,-25.754,-24.57,-32.563,-33.747,-34.857,-36.042,-26.864,-19.981,-23.46,-16.576,-19.981
    ,-26.864,-23.385,-30.268)
    z = #(0,0,6,-6,7,-7,0,0,0,0,0,0,0,0,6,6,-6,-6,6,6,-6,-6,7,7,-7,-7,7,7,-7,-7,-13.5,-8.5,-8.5,-10.5,-16,-16,-18,-17.5,-13,-10,-15.5,-8,-15.5,-8,17.242,9.165
    ,15.637,7.56,5.902,13.98,7.507,15.584,9.165,4.35,14.032,9.217,4.35,9.165,-0.517,4.297)
    a = #(90,90,30,-30,-20,20,90,90,90,90,90,90,90,90,30,30,-30,-30,30,30,-30,-30,-20,-20,20,20,-20,-20,20,20,75,50,50,75,50,50,-30,-30,80,80,60,60,60,60,40,70
    ,-55,55,40,70,-55,55,71.5,71.5,0,-71.5,71.5,71.5,0,-71.5)
    b = #(45,-45,0,0,0,0,-5,5,95,-95,65,-65,-15,15,45,-45,45,-45,120,-120,120,-120,30,-30,30,-30,90,-90,90,-90,0,75,-75,0,75,-75,0,-45,-45,-45,30,30,235,235,-120
    ,60,-40,-18,-120,60,-40,-18,-60,60,0,0,-60,60,0,0)
    ri = #(1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,1,0,1,1)
    for l = 1 to 60 do(
    if ri[l] > 0 then (r[l] = torus radius1:4.8 radius2:0.4 segs:20 sides:12 position: [x[l],y[l],z[l]] wirecolor: [200,200,0]
    rotate r[l] a[l] [1,0,0]
    rotate r[l] b[l] [0,0,1]
    ))
    select #(r[1],r[2],r[3],r[5],r[6],r[7],r[8],r[9],r[10],r[11],r[12],r[13],r[14],r[15],r[16],r[17],r[19]
    ,r[21],r[22],r[23],r[24],r[25],r[26],r[27],r[28],r[29],r[30],r[31],r[32],r[33],r[34],r[35],r[36],r[37],r[38],r[39]
    ,r[41],r[42],r[43],r[44],r[45],r[47],r[48],r[50],r[51],r[52],r[53],r[54],r[55],r[57],r[59],r[60])
    macros.run "Modifier stack" "convert_to_Mesh"
    element1 = copy r[1] wirecolor: [200,200,0]
    for ll = 2 to 60 do(if ri[ll] > 0 then (attach element1 r[ll]))
    delete r[1]
    -- adenosine, cytosine, guanine, timidine, uracil, inosine, pseudouracil, dihydrouracil, methyl inosine, x-circles maximum, w-methyl-2-guanine, v-methyl-1-guanine
    if (seq[k] == nucl[10]) then (ai = #(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1); axi = #(1,1,1,1,1,1,1,1); ayi = #(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1); nuclcol = nuclcolor[10])
    if (seq[k] == nucl[1]) then (ai = #(0,0,0,1,1,1,1,1,1,1,1,1,0,1,0); axi = #(0,0,1,1,0,0,0,0); ayi = #(0,1,0,0,0,0,0,0,0,1,0,1,0,1,0); nuclcol = nuclcolor[1])
    if (seq[k] == nucl[2]) then (ai = #(0,0,0,1,1,1,1,1,1,1,0,1,0,0,0); axi = #(0,0,1,1,0,0,0,0); ayi = #(0,1,0,0,0,0,0,1,0,1,0,1,0,0,0); nuclcol = nuclcolor[2])
    if (seq[k] == nucl[3]) then (ai = #(0,1,0,1,1,1,1,1,1,1,1,1,0,1,0); axi = #(0,0,1,1,0,0,0,0); ayi = #(0,0,0,0,0,0,0,0,0,1,0,1,0,1,0); nuclcol = nuclcolor[3])
    if (seq[k] == nucl[4]) then (ai = #(0,0,0,1,1,1,1,1,1,1,0,1,0,0,0); axi = #(0,0,1,1,0,0,0,0); ayi = #(0,1,0,0,0,0,0,1,0,1,0,1,0,0,0); nuclcol = nuclcolor[4])
    if (seq[k] == nucl[5]) then (ai = #(0,0,0,1,1,1,1,1,1,1,0,1,0,0,0); axi = #(0,0,1,1,0,0,0,0); ayi = #(0,1,0,0,0,0,0,1,0,1,0,1,0,0,0); nuclcol = nuclcolor[5])
    if (seq[k] == nucl[6]) then (ai = #(0,0,0,1,1,1,1,1,1,1,1,1,0,1,0); axi = #(0,0,1,1,0,0,0,0); ayi = #(0,1,0,0,0,0,0,0,0,1,0,1,0,1,0); nuclcol = nuclcolor[6])
    if (seq[k] == nucl[7]) then (ai = #(0,0,0,1,1,1,1,1,1,1,0,1,0,0,0); axi = #(0,0,1,1,0,0,0,0); ayi = #(0,1,0,0,0,0,0,1,0,1,0,1,0,0,0); nuclcol = nuclcolor[7])
    if (seq[k] == nucl[8]) then (ai = #(0,0,0,1,1,1,1,1,1,1,0,1,0,0,0); axi = #(0,0,1,1,0,0,0,0); ayi = #(0,1,0,0,0,0,0,1,0,1,0,1,0,0,0); nuclcol = nuclcolor[8])
    if (seq[k] == nucl[9]) then (ai = #(0,0,0,1,1,1,1,1,1,1,1,1,0,1,0); axi = #(0,0,1,1,0,0,0,0); ayi = #(0,1,0,0,0,0,0,0,0,1,0,1,0,1,0); nuclcol = nuclcolor[9])
    --
    element0 = torus radius1:0.1 radius2:0.05 segs:3 sides:3 position:[0,0,0] wirecolor: nuclcol
    select #(element0); macros.run "Modifier stack" "convert_to_Mesh"
    for i = 1 to 3 do for j = 1 to 5 do (n = i + 3*(j-1)
    if ai[n] > 0 then (aa[n] = torus radius1:4.8 radius2:0.4 segs:20 sides:12 position:[10*(i-2),10*(j-5),10*0.5] wirecolor: nuclcol
    aa[n+12]=copy aa[n] wirecolor: nuclcol; move aa[n] [0,0,-10]; select #(aa[n],aa[n+12]); macros.run "Modifier stack" "convert_to_Mesh"
    attach element0 aa[n];attach element0 aa[n+12]))
    for i = 1 to 2 do for j = 1 to 4 do (m = i + 2*(j-1)
    if axi[m] > 0 then (ax[m] = torus radius1:4.8 radius2:0.4 segs:20 sides:12 position:[10*(3*(i-1.5)),10*(j-4),0] wirecolor: nuclcol
    rotate ax[m] 90 [0,1,0]; select #(ax[m]); macros.run "Modifier stack" "convert_to_Mesh"
    attach element0 ax[m]))
    for i = 1 to 3 do for j = 1 to 5 do (m = i + 3*(j-1)
    if ayi[m] > 0 then (ay[m] = torus radius1:4.8 radius2:0.4 segs:20 sides:12 position:[10*(i-2),10*(j-4.5),0] wirecolor: nuclcol
    rotate ay[m] 90 [1,0,0]; select #(ay[m]); macros.run "Modifier stack" "convert_to_Mesh"
    attach element0 ay[m]))
    -- first vector
    gr1 = group #(element0, element1,trnk)
    gr1.pivot = [-37.451, -2.887, 14.138]
    rotate gr1 anglecomp1[k] [0, -27.384, -9.84]
    ungroup gr1
    -- second vector
    gr2 = #(element0, element1, element2,trnk)
    gr2.pivot = [-43.391, -10.855, 7.631]
    rotate gr2 anglecomp2[k] [-11.880, -2.245, -8.094]
    ungroup gr2
    -- translation vector
    attach trnk element0
    attach trnk element1
    attach trnk element2
    move trnk [5.511 ,-49.39, -25.725]
    trnk.pivot = [-26, -58, -10]
    -- translation angles
    rotate trnk 50 [0, 1, 0]
    rotate trnk 35 [0, 0, 1])

    ***

    Матрицы для всех азотистых оснований расположены под строкой, которая выделена красным цветом.

    Вы можете заменить матрицы для нуклеотидов, и 3DStudio построит модель с Вашими вариантами азотистых оснований. Если будут затруднения, пишите, будем составлять матрицы азотистых оснований вместе.

    Мне Ваши варианты моделей тРНК тоже нужны. Рано или поздно модели покажут, какие варианты более адекватны.

    К сожалению, я пока не знаю, как вернуть разные цвета нуклеотидам, но это возможно с помощью функции detech.

    Инструкция для пользования скриптом:

    [​IMG]
    Оригинал: http://img-fotki.yandex.ru/get/5005/nanoworld2003.19/0_48ebf_6ef4b8b4_orig.png

    Инструкция по работе со скриптом для 3DS Max "Виртуальный пикотехнологический ДНК-конструктор". Скрипт создан для молекулярных биологов, пикотехнологов, генных инженеров, нанотехнологов, которые изучают структуру ДНК и РНК. Скрипт позволяет строить 3D-модель ДНК, РНК по нуклеотидной последовательности и последовательности пар композиционных углов, которые определяются в модельных экспериментах. Подробности можно прочесть в рассылке "Новости лаборатории Наномир" и на форуме лаборатории Наномир, начиная с 2011-03-29

    Ключевые слова: maxscript, александр кушелев, виктория соколик, виртуальный конструктор, высокие технологии, днк-конструктор, лаборатория наномир, пикотехнологическая модель, пикотехнология, скрипт для 3ds max
     
  5. moderator

    moderator Administrator Команда форума

    То же интересная тема, не место ей в курилке, сегодня создадим новую ветку и перенесем туда эту тему и "Механизм вечной молодости"
     

Поделиться этой страницей