立方体和画柱体不一样了需要画平行四边形了需要几个参数, 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;
http://expert.csdn.net/Expert/topic/1718/1718546.xml?temp=.9135858
达到上述基本的要求就行。。视角固定最好有阴影(也就是说要有立体感的意思)。。是我朋友毕业设计用的。。能让老师满意就行。
达到上述基本的要求就行。。视角固定最好有阴影(也就是说要有立体感的意思)。。是我朋友毕业设计用的。。能让老师满意就行。
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即可
看了看,基本上不用什么公式,你会在纸上画就行了,一样的,一笔一笔的画
圆柱什么的都一样,是在懒的画了,你看懂了这个程序是一样的自己画吧!
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);
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;
需要注意的是这是你的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;
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;