Authorware開發實例:Authorware活塞運動范例地改進
2024-09-08 19:26:06
供稿:網友
摘 要:authorware7.0自帶的piston.a7p是模擬活塞運動效果的范例文件,在國內authorware著作中被廣泛引用。但通過簡單檢測即可發現此范例中活塞位置的確定是錯誤的,違反了活塞運動的一般規律。本文在對活塞運動進行定性分析的基礎上對范例文件提出了簡單而有效的改進方法。關鍵詞:authorware showme piston authorware自帶的showme程序是介紹authorware設計技術的范例文件,通過學習這些范例,可以領悟到authorware的高級應用技術和編程技巧。其中piston.a7p是authorware7.0提供的一個模擬曲柄與活塞將直線運動轉化為圓周運動的例子。在這個例子中,編程人員使小球通過運動圖標沿一個圓周路徑移動,而活塞在縱方向上不產生移動,其橫坐標由如下表達式決定: sqrt((displayx@”ball”-pistonwidth)**2+(displayy@”ball”-pistony)**2)-50 這個范例文件從authorware5.0開始,歷經幾個版本,并且在國內許多authorware著作中被奉為經典廣泛引用。然而筆者偶然通過trace函數和控制面板觀察發現其連桿長度其實是一個不斷變化的值(如下圖所示),這顯然不符合活塞運動的規律,同時說明活塞位置的確定存在錯誤。 下面通過簡單的數學分析探討活塞和小球之間位置變化的關系,假設活塞與小球的初始位置如下所示:(小黑塊為活塞,右側圓周為小球的運動路徑,a是連桿長度。) 則當活塞運動一個數值x時,小球的位置應為以活塞頂點為圓心(活塞寬度為b),以連桿長度a為半徑所畫的圓與小球運動圓周相交的點a,如下圖所示: 顯然a點坐標(x2,y2)滿足下列方程: 其中(x0,y0)(x1,y1)分別是活塞坐標和小球運動圓周的圓心坐標,c是小球運動圓周的半徑,y0=y1。求解方程,得出: x2= y2= 通過以上定性分析就可以對authorware自帶的piston.a7p進行改進,讓它完成真正的活塞運動了。這里我們以活塞位置為基準利用上述公式確定小球的位置,避免了因小球運動圓周繪制帶來的影響。為了方便演示,我們將變量進行初始化賦值:a=74, b=48, x0=26, y0=y1=132, x1=158, c=34,筆者這里的賦值是參考authorware源文件得出的,你也可以任意修改。但要注意,連桿長度一定要大于小球運動圓周的半徑,最好大于其直徑。下面開始對piston.a7p進行改進。首先修改draw and move組圖標中的兩個運動圖標屬性為指向固定點運動,活塞坐標為(x0+step,y1),小球坐標為(x2,y2),然后修改increment計算圖標內容為: step:=step+direction*reverse ――使活塞的運動方向受兩個變量控制 x2:=sqrt((74**2-34**2+158**2-(50+step)**2)/(2*(108-step)) ) y2:=132-sqrt(74**2-(x2-50-step)**2)*direction if step>=68|step<=0 then direction:=-direction ――使活塞運動到兩側后反向 end if 最后修改perpetual button按鈕交互中計算圖標內容為: reverse:=-reverse ――reverse是控制活塞反向運動的變量,初值為1。至此修改完畢,再用trace函數和控制面板觀察,連桿長度始終為一個固定值