DNA的三維可視化:通過OpenGL實現一個DNA鏈

jopen 10年前發布 | 19K 次閱讀 OpenGL

        英文原文:DNA Visualisation in 3D  Coding a DNA strand using OpenGL.

        我最近在 Coursera 上開始了一門課程(數據庫和算法,順便提一句,這是普林斯頓大學開設的一門很牛的課程)。現在上了幾次課,我發現這些編程課都相當困難,我的(自我緩解編程困難的)方法則是在 OpenGL 上編一些小東西來減壓。

        做三維模型編程最棒的一點就是你可以看到你代碼的成果(這也是編程的一個動機)。3D 編程是一個很強大的可視化工具,通過編碼實現 DNA 的結構是一個有趣并且富有挑戰性的任務。其具有挑戰性主要是因為 OpenGl 代碼所帶來的局限性。我相信 DNA 結構在數學方面的實現是很簡單的。

        關于代碼和 DNA 結構

        1. DNA 是雙螺旋結構,有個帶狀結構從不同的角間距中連接著這兩個螺旋。我用 GL_QUADS 來繪制兩股螺旋和其中的帶子。這些四邊形的坐標可以通過以下方式來獲得:

x1 = 40*cos (angle*GL_PI/180);
z1 = 40*sin (angle*GL_PI/180);
x2 = 40*cos ((angle+10)*GL_PI/180);
z2 = 40*sin ((angle+10)*GL_PI/180);

        頂點的輸入則是(10 是雙螺旋帶的寬度)——

glVertex3f (x1 , yOld1 , z1);
glVertex3f (x1 , yOld1+10 , z1);
glVertex3f (x2 , yNew1+10 , z2);
glVertex3f (x2 , yNew1 , z2);

        而b/w yOld1 和 yNew1 之間的關系表達式如下:

yNew1 = yOld1+3;

        2. 對于連接兩個螺旋帶的中間的帶狀,我用了 C++ 中的結構體數組來存儲x,y和z的值,它們相應的點都對應在兩個螺旋帶的連接點上,它們也是通過 GL_QUADS 來連接的。之后通過一個簡單的”for“循環來連接它們。

struct strand
 {
 float x ;
 float y;
 float z;
 };

        我已經分別采取了 +60 和-60,+120 和-120 度的連接角,因此無論何時,在第一個螺旋上的經過角都為 60 度或 60+360n 度,或者第二個角上的 120+360n 度。我已經將x,y和z的對應值加到結構數組中去了。

        之后一個簡單的 for 循環將連接x,y和z與 GL_QUADS 來完成工作。

        如果你想了解關于 DNA 鏈的顏色或是照明的信息,它是用(GL_DIFFUSE)分配給雙螺旋和帶子的一些材質。

        下面是一些截圖:

DNA的三維可視化:通過OpenGL實現一個DNA鏈

DNA的三維可視化:通過OpenGL實現一個DNA鏈

DNA的三維可視化:通過OpenGL實現一個DNA鏈

DNA的三維可視化:通過OpenGL實現一個DNA鏈

        (分別為縮小圖和特寫圖)

        條帶數可以通過增加n的值,減小連接角來一直增加,其中的n代表的就是條帶的數目。

        與此相關的也有許多很有趣,我想我將會嘗試在某天做一個由球面(表示實際分子)組成的相同的 DNA。

        完整的代碼將很快傳到 GitHub 上!

        更新——代碼已經上傳了,鏈接是:https://github.com/soumitrasaxena/DNA

        翻譯: 伯樂在線 - 卷卷怪

        譯文鏈接: http://blog.jobbole.com/67260/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!