جلسه دوم: تقاطع استوانه و مخروط


نویسنده: م. ه. فرجودیان

 

فرض كنيد محور استوانه اي به شعاع r منطبق بر محور z باشد، معادله آن 1 است. همچنين محور مخروطي با زاويه راس  نيز بر محور z منطبق و راس آن در مبدا مختصات قراردارد. معادله آن 2 است.براي تعيين كلي ترين حالت، ابتدا مخروط را حول محور x به اندازه ϕ مي چرخانيم. ماتريس دوران حول محور x بصورت ذير است:

matrix

clip_image012

شکل 1

 

 

معادله مخروط  پس از دوران:

 3

سپس راس مخروط به نقطه clip_image016 منتقل شود:

 

4

 

با ساده كردن رابطه فوق :

clip_image020

كه در آن:

clip_image022

clip_image024

clip_image026

اگر رابطه فوق را به u تقسيم وبه دوطرف آنclip_image028  را اضافه كنيم، پس از ساده كردن:

clip_image030

ودر نتيجه:

clip_image032

از طرفي براي استوانه ميتوان نوشت:

clip_image034

از تركيب روابط فوق ميتوان گسترش تقاطع استوانه را بدست آورد. (در نمودار   محور عمودي وS افقي است.)

   براي گسترش تقاطع مخروط ، آن را منطبق بر محور z و استوانه را دوران داده و منتقل مي كنيم. معادله استوانه پس از دوران بصورت زير است:

5

 در اين حالت انتقال ميبايست clip_image038 در نظر گرفته شود:

6

براي مخروط در مختصات استوانه اي ميتوان نوشت:

clip_image042

از تركيب روابط فوق نتيجه مي شود:

7

 

8

9

ونهايتا از رابطه زير z بدست مي آيد:

clip_image032

   نمودار clip_image050  بر حسب clip_image052 در مختصات قطبي رسم مي شود.

   برنامه Cyco كه با زبان Autolisp نوشته شده گسترش تقاطع استوانه را در محيط اتوكد رسم مي كند. همچنين برنامه Cocy گسترش تقاطع مخروط را رسم مي كند. (براي اطلاعات بيشتر در مورد استفاده از برنامه ها به متن جلسه اول مراجعه شود.)

براي مثال اگر  clip_image054در نظر گرفته شود شكل 2 حاصل مي شود.

همچنين اگر clip_image056باشد، شكل 3 بدست مي آيد.

و نيز اگر  clip_image058 باشد، نتيجه شكل 4 خواهد بود.

 

clip_image060

شکل 2

 

clip_image062

شکل 3

 

clip_image064

شکل 4


 

برنامه ‍Cyco ( تقاطع استوانه و مخروط ):

(defun c:Cyco(/ a b D1 tna Alpha r1 gama ptt teta tetar ang inc cclr S x y crl sq z1 z2 pt0 pt1 pt2 pt3 osmd)

   (setvar “cmdecho” 0)

   (command “undo” “be”)

   (setq D1 (getdist “\nSpecify the out diameter of the Cylinder:”))

   (setq Alpha (getangle “\nSpecify the angle of the Cone:”))

   (setq a (getdist “\nSpecify the distance ‘a':”))

   (setq a (- a))

   (setq b (getdist “\nSpecify the distance ‘b':”))

   (setq b (- b))

   (setq gama (getangle “\nSpecify the angle of rotation of the cone about X:”))

   (setq ptt (getpoint “\nSpecify the left point of diagram:”))

   (setq r1 (/ D1 2))

   (setq teta 0)

   (setq ang 360.0)

   (setq inc (/ (- ang teta) 720))

   (setq cclr (getvar “cecolor”))

   (command “color” 52)

   (command “line” ptt (list (+ (car ptt) (* pi (* r1 2)))  (cadr ptt)) “”)

   (command “color” 152)

   (setq osmd (getvar “osmode”))

   (setvar “osmode” 0)

   (repeat 721

      (progn

         (setq tetar (* (/ teta 180.0) pi))

         (setq S (* r1 tetar ))

         (setq x (- (* r1 (cos tetar)) a))

         (setq y (- (* r1 (sin tetar)) b))

         (setq tna (/ (sin Alpha) (cos Alpha)))

         (setq u  (- (expt (sin gama) 2) (* (expt (cos gama) 2) (expt tna 2))))

         (setq v (* (* (cos gama) (sin gama)) (* (* 2 y) (+ 1 (expt tna 2)))))

         (setq w (+ (expt x 2) (* (expt y 2) (- (expt (cos gama) 2) (* (expt (sin gama) 2) (expt tna 2))))))

         (setq crl (- (expt v 2) (* 4 (* w u))))

         (if (> crl -0.001 )

            (progn

               (setq sq (sqrt (abs crl)))

               (setq z1 (/ (+ (- v) sq) (* 2 u)))

               (setq z2 (/ (- (- v) sq) (* 2 u)))

               (setq pt1 (list (+ (car ptt) s) (- (cadr ptt) z1)))

               (setq pt2 (list (+ (car ptt) s) (- (cadr ptt) z2)))

            )

            (progn

               (setq z1 0.0)

               (setq z2 0.0)

               (if (/=  pt0 pt3)

                  (progn

                     (setq pt1 (list (+ (car ptt) s) (/ (+ (cadr pt0) (cadr pt3)) 2)))

                     (setq pt2 pt1)

                  )

                  (progn

                     (setq pt1 (list (+ (car ptt) s) (- (cadr ptt) z1)))

                     (setq pt2 (list (+ (car ptt) s) (- (cadr ptt) z2)))

                  )

               )

            )

         )

        (if (/=  (cadr pt0) (cadr pt3))

            (progn

               (Command “line” pt0 pt1 “”)

               (Command “line” pt3 pt2 “”)

            )

            (progn

               (if (/=  (cadr pt1) (cadr pt2))

                   (progn

                      (setq pt0 (list (car pt3) (/ (+ (cadr pt1) (cadr pt2)) 2)))

                      (setq pt3 pt0)

                      (Command “line” pt0 pt1 “”)

                      (Command “line” pt3 pt2 “”)

                   )

               )

            )       

         )

         (setq pt0 pt1)

         (setq pt3 pt2)

         (setq teta (+ teta inc))

         (if (> teta ang) (setq teta ang))

      )

   )

   (setvar “osmode” osmd)

   (command “undo” “e”)

   (command “color” cclr)

   (setvar “cmdecho” 1)

)

برنامه ‍Cocy (مخروط – استوانه ):

 

(defun c:Cocy(/ a b Alpha gama D1 r1 cclr inc ang teta tetar osmd u v w sq z1 z2 ppi ptt pt0 pt1 pt2 pt3)

   (setvar “cmdecho” 0)

   (command “undo” “be”)

   (setq D1 (getdist “\nSpecify the out diameter of the Cylinder:”))

   (setq Alpha (getangle “\nSpecify the angle of the Cone:”))

   (setq a (getdist “\nSpecify the distance ‘a':”))

   (setq b (getdist “\nSpecify the distance ‘b':”))

   (setq b (- b))

   (setq gama (getangle “\nSpecify the angle of rotation of the Cyliner about X:”))

   (setq ptt (getpoint “\nSpecify the left point of diagram:”))

   (setq pt0 ptt)

   (setq pt3 ptt)

   (setq r1 (/ D1 2))

   (setq teta 0)

   (setq ang 360.0 )

   (setq inc (/ (- ang teta) 720))

   (setq cclr (getvar “cecolor”))

   (command “color” 52)

   (command “line” ptt (polar ptt 0 (* (/ (- b r1) (cos Alpha)) -2)) “”)

   (setq ppi (*  2 pi (sin Alpha)))

   (command “arc” “c” ptt (polar ptt 0 (* (/ (- b r1) (cos Alpha)) -2)) (polar ptt ppi (* (- b r1) -1.2)))

   (command “line” ptt (polar ptt ppi (* (/ (- b r1) (cos Alpha)) -2)) “”)

   (command “color” 152)

   (setq osmd (getvar “osmode”))

   (setvar “osmode” 0)

   (setq tna (/ (sin Alpha) (cos Alpha)))

   (setq w (expt a 2))

   (setq w (+ w (* (expt b 2) (expt (sin gama) 2))))

   (setq w (- w (expt r1 2)))

   (repeat 721

      (progn

         (setq tetar (* (/ teta 180.0) pi))

         (setq S (* r1 tetar ))

         (setq u  (* (expt tna 2) (expt (cos tetar) 2)))

         (setq u  (+ u (* (expt tna 2) (expt (sin tetar) 2) (expt (cos gama) 2))))

         (setq u  (+ u (expt (sin gama) 2)))

         (setq u  (+ u (* 2 tna (sin tetar) (cos gama) (sin gama))))

         (setq v (* -2 a tna (cos tetar)))

         (setq v (+ v (* -2 b (expt (sin gama) 2))))

         (setq v (+ v (* -2 b tna (sin tetar) (cos gama) (sin gama))))

         (setq crl (- (expt v 2) (* 4 (* w u))))

         (if (>= crl 0.0 )

            (progn

               (setq sq (sqrt (abs crl)))

               (setq z1 (/ (+ (- v) sq) (* 2 u)))

               (setq z2 (/ (- (- v) sq) (* 2 u)))

               (setq z1 (/ (- z1) (cos Alpha)))

               (setq z2 (/ (- z2) (cos Alpha)))

               (setq ppi (* tetar (sin Alpha)))

               (setq pt1 (polar ptt ppi z1))

               (setq pt2 (polar ptt ppi z2))

               (if (= pt0 pt3)

                  (progn

                     (setq pt0 (list (/ (+ (car pt1) (car pt2)) 2) (/ (+ (cadr pt1) (cadr pt2)) 2)))

                     (setq pt3 pt0)

                  ) 

               )

            ) 

            (progn

               (if (/=  pt0 pt3)

                  (progn

                     (setq pt1 (list (/ (+ (car pt0) (car pt3)) 2) (/ (+ (cadr pt0) (cadr pt3)) 2)))

                     (setq pt2 pt1)

                  )

               )

            )

         )

         (if (or (/= pt0 pt3) (/= pt1 pt3))

            (progn

               (Command “line” pt0 pt1 “”)

               (Command “line” pt3 pt2 “”)

            )

         )

         (setq pt0 pt1)

         (setq pt3 pt2)

 

         (setq teta (+ teta inc))

      )

   )

   (setvar “osmode” osmd)

   (command “undo” “e”)

   (command “color” cclr)

   (setvar “cmdecho” 1)

)

 

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>