烟囱吊篮 编程巧画烟囱弯脖平面



一、原起

我姥爷是远近闻名的铁皮匠,手艺那没得说,白铁皮到了他手里,锅窝瓢盆没有做不出的。去年春节时在我家住了几天,给我出了道不大不小的难题:烟囱弯脖处的图怎样画呢?我想这问题不太简单了嘛!我用纸笔涂糊了半天,将两部分三接五拼,看起来象是解决了但将两截纸筒接在一起就出问题,费了九牛二虎之力,终于是没搞出来。姥爷说:你虽然上过大学,但也不是什么问题都能解出来,我们老铁皮匠中,100人当中,也就能有一个将它画出来。我还是有点不服,但不服也没办法,还是没能解出来。眨眼一年快过去了,八月十五中秋节又到了,阵阵凉意袭来,又快到用烟囱的时候了,怎样将这一“高难”课题解决呢?用了一个晚上,终于还是通过电脑将这一难题搞定!

二、解题

图1

我们先再次审视一下这个弯脖!烟囱弯脖问题实质上是两个圆筒交叉形成的(如图1左图所示),两个交叉的烟囱一样粗细,又垂直相交,交叉面是个椭圆,且同每个烟囱都呈45度的角。我们可找两截粉笔或其它的东东磨掉一部分看一下,问题的难点不在此处,交叉处是个椭圆,这谁都知晓,那难点在哪里呢?

难点在于要将这个截开的面放在一个平面上,因为卷烟囱是通过铁皮卷起来的,而不是两根钢管焊起来的。所以牢记:我们要的是平面图。问题的难度正在于此。

怎样将这个平面图做出呢?

图2

两节烟囱模样是一样的,我们将其中的一部分拿开了,因为两部分是相似的,所以我们只要研究一部分就可以了,在这一部分中,由于两半是相似的,我们只要研究其中的一半就行了(如图2阴影所示),我们的工作事实上就是将阴影部分展开成一个平面。

我们就以这部分为例加以说明。

要展开阴影,纯圆形的部分是容易算的,展开后是一条直线,长度为πr,难点就在于要展开椭圆的部分,其一定不是一条直线,或者说是一条我们并不确定的曲线,怎样展开呢?因为圆上的各点和椭圆上的各点有种一一对应关系,由此,我们可以圆为参照物,将椭圆展开。

图3

展开的过程中我们遵循由易到难的原则:最容易展开的是两个点,C和B(如图3示),C展开后还在原地(用C’表示),仍旧是0,最长的部分是和B对应的椭圆上的点B’正好到B点的距离是2r,它们对应于半圆展开后的0和πr位置(如图3所示)。另外还有一个位置也值得我们关注,即1/4圆的位置,展开后长度是πr/2,此时的角正好是一个直角,其组成一个正方形ODEO’,我们容易得出此时对应于此处圆弧的椭圆上的点在E’处,长度是r。

但是这是三个非常特殊的点,不具备一般性,直角的位置虽不具有一般性,但这种做法给出了我们一种找出对应点的方法:

找到具一般性的点,在半圆弧上任取一点W,对应的角为θ,现在有好戏看了!

M点对应的弧长即θr,而和W对应的椭圆上的点在哪里呢?关键是求其长度,而这个长度正是KM(图3示),KM长度是多少呢?直接求不好求,但我们可以利用长方形WMNK来将问题转化,MN和KW长度相同,因为两个交叉面是45度角,所以KM的长度和MC相同,也就是:r-rcosθ。这样,这个问题就从理论上解决了,我们尽量多地取θ的不同值,通过描点的方法,平面图也就有了。

所以其中的重点问题是角θ和所处的正方形及三角形形成的各种关系上(如图3示)。

有了上面的解释,下面我们可以编程解题了。

三、编程

做平面图实质上是通过描点的方式来完成的一个近似图。首先将圆的一半展开,因为交叉面椭圆的点和圆上的点有一一对应的关系,以圆为蓝本,我们就可通过取值计算其垂直距离得到,每一个交叉点要用到两个数据,到C点的距离,也即圆弧长,另一个是两截面上对应两点的距离,图越准确,要取点数越多。因为π的值为3.14,我们可以取314个点来做出这个图形,加上开始的0位置,一共315个点,这么多的点,最好通过数组来完成,因为一个点要用两个值,所以可通过二维数组来完成。定义二维数组a(1,314),其中a(0,0)-a(0,314)表示在圆弧上取得的点到C的距离,而a(1,0)-a(1,314)表示圆弧上的某点到椭圆截面的距离。而我们做图,可以充分利用上述两数组中的数据。

四、界面源程序

界面比较简单,建立一个标准EXE工程,在窗体中放入一个按钮,一个标签,两个文本框和一个图片框。按钮用来控制代码执行,标签起到说明的作用,文本框一个用来调整半径r的大小,另一个则用来输出对应的各数值对。图片框用来输出其图象。

图4

 

源程序及解释如下:

Dim a(1, 314) As Double

Dim r As Long 半径

Private Sub CmdCalcu_Click() 计算并画图

 Dim i, j As Integer

  Picture1.Cls

r = Val(TxtNumber.Text) 输入半径值(毫米为单位)

 If r = 0 Then r = 100

  For i = 0 To 314 ‘计算到K点的距离

     a(0, i) = i * r / 100

  Next i

  For i = 0 To 314’计算机圆到截面距离

     a(1, i) = r - Cos(i / 100) * r

  Next i

  TxtListnum.Text = ""

‘在文本框中输出几组值

For i = 0 To 314 Step 10

  TxtListnum.Text = TxtListnum.Text + "第" + Str(Int(i / 10) + 1) + "组:" + Str(a(0, i)) + "" + Str(a(1, i)) + vbCr + vbLf

Next i

For i = 0 To 314 Step 1 左半边图片框

  Picture1.Line (10 + a(0, i), 10)-(10 + a(0, i), 10 + a(1, i)), vbBlue

Next i

For i = 314 To 0 Step -1 右半边图片框

    Picture1.Line (10 + 314 * r / 100 + a(0, i), 10)-(10 + 314 * r / 100 + a(0, i), 10 + a(1, 314 - i)), vbRed

Next i

End Sub

(上程序在VB60中文企业版、win2000下调试通过)

五、小结

一个难倒多少人的小题通过电脑就这样轻松解决了。其实这里面也没有什么高深的知识,关键是数据多比较麻烦。我姥爷那代人没赶上电脑,我们有了电脑,对生活中的问题稍加注意,就可以用上了!留心生活,到处是编程的素材。

最后加上句:谢谢电脑,谢谢姥爷!

另类解法:

当然,进一步地,我们还可推导出这条曲线的函数公式:y=r-rcos(x/r),利用这个公式,可以写出更加简洁的程序!

 烟囱吊篮 编程巧画烟囱弯脖平面

Private Sub CmdDraw2_Click() 第二种方法绘制

Picture1.Cls

 Dim x As Double

 r = Val(TxtNumber.Text) 输入半径值(毫米为单位)

 If r = 0 Then r = 100

 

 For x = 0 To 6.28 * r Step 0.01

   Picture1.PSet (10 + x, r - r * Cos(x / r) + 10), vbBlue ‘通过描点的方法绘制

 Next x

 Picture1.Line (10, 10)-(10, 310), vbBlue

 Picture1.Line (10 + 2 * 3.14 * r, 10)-(10 + 2 * 3.14 * r, 310), vbBlue

 Picture1.Line (10, 310)-(10 + 2 * 3.14 * r, 310), vbBlue

End Sub

  

爱华网本文地址 » http://www.aihuau.com/a/9101032201/422089.html

更多阅读

不同脸型适合画眉方法,详解眉毛的画法 方脸型画眉

?特写看一下...  对于圆脸型的妹子来说,需要有一些角度的眉毛,把眉峰吊起来,让脸型看起来更有棱角一些~对于下巴比较宽或者太阳穴比较窄的妹纸,美貌的形状要大气自然,而且要适当的短一些,并且加重眉头部分不同脸型适合画眉方法,详解

高空作业吊篮安全规范 吊篮安全操作规程

高处作业吊篮安全规则JGJ 5027-19921992-01-01实施1 主题内容与适用范围本标准规定了高处作业吊篮(以下简称吊篮)的设计、制造、安装、使用、维修保养等方面的安全要求。本标准适用于常设的或非常设的,其安装方式为有轨式或无轨式,提升方式

壁炉烟囱安装方法 壁炉烟囱

壁炉烟囱安装方法:如果要使用房间原有的壁炉烟道,壁炉应该用一个与壁炉烟管相同直径的不锈钢烟管或是铸铁烟管接到烟囱并确保密封。烟囱

烟囱高度的设计 废气排放烟囱高度标准

烟囱高度的设计 (一)烟囱高度的计算确定烟囱高度,既要满足大气污染物的扩散稀释要求,又要考虑节省投资;最终目的是保证地面浓度不超过《大气环境质量标准》规定的浓度限值。烟囱高度的计算方法,目前应用最普遍的是按高斯模式的简化公式

声明:《烟囱吊篮 编程巧画烟囱弯脖平面》为网友蓝色透彻分享!如侵犯到您的合法权益请联系我们删除