Zachary A Porter
This is simply a pretty cool model that I built for 10th grade biology. This project was based on the Double Helix model by Sandor Kabai.
A video of it working is below along with the sourcecode. It is displaying the both the coding and template strands, with the 3 hydrogen bonds holding the bases together, allowing for easy access when transcribing the dna.
ani = Table[
With[{k = 0.5, n = 10, run = 12, sppwr = 1.7, dia2 = 0.1,
dia = 0.03, dia3 = 0.076, s = 1},
Module[{m, ser, cent, sp1, sp2, hel1, hel2},
dna = 8 Pi*t;
sppos = 30 Sin[t*2 Pi/1.9] - 5;
m = Sin[Pi/n];
ser = Table[Graphics3D[Cylinder[{
{sepF[i, sppos, sppwr]*Sin[i 2 Pi/n + dna],
sepF[i, sppos, sppwr]*Cos[i 2 Pi/n + dna], i 2 m Tan[k] },
({Sin[i 2 Pi/n + s 2 Pi/n + dna + Pi],
Cos[i 2 Pi/n + s 2 Pi/n + dna + Pi],
i 2 m Tan[k] + s 2 m Tan[k]} - {sepF[i, sppos, sppwr]*
Sin[i 2 Pi/n + dna],
sepF[i, sppos, sppwr]*Cos[i 2 Pi/n + dna],
i 2 m Tan[k] })*1/2 + {sepF[i, sppos, sppwr]*
Sin[i 2 Pi/n + dna],
sepF[i, sppos, sppwr]*Cos[i 2 Pi/n + dna], i 2 m Tan[k] }},
dia3]], {i, run}];
ser1 = Table[Graphics3D[Cylinder[{
{sepF[i, sppos, sppwr]*Sin[i 2 Pi/n + s 2 Pi/n + dna + Pi],
sepF[i, sppos, sppwr]*Cos[i 2 Pi/n + s 2 Pi/n + dna + Pi],
i 2 m Tan[k] + s 2 m Tan[k]},
({sepF[i, sppos, sppwr]*Sin[i 2 Pi/n + s 2 Pi/n + dna + Pi],
sepF[i, sppos, sppwr]*
Cos[i 2 Pi/n + s 2 Pi/n + dna + Pi],
i 2 m Tan[k] + s 2 m Tan[k]} - {Sin[i 2 Pi/n + dna],
Cos[i 2 Pi/n + dna], i 2 m Tan[k] })*1/2 + {Sin[
i 2 Pi/n + dna], Cos[i 2 Pi/n + dna], i 2 m Tan[k] }},
dia3]], {i, run}];
text1 = Table[Graphics3D[Text[dnaCode[[i*2]],
({Sin[i 2 Pi/n + s 2 Pi/n + dna + Pi],
Cos[i 2 Pi/n + s 2 Pi/n + dna + Pi],
i 2 m Tan[k] + s 2 m Tan[k]} - {Sin[i 2 Pi/n + dna],
Cos[i 2 Pi/n + dna], i 2 m Tan[k] })*1/
4 + {sepF[i, sppos, sppwr]*Sin[i 2 Pi/n + dna],
sepF[i, sppos, sppwr]*Cos[i 2 Pi/n + dna],
i 2 m Tan[k] }]], {i, run}];
text2 = Table[Graphics3D[Text[dnaCode[[i*2 + 1]],
({sepF[i, sppos, sppwr]*Sin[i 2 Pi/n + s 2 Pi/n + dna + Pi],
sepF[i, sppos, sppwr]*
Cos[i 2 Pi/n + s 2 Pi/n + dna + Pi],
i 2 m Tan[k] + s 2 m Tan[k]} - {Sin[i 2 Pi/n + dna],
Cos[i 2 Pi/n + dna], i 2 m Tan[k] })*1/1.5 + {Sin[
i 2 Pi/n + dna], Cos[i 2 Pi/n + dna],
i 2 m Tan[k] }]], {i, run}];
hbond1 = Table[Graphics3D[{
RGBColor[0.95, 0.9, 0.2],
Sphere[({Sin[i 2 Pi/n + s 2 Pi/n + dna + Pi],
Cos[i 2 Pi/n + s 2 Pi/n + dna + Pi],
i 2 m Tan[k] + s 2 m Tan[k]} - {Sin[i 2 Pi/n + dna],
Cos[i 2 Pi/n + dna], i 2 m Tan[k] })*1/2 + {Sin[
i 2 Pi/n + dna], Cos[i 2 Pi/n + dna], i 2 m Tan[k] },
0.03]
}], {i, run}];
hbond2 = Table[Graphics3D[{
RGBColor[0.95, 0.9, 0.2],
Sphere[({Sin[i 2 Pi/n + s 2 Pi/n + dna + Pi],
Cos[i 2 Pi/n + s 2 Pi/n + dna + Pi],
i 2 m Tan[k] + s 2 m Tan[k]} - {Sin[i 2 Pi/n + dna],
Cos[i 2 Pi/n + dna], i 2 m Tan[k] })*1/2.15 + {Sin[
i 2 Pi/n + dna], Cos[i 2 Pi/n + dna], i 2 m Tan[k] },
0.03]
}], {i, run}];
hbond3 = Table[Graphics3D[{
RGBColor[0.95, 0.9, 0.2],
Sphere[({Sin[i 2 Pi/n + s 2 Pi/n + dna + Pi],
Cos[i 2 Pi/n + s 2 Pi/n + dna + Pi],
i 2 m Tan[k] + s 2 m Tan[k]} - {Sin[i 2 Pi/n + dna],
Cos[i 2 Pi/n + dna], i 2 m Tan[k] })*1/1.85 + {Sin[
i 2 Pi/n + dna], Cos[i 2 Pi/n + dna], i 2 m Tan[k] },
0.03]
}], {i, run}];
sp1 =
Table[Graphics3D[{RGBColor[1, .71, 0],
Sphere[{sepF[i, sppos, sppwr]*Sin[i 2 Pi/n + s 2 Pi/n + dna],
sepF[i, sppos, sppwr]*Cos[i 2 Pi/n + s 2 Pi/n + dna],
i 2 m Tan[k] + s 2 m Tan[k]}, dia2]}], {i, run}];
sp2 =
Table[Graphics3D[{RGBColor[1, .71, 0],
Sphere[{sepF[i, sppos, sppwr]*
Sin[i 2 Pi/n + s 2 Pi/n + dna + Pi],
sepF[i, sppos, sppwr]*Cos[i 2 Pi/n + s 2 Pi/n + dna + Pi],
i 2 m Tan[k] + s 2 m Tan[k]}, dia2]}], {i, run}];
hel1 = Table[Graphics3D[{RGBColor[.33, .26, .78], Cylinder[{
{sepF[i - 1, sppos, sppwr]*Sin[i 2 Pi/n + dna],
sepF[i - 1, sppos, sppwr]*Cos[i 2 Pi/n + dna],
i 2 m Tan[k] },
{sepF[i, sppos, sppwr]*Sin[i 2 Pi/n + s 2 Pi/n + dna],
sepF[i, sppos, sppwr]*Cos[i 2 Pi/n + s 2 Pi/n + dna],
i 2 m Tan[k] + s 2 m Tan[k]}},
2 dia]}], {i, run}];
hel2 = Table[Graphics3D[{RGBColor[1, .26, 0], Cylinder[{
{sepF[i - 1, sppos, sppwr]*Sin[i 2 Pi/n + dna + Pi],
sepF[i - 1, sppos, sppwr]*Cos[i 2 Pi/n + dna + Pi],
i 2 m Tan[k] },
{sepF[i, sppos, sppwr]*Sin[i 2 Pi/n + s 2 Pi/n + dna + Pi],
sepF[i, sppos, sppwr]*
Cos[i 2 Pi/n + s 2 Pi/n + dna + Pi],
i 2 m Tan[k] + s 2 m Tan[k]}},
2 dia]}], {i, run}];
codeText = Graphics3D[Text["Code: TACAGCTGAACT", {0, 0, 3 Pi/2}]];
cent =
Graphics3D[{FaceForm[Hue[0.19]],
Cylinder[{{0, 0, 0}, {0, 0, 4}}, 0.01]}];
Show[ser, ser1, hbond1, hbond2, hbond3, text1, text2, sp1, sp2,
hel1, hel2, codeText, ImageSize -> {600, 750},
ViewAngle -> Pi/40, ViewPoint -> {0, 10, 3},
SphericalRegion -> True, Boxed -> False]]
](**EndWith*)
, {t, 0, 1, 0.003}];
All content on this page belongs to Zachary Porter. You may use, reproduce, or modify anything from this website, provided that you give credit to zackporter.com in your usage.