- 积分
- 36553
- 明经币
- 个
- 注册时间
- 2010-7-10
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 highflybird 于 2016-7-6 10:57 编辑
此文之题目,颇有当年孔乙己 “茴”字四种写法之意。
椭圆之作图法,难矣! 今再用LISP论述之,无视其意义和价值,似有闭门造车之嫌。但此念在心中一直作祟,不吐不快,故今发表于此,望读者斧正谬误之处。
说明:此LISP程序参考了《Constructive Geometry of Plane Curves》 (T.H. Eagles著)中的几何作图法。
程序中字母代表的含义:
C----Center, The center of Ellipse, 椭圆的中心
F----Focus, The focus(foci) of Ellipse, 椭圆的焦点
X----Axis, An axis of Ellipse, 椭圆的轴
P----Point, A Point on Ellipse, 椭圆上的一点
T----Tangent, A tangent of Ellipse, 椭圆的切线
J----conjugate diameter, 共轭轴
D----Direction, 已知某个共轭轴的方向
M----Major Direction, 已知主轴的方向
另外,如需要程序完整运行,需加载本人的其他一些库文件:
矩阵库Matrix-lib.LSP
点线面几何库 Line&Triangle.LSP
复数库Complex.LSP
圆弧库 Circle.LSP
此文贴上的代码仅仅为片段代码。完整代码见附件,包含了一些测试代码。
申明:如读者需转载,请注明原作者及其引用地址。
题1:给定椭圆的两共轭半轴CP,CQ,求此椭圆。
关于什么叫椭圆的共轭轴,请读者自行搜索定义。
此题的另外一解法参见《Constructive Geometry of Plane Curves》 (T.H. Eagles著)的110页,63题。
- ;;;=============================================================
- ;;; Given a pair of conjugate diameters, construct an ellipse
- ;;; 功能: 已知两共轭半轴作椭圆
- ;;; 输入: 共轭轴的交点C(即椭圆圆心)、共轭半轴的两端点P,Q
- ;;; 输出: 成功返回椭圆的基本要素,否则返回nil
- ;;;=============================================================
- (defun ELL:2J (C P Q / K M R A)
- (if (not (LINE:Colinearity C P Q))
- (progn
- (setq K (GEO:Rot90 C C Q)) ;Q点绕C旋转90度得到K
- (setq M (GEO:Midpoint K P)) ;M为KP的中点
- (setq R (distance M C)) ;以M为圆心,MC为半径画圆,
- (setq A (polar M (angle M P) R)) ;交KP于A,B
- (list C (distance K A) (distance P A) (angle C A)) ;则CA,CB为椭圆的两轴线方向,半轴长分别为KA,PA.
- )
- )
- )
题2:给定椭圆的长轴MN和椭圆上一点P,求此椭圆:
这个稍微简单,我在这里采用了数学法,直接求出。
- ;;;=============================================================
- ;;; Construct an ellipse,one axis and a point on it being given.
- ;;; Note: Page 114, Problem 64
- ;;; 功能: 已知椭圆的一个长轴,和椭圆上的一点
- ;;; 输入: 长轴的两个端点M、N和椭圆上的一点P
- ;;; 输出: 成功返回椭圆的基本要素,否则返回nil
- ;;;=============================================================
- (defun ELL:XP (M N P / C a b Maj Vec x y d)
- (setq C (Geo:Midpoint M N))
- (setq A (distance C M))
- (setq Maj (mapcar '- M C))
- (setq vec (trans (mapcar '- P C) 0 Maj T))
- (setq x (caddr vec))
- (setq y (car vec))
- (if (not (>= (abs x) a))
- (progn
- (setq d (sqrt (* (+ a x) (- a x))))
- (setq b (abs (* (/ y d) a)))
- (list C a b (angle C M))
- )
- )
- )
题3:给定椭圆的一个长轴MN,和椭圆的一条切线PQ,求此椭圆。
此题采用了两种方法求解,作图法和数学法。这是作图法的代码:
- ;;;=============================================================
- ;;; Construct an ellipse with a given axis to touch a given line
- ;;; Note: Page 115, Problem 65
- ;;; 功能: 已知椭圆的一个长轴,和椭圆外的一条切线
- ;;; 输入: 长轴的两个端点M、N和椭圆外的一条切线PQ
- ;;; 输出: 成功返回椭圆的基本要素,否则返回nil
- ;;;=============================================================
- (defun ELL:XT (M N P Q / C A Ax an v1 v2 y1 x1 y2 x2 d1 d2 d3)
- (setq C (Geo:Midpoint M N)) ;椭圆的中心
- (setq A (distance C M)) ;半长轴长
- (setq Ax (mapcar '- M C)) ;CM矢量
- (setq an (angle C M)) ;CM角
- (setq v1 (trans (mapcar '- P C) 0 Ax T)) ;P到MN的距离和CP的投影
- (setq v2 (trans (mapcar '- Q C) 0 Ax T)) ;Q到MN的距离和CQ的投影
- (setq y1 (car v1)) ;P到MN的距离
- (setq x1 (caddr v1)) ;CP的投影
- (setq y2 (car v2)) ;Q到MN的距离
- (setq x2 (caddr v2)) ;CQ的投影
- (setq d1 (- (* x1 y2) (* x2 y1)))
- (setq d2 (- y1 y2))
- (setq d3 (- (* D1 D1) (* d2 d2 a a)))
- (if (and (not (equal x1 x2 1e-14)) (> d3 0))
- (list C a (abs (/ (sqrt d3) (- x1 x2))) an) ;计算出半短轴长
- )
- )
题4:给定椭圆的两个共轭轴方向,一条切线和这个切点,求此椭圆。
- ;;;=============================================================
- ;;; To decribe an ellipse, the directions of a pair of conjugate
- ;;; diameters, a tangent and its point of contact being given
- ;;; Note: Page 116, Problem 66
- ;;; 功能: 已知椭圆的两个共轭轴方向,一条切线和这个切点
- ;;; 输入: 两条共轭轴JK和MN,切线PQ并切于P点
- ;;; 输出: 成功返回椭圆的基本要素,否则返回nil
- ;;;=============================================================
- (defun ELL:TP2D (J K M N P Q / C G H A B E F U W r s x y)
- (if (and (setq C (inters J K M N nil))
- (setq G (inters P Q J K nil))
- (setq H (inters P Q M N nil))
- )
- (progn
- (setq A (angle C G))
- (setq B (angle C H))
- (setq U (inters P (polar P B 1) J K nil))
- (setq W (inters P (polar P A 1) M N nil))
- (setq r (distance C G))
- (setq s (distance C H))
- (setq x (distance C U))
- (setq y (distance C W))
- (if (and (小于 x r) (小于 y s))
- (progn
- (setq x (sqrt (* x r)))
- (setq y (sqrt (* y s)))
- (setq E (polar C A X))
- (setq F (polar C B Y))
- (ELL:2J C E F)
- )
- )
- )
- )
- )
题5:已知椭圆的中心,上面两点和一对共轭轴的方向,求此椭圆。
- ;;;=============================================================
- ;;; To describe an ellipse, the center, two points on the curve
- ;;; and directions of a pair of conjugate diameters being given.
- ;;; Note: Page 116, Problem 67
- ;;; 功能: 已知椭圆的中心,上面两点和一对共轭轴的方向,求此椭圆
- ;;; 输入: 中心C,共轭轴CM和CN, 两点P,Q.
- ;;; 输出: 成功返回椭圆的基本要素,否则返回nil
- ;;;=============================================================
- (defun ELL:C2D2P (C M N P Q / A B D E F G I P1 Q1 R S U W X Y Z)
- (if (and (inters P Q C M nil) (inters P Q C N nil))
- (progn
- (setq x (angle C M))
- (setq y (angle C N))
- (setq D (inters P (polar P x 1) C N nil))
- (setq S (inters Q (polar Q y 1) C M nil))
- (setq E (inters P D Q S nil))
- (setq P1 (polar D (angle P D) (distance P D)))
- (setq Q1 (polar S (angle Q S) (distance Q S)))
- (setq F (polar S (angle P Q) 1))
- (setq F (inters S F D E nil))
- (setq G (polar S (angle P1 Q1) 1))
- (setq G (inters S G D E nil))
- (setq z (sqrt (* (distance E F) (distance E G))))
- (setq i (angle E P))
- (setq r (distance P D))
- (setq a (sqrt (+ (* r r) (* z z))))
- (setq U (polar C I a))
- (setq b (/ (* (distance C D) a) z))
- (setq W (polar C (angle C D) b))
- (ELL:2J C U W)
- )
- )
- )
题6:已知椭圆的中心,主轴的方向,和两切线,求此椭圆。
- ;;;=============================================================
- ;;; To describe an ellipse, the center, direction of the major
- ;;; axis and two tangents being given.
- ;;; Note: Page 118, Problem 68
- ;;; 功能: 已知椭圆的中心,主轴的方向,和两切线,求此椭圆
- ;;; 输入: 中心C,主轴方向CM,和两切线PD,PE(须相交)。
- ;;; 输出: 成功返回椭圆的基本要素,否则返回nil
- ;;;=============================================================
- (defun ELL:CM2T (C M P D E / A A0 A1 A2 A3 A4 A5 B F F1 F2 F3 G H L O R S T1)
- (setq a0 (angle C M)) ;长轴的方向角
- (setq a1 (angle p D)) ;直线一的方向角
- (setq a2 (angle p E)) ;直线二的方向角
- (setq a3 (* (+ a1 a2) 0.5)) ;两直线内角平分线
- (setq a4 (+ a3 (* pi 0.5))) ;两直线外角平分线
- (setq G (inters P (polar P a3 1) C M nil)) ;内角平分线与长轴交于G
- (setq H (inters P (polar p a4 1) C M nil)) ;外角平分线与长轴交于H
- (if (and G H) ;如果交点都存在(否则无解或无穷解)
- (progn
- (setq O (Geo:MidPoint G H)) ;GH的中点为圆心,GH为直径做作圆
- (setq R (distance O G)) ;OG为这个圆的半径
- (setq L (distance O C))
- (if (>= L R) ;如果可以作切线
- (progn
- (setq F (sqrt (* (+ L R) (- L R)))) ;切线长即为焦距
- (setq F1 (polar C a0 (- F))) ;左焦点F1
- (setq F2 (polar C a0 F)) ;右焦点F2
- (setq F3 (Geo:Mirror2D F1 P a1)) ;F1关于PD的对称点F3
- (setq T1 (inters F2 F3 P D nil)) ;F2F3与PD的交点为切点
- (setq a5 (* (+ (angle T1 F1) (angle T1 F2)) 0.5)) ;角F1T1F2的平分线
- (if (equal (rem (- a1 a5) pi) 0 1e-6) ;如果平分线与PD重合
- nil ;无解
- (setq a (/ (+ (distance F1 T1) (distance F2 T1)) 2) ;否则得到椭圆的长轴长
- b (sqrt (* (- a f) (+ a f))) ;由焦距和长轴得到短轴
- s (list C a b a0) ;因而得解
- )
- )
- )
- )
- )
- )
- )
题7:已知椭圆中心,两共轭轴方向,经过一点和一切线。求此椭圆。
- ;;;=============================================================
- ;;; Construct an ellipse,the center,the directions of a pair of
- ;;; conjugate diameters,a tangent and a point on it being given.
- ;;; Note: Page 119, Problem 69
- ;;; 功能: 已知椭圆中心,两共轭轴方向,经过一点和一切线。求此椭圆
- ;;; 输入: 中心C,共轭轴方向CD,CE,点P,切线P1P2。
- ;;; 输出: 返回椭圆的解集(可能无解或者多解)。
- ;;;=============================================================
- (defun ELL:CPT2D (C D E P P1 P2 / A1 A2 F G H J K L1 L2 L3 L4 M N O R S)
- (if (or (LINE:Colinearity C D E)
- (LINE:Colinearity C P1 P2)
- (equal P C 1e-8)
- )
- nil
- (progn
- (setq M (inters P1 P2 C D nil))
- (setq N (inters P1 P2 C E nil))
- (setq L1 (distance C P))
- (if (and M N)
- (if (setq F (inters C P M N nil))
- (if (>= (setq L2 (distance C F)) L1)
- (progn
- (setq L3 (sqrt (* (+ L2 L1) (- L2 L1))))
- (setq O (Geo:MidPoint M N))
- (setq R (distance O M))
- (setq a1 (angle F O))
- (setq a2 (+ a1 (* pi 0.5)))
- (setq J (polar F a1 L3))
- (setq K (polar J a2 L1))
- (setq S nil)
- (foreach I (CIR:Inters_Circle_Line O R F K)
- (setq H (inters I (polar I a2 1) M N nil))
- (setq G (polar C a1 (distance H I)))
- (setq S (cons (ELL:2J C G H) S))
- )
- )
- )
- (cond
- ( (equal L1 (setq R (* 0.5 (distance M N))) 1e-8)
- (List (ELL:2J C P (Geo:MidPoint M N)))
- )
- ( (< L1 R)
- (setq O (Geo:MidPoint M N))
- (setq L2 (sqrt (* (+ R L1) (- R L1))))
- (setq a1 (angle O M))
- (setq J (polar O a1 L2))
- (setq K (polar O a1 (- L2)))
- (setq S nil)
- (foreach I (list J K)
- (setq S (cons (ELL:2J C I P) S))
- )
- )
- )
- )
- (progn
- (and N (setq M N N D D E E N))
- (if (setq F (inters C P P1 P2 nil))
- (if (< L1 (setq L2 (distance C F)))
- (progn
- (setq L3 (sqrt (* (+ L2 L1) (- L2 L1))))
- (setq L4 (/ (* L1 (distance F M)) L3))
- (setq E (polar C (angle C E) L4))
- (list (ELL:2J C E M))
- )
- )
- (list (ELL:2J C P M))
- )
- )
- )
- )
- )
- )
题8:给定椭圆的中心,两切线和其上一点,求此椭圆。
- ;;;=============================================================
- ;;; Construct an ellipse,the center,two tangents and a point on
- ;;; the curve being given
- ;;; Note: Page 121, Problem 70
- ;;; 功能: 给定椭圆的中心,两切线和其上一点,求此椭圆。
- ;;; 参数: 中心C, 椭圆上的一点P, 两切线IM, IN(须相交)
- ;;; 返回: 所求椭圆的解集。
- ;;;=============================================================
- (defun ELL:CP2T (C P I M N / A1 A2 A3 D E F G H L1 L2 L3 O R S)
- (if (not (setq E (inters C P I N nil)))
- (setq E N N M M E E (inters C P I N nil))
- )
- (setq L1 (distance C P))
- (setq L2 (distance C E))
- (if (> L2 L1)
- (progn
- (setq L3 (sqrt (* (+ L2 L1) (- L2 L1))))
- (setq a1 (angle I M))
- (setq a2 (angle I N))
- (setq a3 (+ a2 (* pi 0.5)))
- (setq O (inters C (polar C a1 1) I N nil))
- (setq F (polar E a2 L3))
- (setq G (polar F a3 L1))
- (setq R (distance O I))
- (foreach K (CIR:Inters_Circle_Line O R G E)
- (setq H (inters K (polar K a3 1) I N nil))
- (setq D (polar C a2 (distance K H)))
- (setq s (cons (ELL:2J C H D) s))
- )
- )
- )
- )
题9:给定椭圆的中心,一切线和椭圆上两点,求此椭圆。
- ;;;=============================================================
- ;;; Construct an ellipse, the center, two points on curve and a
- ;;; tangent being given
- ;;; Note: Page 123, Problem 72
- ;;; 功能: 给定椭圆的中心,一切线和椭圆上两点,求此椭圆。
- ;;; 参数: 中心C, 椭圆上的两点A,B, 一切线PQ。
- ;;; 返回: 所求椭圆的解集。
- ;;;=============================================================
- (defun ELL:CT2P (C A B P Q / d e)
- (setq D (GEO:MidPoint A B))
- (setq E (inters C (polar C (angle A B) 1) P Q nil))
- (ELL:CPT2D C D E A P Q)
- )
题10: 给定椭圆的中心和三切线,求此椭圆。
- ;;;=============================================================
- ;;; Construct an ellipse, the center, three tangents being given
- ;;; Note: Page 122, Problem 71
- ;;; 功能: 给定椭圆的中心和三切线,求此椭圆。
- ;;; 参数: 中心C, 三切线DE,EF,FD(应两两相交)。
- ;;; 返回: 所求椭圆。
- ;;;=============================================================
- (defun ELL:C3T (C D E F / A B D1 D2 D3 G H I J K L1 L2 L3 P Q U W X Y)
- (setq d1 (distance C D))
- (setq d2 (distance C E))
- (setq d3 (distance C F))
- (setq l3 (distance D E))
- (setq l2 (distance D F))
- (setq l1 (distance E F))
- (if (and (TRI:IsTriangle l1 l2 l3)
- (TRI:IsTriangle d1 d2 l3)
- (TRI:IsTriangle d2 d3 l1)
- (TRI:IsTriangle d3 d1 l2)
- )
- (progn
- (setq X (inters (GEO:scale2 C D) (GEO:scale2 C F) D E nil))
- (setq Y (GEO:Scale2 C X))
- (setq G (inters Y (polar Y (angle C E) 1) E F nil))
- (setq H (inters X (polar X (angle C F) 1) E F nil))
- (setq I (inters X G Y H nil))
- (setq J (inters I D E F nil))
- (setq K (inters J (polar J (angle X G) 1) D E nil))
- (setq A (angle C X))
- (setq B (angle C D))
- (setq P (inters K (polar K B 1) X Y nil))
- (setq Q (inters K (polar K A 1) C D nil))
- (setq D1 (distance C P))
- (setq D2 (distance C X))
- (setq L1 (distance C Q))
- (setq L2 (distance C D))
- (if (and (小于 D1 D2) (小于 L1 L2))
- (progn
- (setq U (polar C A (sqrt (* D1 D2))))
- (setq W (polar C B (sqrt (* L1 L2))))
- (ELL:2J C U W)
- )
- )
- )
- )
- )
题11:根据中心和椭圆上的三点画这个椭圆。
此题准备了几种方法,两种计算法,一种作图法。下面贴出一计算法代码:
- ;;;=============================================================
- ;;;highflybird 2012.5.29 创作于深圳 2013.5.5 修改于深圳
- ;;;-------------------------------------------------------------
- ;;;功能:根据中心和椭圆上的三点画这个椭圆
- ;;;参数:中心点,和其他三点
- ;;;返回:中心点,半长轴值、半短轴、旋转角
- ;;;=============================================================
- (defun ELL:C3P (Cen p1 p2 p3 / a b c abc ac bb aX bY an I J PT1 PT2 PT3 SS)
- (setq p1 (mapcar '- p1 cen))
- (setq p2 (mapcar '- p2 cen))
- (setq p3 (mapcar '- p3 cen))
- (setq abc (Mat:3VLE (* (car p1) (car p1))
- (* (car p1) (cadr p1))
- (* (cadr p1) (cadr p1))
- (* (car p2) (car p2))
- (* (car p2) (cadr p2))
- (* (cadr p2) (cadr p2))
- (* (car p3) (car p3))
- (* (car p3) (cadr p3))
- (* (cadr p3) (cadr p3))
- 1. 1. 1.
- )
- )
- (if abc
- (progn
- (setq a (car abc))
- (setq b (cadr abc))
- (setq c (caddr abc))
- (setq b (/ b 2))
- (setq bb (* b b))
- (setq ac (* a c))
- (setq I (+ a c))
- (setq J (- a c))
- (setq ss (sqrt (+ (* J J) (* 4 bb))))
- (if (大于 I ss)
- (progn
- (setq aX (sqrt (/ 2 (- I ss))))
- (setq bY (sqrt (/ 2 (+ I ss))))
- (if (equal (/ J I) 0 1e-16)
- (setq an (* (atan b 0) 0.5))
- (setq an (* (atan (/ (+ b b) J)) 0.5))
- )
- (and (大于 a c) (setq an (+ an (* pi 0.5))))
- (list cen aX bY an) ;返回中心,半长轴,半短轴,旋转角度
- )
- )
- )
- )
- )
题12:根据椭圆上的四点画水平(或者垂直)方向椭圆。
- ;;;=============================================================
- ;;;highflybird 2012.5.29 创作于深圳 2013.5.5 修改于深圳
- ;;;-------------------------------------------------------------
- ;;;功能:根据椭圆上的四点画水平(或者垂直)方向椭圆
- ;;;参数:四个给定的二位或者三维点
- ;;;返回:中心点,半长轴值、半短轴、旋转角
- ;;;=============================================================
- (defun ELL:4P (p0 p1 p2 p3 / A B C D K M N O X1 X2 X3 Y1 Y2 Y3 U1 U2 U3 W1 W2 W3)
- (setq p1 (mapcar '- p1 p0)
- p2 (mapcar '- p2 p0)
- p3 (mapcar '- p3 p0)
- x1 (car p1)
- y1 (cadr p1)
- x2 (car p2)
- y2 (cadr p2)
- x3 (car p3)
- y3 (cadr p3)
- U1 (* x1 x1)
- W1 (* y1 y1)
- U2 (* x2 x2)
- W2 (* y2 y2)
- U3 (* x3 x3)
- W3 (* y3 y3)
- A (MAT:Det3 W1 x1 y1 W2 x2 y2 W3 x3 y3)
- B (MAT:Det3 U1 x1 y1 U2 x2 y2 U3 x3 y3)
- C (MAT:Det3 U1 W1 y1 U2 W2 y2 U3 W3 y3)
- D (MAT:Det3 U1 W1 x1 U2 W2 x2 U3 W3 x3)
- B (- B)
- D (- D)
- )
- (if (or (and (大于 A 0) (大于 B 0)) (and (小于 A 0) (小于 B 0)))
- (progn
- (setq K (+ (/ (* C C) 4 A) (/ (* D D) 4 B)))
- (setq m (sqrt (/ K A)))
- (setq n (sqrt (/ K B)))
- (setq O (list (/ C A -2) (/ D B -2) 0))
- (setq O (mapcar '+ O P0))
- (if (/= m 0.0 n 0.0)
- (if (大于 n m)
- (list O n m (/ pi 2)) ;返回中心,半长轴,半短轴,旋转角度90度
- (list O m n 0.0) ;返回中心,半长轴,半短轴,旋转角度0度
- )
- )
- )
- )
- )
题13:已知椭圆两焦点及其一点,求此椭圆。
- ;;;=============================================================
- ;;; To describe an ellipse, the foci and a point on the curve
- ;;; being given. Ref: Page 125, Problem 74
- ;;; 功能: 已知椭圆两焦点及其一点,求此椭圆
- ;;; 输入: 两焦点E,F 和经过一点P。
- ;;; 输出: 椭圆的解。
- ;;;=============================================================
- (defun ELL:P2F (E F P / o a b c)
- (setq O (GEO:MidPoint E F))
- (setq c (distance O F))
- (setq a (* 0.5 (+ (distance E P) (distance F P))))
- (setq b (sqrt (* (+ a c) (- a c))))
- (list O a b (angle E F))
- )
题14:已知椭圆两焦点及一切线,求此椭圆。
- ;;;=============================================================
- ;;; To describe an ellipse, the foci and a tangent to the curve
- ;;; being given. Ref: Page 125, Problem 75
- ;;; 功能: 已知椭圆两焦点及一切线,求此椭圆
- ;;; 输入: 两焦点E,F 和一点切线PQ。
- ;;; 输出: 椭圆的解。
- ;;;=============================================================
- (defun ELL:T2F (E F P Q / G H I)
- (setq I (inters P Q E F nil))
- (if (and I (equal (angle E I) (angle I F) 1e-8))
- nil
- (progn
- (setq G (GEO:Mirror2D E P (angle P Q)))
- (setq H (inters P Q F G nil))
- (ELL:P2F E F H)
- )
- )
- )
题15:已知椭圆一焦点及一切线切点和椭圆上一点,求此椭圆。
- ;;;=============================================================
- ;;; To describe an ellipse, a focus, a tangent with its point of
- ;;; contact and second point on the curve being given
- ;;; Note: Page 126, Problem 76
- ;;; 功能: 已知椭圆一焦点及一切线切点和椭圆上一点,求此椭圆
- ;;; 输入: 焦点F,点P 和切线RS(R为切点)。
- ;;; 输出: 椭圆的解。
- ;;;=============================================================
- (defun ELL:FPT (F P R S / G H M J E)
- (if (LINE:IsSameSide F P R S)
- (progn
- (setq G (GEO:Mirror2D F R (angle R S)))
- (setq H (polar G (angle G R) (distance F P)))
- (setq M (GEO:MidPoint H P))
- (setq J (polar M (+ (angle H P) (* pi 0.5)) 1))
- (setq E (inters M J R G nil))
- (if (LINE:IsSameSide E F R S)
- (ELL:P2F E F P)
- )
- )
- )
- )
题16:已知椭圆一焦点及一切线和椭圆上两点,求此椭圆。
- ;;;=============================================================
- ;;; To describe an ellipse, a focus, a tangent and two points on
- ;;; the curve being given.
- ;;; Note: Page 127, Problem 77
- ;;; 功能: 已知椭圆一焦点及一切线和椭圆上两点,求此椭圆
- ;;; 输入: 焦点F,点P,Q 和切线MN。
- ;;; 输出: 椭圆的解集。
- ;;;=============================================================
- (defun ELL:FT2P (F M N P Q / d1 d2 d3 d4 d5 E O S X)
- (if (and (LINE:IsSameSide F P M N) (LINE:IsSameSide F Q M N))
- (progn
- (setq E (GEO:Mirror2D F M (angle M N)))
- (setq d1 (distance F P))
- (setq d2 (distance F Q))
- (if (equal d1 d2 1e-8)
- (setq X (CIR:PPC P Q E d1))
- (if (大于 d1 d2)
- (setq X (CIR:PCC P Q (- d1 d2) E d1))
- (setq X (CIR:PCC Q P (- d2 d1) E d2))
- )
- )
- (foreach v X
- (setq O (car v))
- (setq d3 (distance O E))
- (setq d4 (+ d1 (distance O P)))
- (setq d5 (+ d2 (distance O Q)))
- (if (and (equal d3 d4 1e-8) (equal d3 d5 1e-8))
- (setq s (cons (ELL:P2F O F P) s))
- )
- )
- (reverse S)
- )
- )
- )
题17:已知椭圆一焦点及两条切线和椭圆上一点,求此椭圆。
- ;;;=============================================================
- ;;; Construct an ellipse, a focus, a point on the curve and two
- ;;; tangents being given
- ;;; Note: Page 127, Problem 78
- ;;; 功能: 已知椭圆一焦点及两条切线和椭圆上一点,求此椭圆
- ;;; 输入: 焦点F,点P 和两条切线L1L2,L3L4。
- ;;; 输出: 椭圆的解集。
- ;;;=============================================================
- (defun ELL:FP2T (F P L1 L2 L3 L4 / D1 D2 D3 E G H R s)
- (setq G (GEO:Mirror2D F L1 (angle L1 L2)))
- (setq H (GEO:Mirror2D F L3 (angle L3 L4)))
- (setq S nil)
- (setq R (distance P F))
- (foreach n (CIR:PPC G H P R)
- (setq E (car n))
- (setq d1 (distance E G))
- (setq d2 (distance E H))
- (setq d3 (+ R (distance E P)))
- (if (and (equal d1 d2 1e-6) (equal d2 d3 1e-6))
- (setq s (cons (ELL:P2F E F P) s))
- )
- )
- S
- )
题18:已知椭圆一焦点及三条切线,求此椭圆。
- ;;;=============================================================
- ;;; Construct an ellipse, a focus and three tangents being given
- ;;; Note: Page 129, Problem 79
- ;;; 功能: 已知椭圆一焦点及三条切线,求此椭圆
- ;;; 输入: 焦点F,三切线L1L2,L3L4,L5L6。
- ;;; 输出: 椭圆的解集。
- ;;;=============================================================
- (defun ELL:F3T (F L1 L2 L3 L4 L5 L6 / E G H I)
- (setq G (GEO:Mirror2D F L1 (angle L1 L2)))
- (setq H (GEO:Mirror2D F L3 (angle L3 L4)))
- (setq I (GEO:Mirror2D F L5 (angle L5 L6)))
- (if (setq E (car (TRI:CircumCenter G H I)))
- (if (and (LINE:IsSameSide E F L1 L2)
- (LINE:IsSameSide E F L3 L4)
- (LINE:IsSameSide E F L5 L6)
- )
- (ELL:P2F E F (inters E G L1 L2 nil))
- )
- )
- )
题19:已知椭圆一焦点及其上三点,求此椭圆。
- ;;;=============================================================
- ;;; Construct an ellipse, a focus and three points being given
- ;;; Note: Page 129, Problem 80
- ;;; 功能: 已知椭圆一焦点及其上三点,求此椭圆
- ;;; 输入: 焦点F,经过三点I,J,K.
- ;;; 输出: 椭圆的解集。
- ;;;=============================================================
- (defun ELL:F3P (F I J K / a1 a2 a3 b1 b2 b3 p1 p2 p3 M N Pt)
- (setq a1 (angle F I))
- (setq A2 (angle F J))
- (setq A3 (angle F K))
- (setq b1 (* 0.5 (+ a1 a2)))
- (setq b2 (* 0.5 (+ a2 a3)))
- (setq b3 (* 0.5 (+ a3 a1)))
- (setq p1 (polar F b1 pi))
- (setq p2 (polar F b2 pi))
- (setq P3 (polar F b3 pi))
- (setq M (inters I P3 F P1 nil))
- (setq N (inters K P3 F P2 nil))
- (setq Pt (inters M N I K nil))
- (and (null pt) (setq Pt (polar J (angle I K) Pi)))
- (setq M (inters Pt J F P1 nil))
- (setq N (inters Pt J F P2 nil))
- (ELL:F3T F I M Pt J N K)
- )
题20:已知椭圆两切线及其切点和椭圆上第三点,求此椭圆。
- ;;;=============================================================
- ;;; Construct an ellipse,2 tangents with their points of contact
- ;;; and a third point being given
- ;;; Note: Page 131, Problem 81
- ;;; 功能: 已知椭圆两切线及其切点和椭圆上第三点,求此椭圆
- ;;; 输入: 两切线VQ,VR(Q,R是其切点)和经过第三点P。
- ;;; 输出: 椭圆的解集。
- ;;;=============================================================
- (defun ELL:P2T (V Q R P / s u w x y m n c)
- (setq S (inters Q P V R nil))
- (setq U (inters V Q R P nil))
- (cond
- ( (and S U)
- (setq W (inters U S Q R nil))
- )
- ( U
- (setq W (polar U (angle V R) 1))
- (setq W (inters U W Q R nil))
- )
- ( S
- (setq W (polar S (angle V Q) 1))
- (setq W (inters S W Q R nil))
- )
- (t
- (setq W (polar P (angle Q R) 1))
- )
- )
- (setq X (inters P W V R nil))
- (setq Y (inters P W V Q nil))
- (setq M (Geo:Midpoint Q R))
- (setq N (Geo:MidPoint P R))
- (setq C (inters V M X N nil))
- (ELL:C3T C V X Y)
- )
题21:已知椭圆两切线和椭圆上三点,求此椭圆。
- ;;;=============================================================
- ;;; To describe an ellipse,2 tangents and 3 points being given.
- ;;; Note: Page 133, Problem 82
- ;;; 功能: 已知椭圆两切线和椭圆上三点,求此椭圆。
- ;;; 输入: 两切线T1, T2和椭圆上三点A,B,C。
- ;;; 输出: 椭圆的解集。
- ;;;=============================================================
- (defun ELL:2T3P (T1 T2 A B C / p1 p2 q1 q2 p q pts x1 x2 res s)
- (setq p1 (car t1))
- (setq p2 (cadr t1))
- (setq q1 (car t2))
- (setq q2 (cadr t2))
- (foreach i (list B C)
- (setq P (inters A i P1 P2 nil))
- (setq q (inters A i Q1 Q2 nil))
- (setq pts (cons (cdr (GEO:Cen_Foci A i p q)) pts))
- )
- (foreach p (car pts)
- (foreach q (cadr pts)
- (setq x1 (inters p q p1 p2 nil))
- (setq x2 (inters p q q1 q2 nil))
- (if (and x1 x2)
- (if (setq s (ELL:5P_1 x1 x2 A B C))
- (setq res (cons s res))
- )
- )
- )
- )
- res
- )
题22:已知椭圆三切线及和椭圆上两点,求此椭圆。
- ;;;=============================================================
- ;;; To describe an ellipse,2 tangents and 3 points being given.
- ;;; Note: Page 134, Problem 83
- ;;; 功能: 已知椭圆三切线及和椭圆上两点,求此椭圆。
- ;;; 输入: 三切线T1,T2,T3和椭圆上的两点A,B。
- ;;; 输出: 椭圆的解集。
- ;;;=============================================================
- (defun ELL:2P3T (T1 T2 T3 A B / p1 p2 q1 q2 r1 r2 p q r M N L U V W X Y res s)
- (setq p1 (car t1))
- (setq p2 (cadr t1))
- (setq q1 (car t2))
- (setq q2 (cadr t2))
- (setq R1 (car t3))
- (setq R2 (cadr t3))
- (setq P (inters q1 q2 r1 r2 nil))
- (setq Q (inters r1 r2 p1 p2 nil))
- (setq R (inters p1 p2 q1 q2 nil))
-
- (setq M (inters A B R1 R2 nil))
- (setq N (inters A B P1 P2 nil))
- (setq L (inters A B Q1 Q2 nil))
- (foreach D (cdr (GEO:Cen_Foci A B M L))
- (foreach E (cdr (Geo:Cen_FOci A B M N))
- (setq V (GEO:MeanPoint M D E))
- (setq W (inters R V R1 R2 nil))
- (setq X (inters W D Q1 Q2 nil))
- (setq Y (inters W E P1 P2 nil))
- (if (and W X Y)
- ;;(if (setq S (ELL:P2T Q W X A))
- (if (setq S (ELL:5P_1 A B W X Y))
- (setq Res (cons S Res))
- )
- )
- )
- )
- (reverse Res)
- )
题23:已知椭圆五切线,求此椭圆。
- ;;;=============================================================
- ;;; To describe an ellipse to touch five given lines
- ;;; Note: Page 135, Problem 84
- ;;; 功能: 已知椭圆五切线,求此椭圆。
- ;;; 输入: 五切线T1,T2,T3。
- ;;; 输出: 椭圆的解集。
- ;;;=============================================================
- (defun ELL:5T(A B C D E / L S F P)
- (setq L (ALG:Graham (list A B C D E)))
- (if (= (length L) 5)
- (progn
- (setq S nil)
- (setq L (append (cdr L) L))
- (repeat 5
- (setq F (inters (car L) (caddr L) (cadr L) (cadddr L) nil))
- (setq P (inters (cadr L) (caddr L) (nth 4 L) F nil))
- (setq S (cons P S))
- (setq L (cdr L))
- )
- (apply 'ELL:5P_1 S)
- )
- )
- )
题24:已知椭圆四切线及和椭圆上一点,求此椭圆。
- ;;;=============================================================
- ;;; To describe an ellipse,4 tangents AB,BC,CD,CA and a point E
- ;;; on the curve being given
- ;;; Note: Page 137, Problem 85
- ;;; 功能: 已知椭圆四切线及和椭圆上一点,求此椭圆。
- ;;; 输入: 四切线AB,BC,CD,DA和椭圆上的一点E。
- ;;; 输出: 椭圆的解集。
- ;;;=============================================================
- (defun ELL:P4T (A B C D E / ps B1 C1 P Q X s A0 AN AX D1 D2 F G H I SS)
- (setq Ps (ALG:Graham (list A B C D)))
- (if (and (等于 (length ps) 4) (ALG:Inside-p E ps))
- (progn
- (setq A (car ps) B (cadr ps) C (caddr ps) D (cadddr ps))
- (setq I (inters A C B D))
- (setq an (angle I E))
- (setq A0 (GEO:Angle1 I an A))
- (while (setq ps (cdr ps))
- (setq ax (geo:angle1 I an (car ps)))
- (if (大于 ax A0)
- (setq a0 ax X A A B B C C D D X)
- )
- )
- (setq B1 (inters B E A D nil))
- (setq C1 (inters C E A D nil))
- (setq D1 (distance A D))
- (setq D2 (distance C D))
-
- (setq SS (GEO:Cen_Foci A C1 D B1))
- (setq P (caddr ss))
- (setq F (inters P E C D nil))
- (if (setq X (ELL:5T A B C F P))
- (setq s (cons X s))
- )
- (setq Q (cadr ss))
- (setq G (inters Q E C D nil))
- (setq H (inters Q E B C nil))
- (if (setq x (Ell:5T A B H G D))
- (setq s (cons X s))
- )
- )
- )
- )
题25:已知椭圆一切线及和椭圆上四点,求此椭圆。
- ;;;=============================================================
- ;;; To describe an ellipse, four points on the curve A, B, C, D,
- ;;; and a tangent PQ being given
- ;;; Note: Page 139, Problem 87
- ;;; 功能: 已知椭圆一切线及和椭圆上四点,求此椭圆。
- ;;; 输入: 椭圆上的四点A,B,C,D和其切线PQ。
- ;;; 输出: 椭圆的解集。
- ;;;=============================================================
- (defun ELL:T4P (A B C D P Q / E F G H X S l)
- (setq l (ALG:Graham (list A B C D)))
- (setq A (car l) B (cadr l) C (caddr L) D (cadddr L))
- (setq E (inters A B P Q nil))
- (setq F (inters B C P Q nil))
- (setq G (inters C D P Q nil))
- (setq H (inters D A P Q nil))
-
- (foreach n (cdr (GEO:Cen_Foci E G F H))
- (Ent:make_point n)
- (if (setq x (ELL:5P A B C D N))
- (setq S (cons x S))
- )
- )
- (reverse S)
- )
题26:过五点画一个椭圆。
此题可用解方程法,也可用作图法。下面是作图法代码:
- ;;;=============================================================
- ;;; To describe an ellipse, five points on the curve being given
- ;;; Note: Page 138, Problem 86
- ;;; 功能: 过五点画一个椭圆(几何法)
- ;;; 输入: 椭圆上的五点P1,P2,P3,P4,P5.
- ;;; 输出: 椭圆的解。
- ;;;=============================================================
- (defun ELL:5P_1 (p1 p2 p3 p4 p5 / p12 p23 p34 p45 t2 t3 t4 t23 t34 t42 m23 m34 m42 cen lst)
- (setq lst (ALG:Graham (list p1 p2 p3 p4 p5)))
- (if (= (length lst) 5)
- (progn
- (setq p1 (car lst))
- (setq p4 (cadr lst))
- (setq p2 (caddr lst))
- (setq p5 (cadddr lst))
- (setq p3 (last lst))
- (setq p12 (inters p5 p1 p2 p3 nil))
- (setq p23 (inters p1 p2 p3 p4 nil))
- (setq p34 (inters p2 p3 p4 p5 nil))
- (setq p45 (inters p3 p4 p5 p1 nil))
- (setq t2 (inters p12 p23 p4 p5 nil))
- (setq t3 (inters p23 p34 p5 p1 nil))
- (setq t4 (inters p34 p45 p1 p2 nil))
-
- (if (setq t23 (inters t2 p2 t3 p3 nil))
- (if (setq t34 (inters t3 p3 t4 p4 nil))
- (setq m23 (GEO:Midpoint p2 p3)
- m34 (GEO:Midpoint p3 p4)
- cen (inters t23 m23 t34 m34 nil)
- )
- (setq t42 (inters t4 p4 t2 p2 nil)
- m42 (GEO:Midpoint p4 p2)
- m23 (GEO:Midpoint p2 p3)
- cen (inters t23 m23 t42 m42 nil)
- )
- )
- (setq t42 (inters t4 p4 t2 p2 nil)
- t34 (inters t3 p3 t4 p4 nil)
- m34 (GEO:Midpoint p3 p4)
- m42 (GEO:Midpoint p4 p2)
- cen (inters t42 m42 t34 m34 nil)
- )
- )
- (ELL:C3P cen p2 p3 p4)
- )
- )
- )
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
评分
-
查看全部评分
"觉得好,就打赏"
共1人打赏
|