给出相关参数怎么画圆锥,圆台?100分求救!!!请说出思路要求是三维的圆锥,圆台。说出二维的思路也行。

解决方案 »

  1.   

    归根结底,既不记得当年写过的,一个点在另一个面的投影?你把这个圆台的描述定一位xyz轴的函数,求他每个电在某一个平面上的投影就行了。
      

  2.   

    我顶!!各位要分的见这个贴子我愿意出500分求这个程序。
    http://expert.csdn.net/Expert/topic/1718/1718546.xml?temp=.9135858
      

  3.   

    TO  citytramper(阿琪) 。。视角可以固定。。
      

  4.   

    chukuang(楚狂) 。。我只有这么多了啊:(
      

  5.   

    citytramper(阿琪) 你好。。我现在把程序的要求重新整理一下:1.程序启动后,让用户选择是画哪类图形:选择画圆锥,圆台,圆柱,正方体,和截面(就是一个圆柱或者锥体被截)这五个图形之一2.根据选择的图形输入相应的画图参数3.根据参数把相应的图形显示出来。
    达到上述基本的要求就行。。视角固定最好有阴影(也就是说要有立体感的意思)。。是我朋友毕业设计用的。。能让老师满意就行。
      

  6.   

    citytramper(阿琪) 你好。。我现在把程序的要求重新整理一下:1.程序启动后,让用户选择是画哪类图形:选择画圆锥,圆台,圆柱,正方体,和截面(就是一个圆柱或者锥体被截)这五个图形之一2.根据选择的图形输入相应的画图参数3.根据参数把相应的图形显示出来。
    达到上述基本的要求就行。。视角固定最好有阴影(也就是说要有立体感的意思)。。是我朋友毕业设计用的。。能让老师满意就行。
      

  7.   

    圆锥:r,h为半径和高,自己给出 我设的是100,200with PaintBox1 do
    begin
      Canvas.Pen.Color:=clblack;             
      canvas.MoveTo(200,250);        //这是自己定义的圆心,你可以根据你的画布大小改 
      //Canvas.Brush.Color:=clBlack;
      //Canvas.Brush.Style:=bsFDiagonal;   // 这两句是画阴影,很丑,你爱要不要
      Canvas.Ellipse(200-r,220,200+r,280);  //画底面的椭圆
      Canvas.Pen.Style:=psDash;
      canvas.MoveTo(200,250);
      Canvas.Arc(200-r,220,200+r,280,200+r,250,200-r,250);  //画底面被挡住的虚线
      canvas.MoveTo(200,250);
      canvas.LineTo(200,250-h);                            //画高
      Canvas.Pen.Style:=psSolid;
      canvas.MoveTo(200-r,250);
      canvas.LineTo(200,250-h);                          //两条测线
      canvas.MoveTo(200+r,250);
      canvas.LineTo(200,250-h);                          //两条测线
    end;清空时PaintBox1.Repaint即可
    看了看,基本上不用什么公式,你会在纸上画就行了,一样的,一笔一笔的画
    圆柱什么的都一样,是在懒的画了,你看懂了这个程序是一样的自己画吧!
      

  8.   

    画的是在不怎么样,不过应付老师应该够了本来还做了个随视角改变,但是实在没什么立体感,丢人!你看看吧增加视角
    r:=r+1;
    h:=h-1;
    aa:=aa+2;
    PaintBox1.Repaint;
    Button1.Click;减少视角
    r:=r-1;
    h:=h+1;
    aa:=aa-2;
    PaintBox1.Repaint;
    Button1.Click;
    这个aa是底面椭圆的高  我设的初值30 ,你也可以自己改这样上面的程序需要把Canvas.Ellipse(200-r,220,200+r,280);  //画底面的椭圆
    Canvas.Arc(200-r,220,200+r,280,200+r,250,200-r,250);  //画底面被挡住的虚线
    改成
    Canvas.Ellipse(200-r,250-aa,200+r,250+aa);
    Canvas.Arc(200-r,250-aa,200+r,250+aa,200+r,250,200-r,250);
      

  9.   

    谢谢 myling(阿德) ,你的方法确实可以但圆柱,圆台和正方体怎么画呢??我刚刚学delphi一星期啊。。很糊涂的。帮人帮到底?
      

  10.   

    圆柱:参数不变with PaintBox1 do
    begin
      Canvas.Pen.Color:=clblack;
      canvas.MoveTo(200,250);        //这是自己定义的圆心,你可以根据你的画布大小改
      //Canvas.Brush.Color:=clBlack;
      //Canvas.Brush.Style:=bsFDiagonal;   // 这两句是画阴影,很丑,你爱要不要
      Canvas.Ellipse(200-r,250-aa,200+r,250+aa);  //画底面的椭圆
      Canvas.Pen.Style:=psDash;
      canvas.MoveTo(200,250);
      Canvas.Arc(200-r,250-aa,200+r,250+aa,200+r,250,200-r,250);  //画底面被挡住的虚线
      Canvas.Brush.Style:=bsClear;
      Canvas.Pen.Style:=psSolid;
      Canvas.Ellipse(200-r,250-aa-h,200+r,250+aa-h);  //画顶面的椭圆
      Canvas.Pen.Style:=psSolid;
      canvas.MoveTo(200-r,250);
      canvas.LineTo(200-r,250-h);                          //两条测线
      canvas.MoveTo(200+r,250);
      canvas.LineTo(200+r,250-h);                          //两条测线
    end;
      

  11.   

    圆台需要改改参数就是 r1,r2 上、下 底面的半径 ,其余不变
    需要注意的是这是你的aa和r2不能太接近,否则就变成圆了,哈
    with PaintBox1 do
    begin
      Canvas.Pen.Color:=clblack;
      canvas.MoveTo(200,250);        //这是自己定义的圆心,你可以根据你的画布大小改
      //Canvas.Brush.Color:=clBlack;
      //Canvas.Brush.Style:=bsFDiagonal;   // 这两句是画阴影,很丑,你爱要不要
      Canvas.Ellipse(200-r1,250-aa,200+r1,250+aa);  //画底面的椭圆
      Canvas.Pen.Style:=psDash;
      canvas.MoveTo(200,250);
      Canvas.Arc(200-r1,250-aa,200+r1,250+aa,200+r1,250,200-r1,250);  //画底面被挡住的虚线
      Canvas.Brush.Style:=bsClear;
      Canvas.Pen.Style:=psSolid;
      Canvas.Ellipse(200-r2,250-aa-h,200+r2,250+aa-h);  //画顶面的椭圆
      Canvas.Pen.Style:=psSolid;
      canvas.MoveTo(200-r1,250);
      canvas.LineTo(200-r2,250-h);                          //两条测线
      canvas.MoveTo(200+r1,250);
      canvas.LineTo(200+r2,250-h);                          //两条测线
    end;
      

  12.   

    立方体和画柱体不一样了需要画平行四边形了需要几个参数,
    h1:立方体的高;h2:底面平行四边形的高;
    l1,l2:底面平行四边形的中心的轴坐标到底边两个端点的距离这几个参数的初值可以根据长(L)宽(W)高(H)和视角(A)求出来h1=H;  h2=W*sin(A); l1=W*cos(A); l2=L-l1     你可以根据给定的长宽高求这些值。
    with PaintBox1 do
    begin
      Canvas.Pen.Color:=clblack;
      canvas.MoveTo(200,250);        //这是自己定义的圆心,你可以根据你的画布大小改
      //Canvas.Brush.Color:=clBlack;
      //Canvas.Brush.Style:=bsFDiagonal;   // 这两句是画阴影,很丑,你爱要不要
      Canvas.Polygon([Point(200-l1,250-(h2 div 2)),Point(200+l2,250-(h2 div 2)),
      Point(200+l1,250+(h2 div 2)),Point(200-l2,250+(h2 div 2)),Point(200-l1,250-(h2 div 2))]);//画底面
      Canvas.Pen.Style:=psDash;
      canvas.MoveTo(200-l1,250-(h2 div 2));
      canvas.LineTo(200-l2,250+(h2 div 2));
      canvas.MoveTo(200-l1,250-(h2 div 2));
      canvas.LineTo(200+l2,250-(h2 div 2));     //画底面被挡住的两条虚线
      canvas.MoveTo(200-l1,250-(h2 div 2));
      canvas.LineTo(200-l1,250-(h2 div 2)-h1);     //画高
      Canvas.Pen.Style:=psSolid;
      canvas.MoveTo(200+l2,250-(h2 div 2));
      canvas.LineTo(200+l2,250-(h2 div 2)-h1);    ////画高
      canvas.MoveTo(200+l1,250+(h2 div 2));
      canvas.LineTo(200+l1,250+(h2 div 2)-h1);    // //画高
      canvas.MoveTo(200-l2,250+(h2 div 2));
      canvas.LineTo(200-l2,250+(h2 div 2)-h1);   //  //画高
      Canvas.Brush.Style:=bsClear;
      Canvas.Polygon([Point(200-l1,250-(h2 div 2)-h1),Point(200+l2,250-(h2 div 2)-h1),
      Point(200+l1,250+(h2 div 2)-h1),Point(200-l2,250+(h2 div 2)-h1),Point(200-l1,250-(h2 div 2)-h1)]);//画顶面
    end;
      

  13.   

    myling(阿德) ( )这样画圆锥恐怕不行吧,实际上看到的地面的椭圆并不是一半,根据视角的变化有变化的,应该是比一半多些