<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                **任意軸算法** 官方文檔 https://help.autodesk.com/view/OARX/2019/ENU/?guid=GUID-E19E5B42-0CC7-4EBA-B29F-5E1D595149EE 其大體意思是說: 任意軸算法 被用于在autocad程序內部,用來產生對象坐標系(ocs)的。 給定一個單位向量,任意軸算法可以生成一個坐標系。 算法具體如下:(所有向量位于三維空間,用世界坐標表示) N--給定的單位向量 Nx--N的x軸分量 Ny--N的y軸分量 Wy--世界坐標系的y軸方向向量,當然是(0,1,0) Wz--世界坐標系的z軸方向向量,當然是(0,0,1) Ax--新坐標系的x軸向量 Ay--新坐標系的y軸向量 Az--新坐標系的z軸向量 ~~~ 新坐標系原點為(0,0,0) Az=N If (abs (Nx) < 1/64) and (abs (Ny) < 1/64)?then Ax = Wy X N?( “X” 表示向量叉乘). Otherwise, Ax = Wz X N. 將 Ax 規范化為單位向量. Ay = N X Ax. 將 Ay 規范化為單位向量 ~~~ 任意軸算法的lisp實現 ``` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;任意軸算法的lisp實現,來自http://bbs.mjtd.com/forum.php?mod=viewthread&tid=99954&highlight=trans ;;OCS的變換矩陣,或叫法線矢量的變換矩陣 (defun OcsMatrix (zdir / xdir) (or (equal 1.0 (distance '(0 0 0) zdir) 1e-8) (setq zdir (Normalize zdir)) ; 先把矢量單位化。 ) (if (and (< (abs (car zdir)) 0.015625) ; 如果(abs (Nx) < 1/64) (< (abs (cadr zdir)) 0.015625) ; 且 (abs (Ny) < 1/64) ) (setq xdir (Normalize (CrossProduct '(0 1 0) zdir))); Ax = Wy X N (叉積) (setq xdir (Normalize (CrossProduct '(0 0 1) zdir)));否則 Ax = Wz X N。 ) (list xdir (Normalize (CrossProduct zdir xdir)) zdir) ;Y方向滿足右手型坐標系統 ) ;; CrossProduct ;; Returns the cross product (vector) of two vectors ;; Arguments : two vectors ;; 兩個矢量的叉積,參數兩個矢量,返回值一個矢量. (defun CrossProduct (v1 v2) (list(\- (\* (cadr v1) (caddr v2)) (\* (caddr v1) (cadr v2))) (\- (\* (caddr v1) (car v2)) (\* (car v1) (caddr v2))) (\- (\* (car v1) (cadr v2)) (\* (cadr v1) (car v2))) ) ) ;; Normalize ;; Returns the single unit vector ;; Argument : a vector ;; 把一個矢量單位化. (defun Normalize (v) ( (lambda (l) (if (/= 0 l) (mapcar (function (lambda (x) (/ x l))) v) ) ) (distance '(0 0 0) v) ) ) ;; Apply a transformation matrix to a vector by Vladimir Nesterovsky (defun mxv (m v) (mapcar (function (lambda (r) (apply '+ (mapcar '\* r v)))) m) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ``` 驗證上述算法的正確性 思路:給定一個向量normal,用任意軸算法生成normal對應的坐標系cs1 用trans函數 將任意點,從normal對應的ocs(通過系統的任意軸算法生成)變換到cs1,如果點坐標沒有變化,說明 normal對應的ocs和任意軸算法給出的cs1是相同的,也就說明我們的任意軸算法和系統的任意軸算法是功能一致的。 驗證用到的函數 ``` ;;;;;;;;;;;;;;;;;;;;;;; ;by 鳥哥qq1833183060 ;驗證任意軸算法 OcsMatrix 的正確性 ;normal 為任意向量 (defun OcsMatrix-test (normal / ent ocsvector) (setq oldosmode (getvar "osmode")) (setvar "osmode" (logior (getvar "osmode") 16384)) (setq pt (list 1 1 1)) (command "ucs" "") (setq ocsvector (OcsMatrix normal)) (princ ocsvector) (command "ucs" "3p" "0,0,0" (car ocsvector) (cadr ocsvector) ) (setq pt2 (trans '(0 0 1) normal 1)) (princ "\\n(0 0 1)變換后坐標是:") (princ pt2) (setq pt2 (trans '(1 0 0) normal 1)) (princ "\\n(1 0 0)變換后坐標是:") (princ pt2) (setq pt2 (trans '(0 1 0) normal 1)) (princ "\\n(0 1 0)變換后坐標是:") (princ pt2) (setvar "osmode" oldosmode) (princ) ) ``` 執行:(ocsmatrix-test (list 20 33 880)) 結果: (0 0 1)變換后坐標是:(7.70372e-034 1.38778e-017 1.0) (1 0 0)變換后坐標是:(1.0 -5.55112e-017 3.46945e-018) (0 1 0)變換后坐標是:(5.55112e-017 1.0 -6.93889e-018) 執行:(ocsmatrix-test (list 20 303 880)) 結果: (0 0 1)變換后坐標是:(-3.46945e-018 5.55112e-017 1.0) (1 0 0)變換后坐標是:(1.0 0.0 -3.46945e-018) (0 1 0)變換后坐標是:(0.0 1.0 -5.55112e-017) 執行:(ocsmatrix-test (list 20 0 880)) 結果: (0 0 1)變換后坐標是:(0.0 0.0 1.0) (1 0 0)變換后坐標是:(1.0 0.0 0.0) (0 1 0)變換后坐標是:(0.0 1.0 0.0) **測試通過**
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看