• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      采用Autolisp語言生成平面與圓錐截交線的二次開發(fā)

      2019-10-23 02:40:06張曉彬
      關(guān)鍵詞:交線繪圖視圖

      張曉彬

      (漳州職業(yè)技術(shù)學(xué)院 機械工程系,福建 漳州 363000)

      AutoCAD 作為通用繪圖軟件,廣泛應(yīng)用于機械、建筑、電氣等領(lǐng)域。 但是,在專業(yè)性較高的專門應(yīng)用領(lǐng)域的適用性較差。 為了提高繪圖效率,可以借助二次開發(fā)來擴展繪圖功能并提高繪圖效率。 Autolisp 語言內(nèi)嵌于AutoCAD 軟件,可以和AutoCAD 軟件的繪圖軟件命令有機結(jié)合,能夠有效地提高AutoCAD 軟件的智能化和適用性[1]。

      1 平面與圓錐截交線的常規(guī)畫法

      平面與立體產(chǎn)生的交線稱為截交線。 根據(jù)平面與圓錐軸線之間的相對位置不同,可產(chǎn)生5 種不同類型的截交線。 其中,當截平面平行于一條素線時,截交線的形狀為拋物線;當截平面平行于軸線時,截交線的形狀為雙曲線。

      在AutoCAD 繪圖中,表1 中的前3 種類型可以借助軟件內(nèi)置命令直接進行精確繪制。 對于后面2種類型,需要繪制二次圓錐曲線,無法通過軟件內(nèi)置命令直接完成。 需要借助緯圓法(或素線法),求出若干個特殊點和一般位置點,再利用樣條曲線命令進行擬合完成具體如圖1 所示。

      表1 平面與圓錐截交線類型

      圖1 利用緯圓法求截交線

      2 利用Autolisp程序快速生成方法

      通過緯圓法(或素線法)繪制截交線,需要重復(fù)做出不同位置的緯圓,并根據(jù)投影規(guī)律求出截交線上的點的側(cè)面投影,效率低下,且無法重新利用[2-3]。 基于緯圓法的思想,本文提出一種使用Autolisp 繪制截交線的算法,實現(xiàn)可以重復(fù)運行的功能,進而達到提高繪圖效率的目的。

      根據(jù)給定的三視圖進行特征點識別,主視圖的三個特征點分別標識為P1、P2、P3;左視圖的3 個特征點分別標識為P4、P5、P6,截平面在主視圖所積聚的直線端點分別標識為P7、P8;俯視圖的特征點(圓心)標識為 P9。

      2.1 截交線為拋物線的繪制方法

      基于緯圓法,繪制截交線為拋物線的三視圖的算法描述如下。

      步驟1:根據(jù)P7、P8與P1、P2,判斷截平面直線是否與素線平行,如果是,執(zhí)行步驟2。

      步驟2:根據(jù) P7、P3、P8,使用 pline 命令,重新繪制得到新的主視圖。

      步驟3:利用car 函數(shù)求出P1和P7的X 軸坐標值,相減得到的絕對值為dis1,并利用勾股定理求出 dis2。 兩次利用 polar 函數(shù)求出 P10、P11。 根據(jù) P9、P10、P11分別繪制出俯視圖的圓弧和直線。

      步驟4:利用polar 和inters 函數(shù)求出P1所在鉛垂線與直線的交點 P32,再利用 car、cadr、list 函數(shù)求出的中點P33。根據(jù)P33,利用polar、inters 函數(shù)求出distance 函數(shù)求出P33所在緯圓與的交點,并求出緯圓的半徑radius。

      步驟5:利用 car 函數(shù),根據(jù) P1、P33的 X 軸坐標求出 dis3。 根據(jù) radius 和 dis3,利用勾股定理求出 dis4。根據(jù) P9、dis3、dis4,兩次利用 polar 函數(shù)求出 P12、P13。 根據(jù)步驟 4-5 的方法,分別求出 P14、P15、P16、P17。

      步驟6:根據(jù) list、car、cadr 函數(shù)求出 P8的 X 坐標、P9的 Y 坐標,得到 P18。

      步驟7:利用 spline 命令,順次連接 P10、P12、P14、P16、P18、P17、P15、P13、P11,最終得到截交線在水平面的投影,并到新的俯視圖。

      步驟8:利用polar 函數(shù)和inters 函數(shù),計算得到直線與P4所在鉛垂線的交點P38。

      步驟9:利用 polar 函數(shù),根據(jù)P38及dis2,求出 P10和 P11在左視圖的坐標。

      步驟10:利用 polar 函數(shù),根據(jù) P38及 dis4,求出 P12。 利用 car 函數(shù)獲得 P12的 X 軸坐標,cadr 函數(shù)獲得P27的Y 軸坐標。根據(jù)獲得的X 軸坐標、Y 軸坐標、Z=0.0,用list 函數(shù)構(gòu)造出P12在左視圖的坐標。用相同的方法,求出P13的坐標。

      步驟11:利用步驟 3 的方法,分別求出 P14、P15、P16、P17、P18。

      步驟12:利用 spline 命令,順次連接 P10、P12、P14、P16、P18、P17、P15、P13、P11,繪制出截交線在側(cè)面的投影。

      步驟13:進行修剪,并用erase 命令刪除求圖形,最終得到完成的圖形。

      2.2 截交線為雙曲線的繪制方法

      基于緯圓法,繪制截交線為雙曲線的三視圖的算法描述如下。

      步驟1:根據(jù)P7、P8判斷截交線直線是否為軸線平行。 是,執(zhí)行步驟2。

      步驟2:根據(jù) P7、P8、P3、P1,使用 pline 命令繪制主視圖。

      步驟3:利用car 函數(shù),分別P1P7的X 軸坐標,相減得到的絕對值為dis1。 根據(jù)勾股定理,計算出dis2。

      步驟4:根據(jù) P9、dis,利用 polar 函數(shù),求出輔助點 P31。 再根據(jù)輔助點 P31、dis2,利用 polar 函數(shù),分別求出 P10和 P11。

      步驟5:以 P9(圓心)、P10、P11為參數(shù),使用 arc 命令繪制出圓??;以 P10、P11為端點,繪制出直線,從而繪制出完整的俯視圖。

      步驟 7:根據(jù) polar、inters 函數(shù),計算出直線的中點 P34,根據(jù) dis2,計算出 P10、P11。

      步驟8:根據(jù)P33,polar 函數(shù)和inters 函數(shù),計算出 P33所在緯圓與素線交點的 P12、P13。 根據(jù)P12、P13,利用distance 函數(shù)計算出緯圓的半徑radius。 根據(jù)勾股定理,計算出dis3。

      步驟9:利用car 函數(shù)獲得 P4的 X 軸坐標,cadr 函數(shù)獲得P33的 Y 軸坐標。根據(jù)獲得的 X 軸坐標、Y軸坐標、Z=0.0,用list 函數(shù)構(gòu)造出P33在左視圖的坐標。

      步驟10:根據(jù)P33、dis2,利用polar 函數(shù),分別計算出P12、P13在左視圖的投影坐標。根據(jù)相同方法分別計算出 P14、P15、P16、P17。

      步驟11:利用car 函數(shù)獲得P4的X 軸坐標,cadr 函數(shù)獲得P7的Y 軸坐標。 根據(jù)獲得的X 軸坐標、Y 軸坐標、Z=0.0,用 list 函數(shù)構(gòu)造出 P18的坐標。

      步驟 12:利用 spline 命令,順次連接 P10、P12、P14、P16、P18、P17、P15、P13、P11,繪制出截交線在側(cè)面的投影。

      3 程序?qū)崿F(xiàn)的關(guān)鍵技術(shù)

      根據(jù)上述提出的算法,用Autolisp 語言編寫實現(xiàn)繪圖的程序,部分代碼如下。

      3.1 平面平行于素線的情況

      (if (or (< (abs (- (angle pt7 pt8) (angle pt1 pt2))) 0.000001) (< (abs (- (abs (- (angle pt7 pt8) (angle pt1 pt2))) pi)) 0.000001))//判斷平面是否與直線平行

      (setq dis1 (- (car pt1) (car pt7)))

      (setq dis2 (sqrt (- (* radius radius) (* dis1 dis1))))

      (setq pt31 (polar pt9 pi dis1))

      (setq pt10 (polar pt31 (* 0.5 pi) dis2))

      (setq pt11 (polar pt31 (* 1.5 pi) dis2))

      …………

      (setq pt32 (polar pt1 (* 1.5 pi) 10))

      (setq pt32 (inters pt1 pt32 pt7 pt8 nil))

      (setq pt33 (list (* 0.5 (+ (car pt32) (car pt7))) (* 0.5 (+ (cadr pt32) (cadr pt7))) 0.0))

      (setq pt34 (polar pt33 0 10))

      (setq pt35 (inters pt33 pt34 pt1 pt2 nil))

      (setq pt36 (inters pt33 pt34 pt1 pt3 nil))

      (setq radius (* 0.5 (distance pt35 pt36)))

      (setq dis3 (- (car pt1) (car pt33)))

      (setq dis4 (sqrt (- (* radius radius) (* dis3 dis3))))

      (setq pt37 (polar pt9 pi dis3))

      (setq pt12 (polar pt37 (* 0.5 pi) dis4))//獲得P12 在俯視圖的坐標

      (setq pt13 (polar pt37 (* 1.5 pi) dis4))//獲得P13 在俯視圖的坐標

      …………

      (command "spline" pt10 pt12 pt14 pt16 pt18 pt17 pt15 pt13 pt11 "" "" "")//根據(jù)獲得的關(guān)鍵點繪制截交線

      (setq pt38 (polar pt4 (* 1.5 pi) 10))

      (setq pt38 (inters pt4 pt38 pt5 pt6 nil))

      (setq pt10 (polar pt38 pi dis2))//獲得P10 在左視圖的坐標

      (setq pt11 (polar pt38 0 dis2)))//獲得P11 在左視圖的坐標

      (setq pt12 (polar pt38 pi dis4)))

      (setq pt12 (list (car pt12) (cadr pt33) 0.0))//獲得P12 在左視圖的坐標

      (setq pt13 (polar pt38 0 dis4))

      (setq pt13 (list (car pt13) (cadr pt33) 0.0))//獲得P13 在左視圖的坐標

      (setq pt18 (list (car pt4) (cadr pt8) 0.0))//獲得P18 在左視圖的坐標

      …………

      (command "spline"pt10 pt12 pt14 pt16 pt18 pt17 pt15 pt13 pt11 "" "" "")//根據(jù)獲得的關(guān)鍵點繪制截交線

      3.2 平面平行于軸線的情況

      (if(or (= (angle pt7 pt8) (* 0.5 pi)) (= (angle pt7 pt8) (* 1.5 pi))//判斷平面與軸線是否平行

      …………

      (setq pt31 (polar pt7 (* 1.5 pi) (* 0.25 dis3)))

      (setq pt32 (polar pt7 (* 1.5 pi) (* 0.5 dis3)))

      (setq pt33 (polar pt7 (* 1.5 pi) (* 0.75 dis3)))

      (setq pt34 (polar pt4 (* 1.5 pi) 10))

      (setq pt34 (inters pt4 pt34 pt5 pt6 nil))

      (setq pt10 (polar pt34 pi dis2))//獲得P10 在左視圖的坐標

      (setq pt11 (polar pt34 0 dis2))//獲得P11 在左視圖的坐標

      (setq pt35 (polar pt33 0 10))

      (setq pt12 (inters pt33 pt35 pt1 pt2 nil))

      (setq pt13 (inters pt33 pt35 pt1 pt3 nil))

      (setq radius (* 0.5 (distance pt12 pt13)))

      (setq dis3 (sqrt (- (* radius radius) (* dis1 dis1))))

      (setq pt33 (list (car pt4) (cadr pt28) 0.0))

      (setq pt12 (polar pt33 pi dis3))//獲得P12 在左視圖的坐標

      (setq pt13 (polar pt33 0 dis3))//獲得P13 在左視圖的坐標

      4 應(yīng)用舉例

      已知三視圖,利用該程序分別求出2 種不同情況的截交線,生成效果如圖2 所示。

      圖2 生成效果圖

      5 結(jié)語

      手工繪圖、AutoCAD 輔助作圖的方法都需要重復(fù)多次運用緯圓法,確定截交線上的特殊點,再對所得到的特殊點進行擬合,效率比較低下?;诰晥A法的思想,利用Autolisp 語言,快速確定特殊點,并利用AutoCAD 內(nèi)置的spline 命令直接生成所需的二次圓錐曲線,有效地提高了AutoCAD 的智能化和適用性。

      猜你喜歡
      交線繪圖視圖
      來自河流的你
      中國三峽(2022年7期)2022-12-02 05:28:02
      “禾下乘涼圖”繪圖人
      球面與簡單多面體表面交線問題探究
      平面體截交線邊數(shù)和頂點數(shù)的計算模型研究
      基于HTML5 Canvas繪圖技術(shù)應(yīng)用
      電子測試(2018年4期)2018-05-09 07:28:32
      5.3 視圖與投影
      視圖
      Y—20重型運輸機多視圖
      SA2型76毫米車載高炮多視圖
      柱錐面交線研究
      进贤县| 岢岚县| 丽江市| 楚雄市| 远安县| 镇巴县| 江阴市| 永兴县| 安远县| 东港市| 鹿泉市| 澳门| 松溪县| 景德镇市| 梧州市| 永修县| 台东市| 宜兰县| 繁昌县| 夏河县| 大兴区| 马龙县| 江西省| 松桃| 高唐县| 铜梁县| 建瓯市| 曲阳县| 涟源市| 上杭县| 麻江县| 周至县| 西乌珠穆沁旗| 武清区| 大同县| 革吉县| 南平市| 兴海县| 水城县| 安达市| 和林格尔县|