0

現在のプログラムでは、「DNA シェイプ」を描画できるようにしたいと考えています。画面にピクセルを描画できる "DrawPixel(x,y,r,g,b)" 関数を作成しました。この時点から、ブレゼンハム ライン アルゴリズムを実装して、 「DrawLine(x1,y1,x2,y2,r,g,b)」として線を描画しました。

ここで、DNA 形状に画像を使用することは (複数の面で) 非常に悪い選択であることに気付きました。そこで、DNAの形を描く関数を作ってみました(アルゴリズムが見つからなかったので)。これは現在、円描画アルゴリズム ( Midpoint Circle Algorithm )に基づいています。

void D3DGHandler::DrawDNAShape(int x1, int y1, int length, int curves, int dir 
                               int off, int r, int g, int b){
     int x2Pos = sin(dir)*length+x1;
     int y2Pos = cos(dir)*length+y1;


     for (int i = 0; i < curves; i++) {
          int xIncrease = (x2Pos / curves) * i;
          int yIncrease = (y2Pos / curves) * i;

          int rSquared = off * off;
          int xPivot = (int)(off * 0.707107 + 0.5f);
          for (int x = 0; x <= xPivot; x++) {
               int y = (int)(sqrt((float)(rSquared - x*x)) + 0.5f);
               DrawPixel(x1+x+xIncrease,y1+y+yIncrease,r,g,b);
               DrawPixel(x1-x+xIncrease,y1+y+yIncrease,r,g,b);
               DrawPixel(x1+x+xIncrease,y1-y+yIncrease,r,g,b);
               DrawPixel(x1-x+xIncrease,y1-y+yIncrease,r,g,b);
               DrawPixel(x1+y+xIncrease,y1+x+yIncrease,r,g,b);
               DrawPixel(x1-y+xIncrease,y1+x+yIncrease,r,g,b);
               DrawPixel(x1+y+xIncrease,y1-x+yIncrease,r,g,b);
               DrawPixel(x1-y+xIncrease,y1-x+yIncrease,r,g,b);
          }
     }
}

この実装により、現在、私が探していなかった完全に新しい機能が得られます。

次の行に沿って:

DrawDNAShape()

どなたか教えていただけるととても嬉しいです!

アップデート

期待される結果:

期待される結果

しかし、その後はより線のようになります。

4

1 に答える 1

2

オフセットを使用して 2 つの正弦波グラフを描画すると、必要な形状が得られます。

例えば。Rで

x=(1:100)/10.0
plot(sin(x),x)
points(sin(x+2.5),x)
于 2013-04-22T21:10:08.683 に答える