- 790 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 03:34:49 ]
- >>789
せっかく直線描画ルーチンを実装したのに、面倒な方向が好きなやつだね。 Level3,4をどうしてもGraphics#drawLineで描画したいっていうのなら、 zL,zHを、z<=zLで黒(最小輝度)、z>=zHで白(最大輝度)になるようなz座標の値として、 Foo3CanvasやFoo4Canvasの private void drawLine(Graphics g, int x1, int y1, int z1, int x2, int y2, int z2) の中身を、 点(x1,y1,z1)と点(x2,y2,z2)を通る直線と、平面z=zLとの交点(Px,Py,zL)、平面z=zHとの交点(Qx,Qy,zH)を求めて、 Graphics2D g2 = (Graphics2D)g; g2.setPaint(new GradientPaint(Px, Py, Color.black, Qx, Qy, Color.white)); g2.drawLine(x1, y1, x2, y2); で線分を描画するようにすれば、できるような気がする。 z=zLやz=zHに平行な直線の時は交点が求められないけれど、 このときは直線全体が同じz座標の値だから、その値に応じた色をsetColorして単一色の線分を描くだけ。 これで、setPixelとsetLuminanceが不要になる他は変更せずにすむ。 z座標と各点の色との対応関係はGradientPaintによるグラデーション描画の実装に依存するけれど。 まあsetPixel内でfillRectでピクセルを塗るかわりに、 Graphics#drawLineで一点だけの直線を引いてもGraphics#drawLineを使ったことにはなるね。
|

|