找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: tctabc

[1201]怎样编写一个梯形的面积计算列式呢?

[复制链接]
 楼主| 发表于 2005-12-5 12:53:54 | 显示全部楼层
最初由 xyp1964 发布
[B]首先要判断是否四边形:
(= (length (xyp-get-Vertexs ename 3)) 4) [/B]


先谢谢版主的解答
版主真是利害的高手
要好好的理解一下您的程序

另在请问版主
如果要判断 弧形面积 及 三角形面积 该怎样判断呢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-12-5 13:42:55 | 显示全部楼层
判断“三角形”的条件:
(= (length (xyp-get-Vertexs ename 3)) 3)

标三角形的面积及公式较简单,而弧形的就相对难了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-5 15:28:27 | 显示全部楼层
最初由 xyp1964 发布
[B]判断“三角形”的条件:
(= (length (xyp-get-Vertexs ename 3)) 3)

标三角形的面积及公式较简单,而弧形的就相对难了! [/B]


版主您提供的 xyp-get-Vertexs  这函数
是您自己写的是吗?
如果不用这组来判断
那可以写的出判断条件程序吗?

另外弧形的部分小弟的想法是用弧形面积公式
弧的两端连线并设为底(L).
再由线的中点垂直延伸至弧面中点,
此连接线段设为高(H).
再列出计算式为 2/3*L*H
但仍有一问题,就是此公式算法与电脑列出的面积值为少.

但也较符合手算方法
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2005-12-5 20:45:51 | 显示全部楼层

vertexs见16楼

思考了兩天,終於通過了一樓的測試(不能自動標注尺寸),最終的結果是將面積等信息寫在梯形的對角線的交點上.
思路:
1.先求梯形的四個角點的點表.(故這兩天收集了些表的函數).
2.四角點求出來後,思路同19樓.
3.程序中用到的子函數,見下列鏈接:(vertexs见16楼)
3.1.  http://www.xdcad.net/forum/showt ... 2444330#post2444330
3.2.  http://www.xdcad.net/forum/showthread.php?s=&threadid=496647
3.3.  http://www.xdcad.net/forum/showthread.php?s=&threadid=471571
3.4. 求四角點子程序:
[PHP](defun 4ptlist (ptlist / i j lst lst1 lst2 lst3)
  (setq i (length ptlist))
  (setq j 2)
  (setq lst (list (nth 0 ptlist) (nth 1 ptlist)))
  (while (< j i)
    (if (pd-ptlst-gx (cons (nth j ptlist) lst))
      (setq lst (cons (nth j ptlist) lst))
    )
    (setq j (1+ j))
  )
  (setq ptlist (li_subtract ptlist lst))
  (setq lst1 (list (xd-points_miny_minx lst) (xd-points_maxy_maxx lst)))
  (setq i (length ptlist))
  (setq j 2)
  (setq lst (list (nth 0 ptlist) (nth 1 ptlist)))
  (while (< j i)
    (if (pd-ptlst-gx (cons (nth j ptlist) lst))
      (setq lst (cons (nth j ptlist) lst))
    )
    (setq j (1+ j))
  )
  (setq ptlist (li_subtract ptlist lst))
  (if (pd-ptlst-gx (cons (car lst1) lst))
    (setq lst2 (cons (car lst1) lst))
  )
  (if (pd-ptlst-gx (cons (cadr lst1) lst))
    (setq lst2 (cons (cadr lst1) lst))
  )
  (setq lst2 (list (xd-points_miny_minx lst2) (xd-points_maxy_maxx lst2)))
  (setq i (length ptlist))
  (setq j 2)
  (setq lst (list (nth 0 ptlist) (nth 1 ptlist)))
  (while (< j i)
    (if (pd-ptlst-gx (cons (nth j ptlist) lst))
      (setq lst (cons (nth j ptlist) lst))
    )
    (setq j (1+ j))
  )
  (if (pd-ptlst-gx (cons (car lst1) lst))
    (setq lst3 (cons (car lst1) lst))
  )
  (if (pd-ptlst-gx (cons (cadr lst1) lst))
    (setq lst3 (cons (cadr lst1) lst))
  )
  (if lst3
    (if (pd-ptlst-gx (cons (car lst2) lst3))
      (setq lst3 (cons (car lst2) lst3))
    )
    (if (pd-ptlst-gx (cons (car lst2) lst))
      (setq lst3 (cons (car lst2) lst))
    )
  )
  (if lst3
    (if (pd-ptlst-gx (cons (cadr lst2) lst3))
      (setq lst3 (cons (cadr lst2) lst3))
    )
    (if (pd-ptlst-gx (cons (cadr lst2) lst))
      (setq lst3 (cons (cadr lst2) lst))
    )
  )
  (setq lst3 (list (xd-points_miny_minx lst3) (xd-points_maxy_maxx lst3)))
  (setq lst4 (li-union (li-union lst1 lst2) lst3))
)[/PHP]
主程序:
[PHP](defun c:test (/ h mj interpoint l1 l2 polygon pt1 pt2 pt3 pt4 str)
  (setq ptlist (vertexs (car (setq polygon (entsel "\n請點選梯形:")))))
  (setq ptlist (4ptlist ptlist))
  (if (= (length ptlist) 4)
    (progn
      (setq mj (vlax-curve-getarea (car polygon)))
      (setq pt1 (nth 0 ptlist)
            pt2 (nth 1 ptlist)
            pt3 (nth 2 ptlist)
            pt4 (nth 3 ptlist)
      )
      (if (inters
            pt1
            pt2
            pt3
            pt4
            nil
          )
        (princ "\n相交")
        (progn
          (setq l1 (max
                     (distance pt1 pt2)
                     (distance pt3 pt4)
                   )
                l2 (min
                     (distance pt1 pt2)
                     (distance pt3 pt4)
                   )
          )
          (if (setq interspoint (inters
                                  pt1
                                  pt4
                                  pt2
                                  pt3
                                  t
                                )
              )
            interspoint
            (setq interspoint (inters
                                pt1
                                pt3
                                pt2
                                pt4
                                t
                              )
            )
          )
        )
      )
      (if (inters
            pt1
            pt3
            pt2
            pt4
            nil
          )
        (princ "\n相交")
        (progn
          (setq l1 (max
                     (distance pt1 pt3)
                     (distance pt2 pt4)
                   )
                l2 (min
                     (distance pt1 pt3)
                     (distance pt2 pt4)
                   )
          )
          (if (setq interspoint (inters
                                  pt1
                                  pt2
                                  pt3
                                  pt4
                                  t
                                )
              )
            interspoint
            (setq interspoint (inters
                                pt1
                                pt4
                                pt2
                                pt3
                                t
                              )
            )
          )
        )
      )
      (if (inters
            pt1
            pt4
            pt2
            pt3
            nil
          )
        (princ "\n相交")
        (progn
          (setq l1 (max
                     (distance pt1 pt4)
                     (distance pt2 pt3)
                   )
                l2 (min
                     (distance pt1 pt4)
                     (distance pt2 pt3)
                   )
          )
          (if (setq interspoint (inters
                                  pt1
                                  pt2
                                  pt3
                                  pt4
                                  t
                                )
              )
            interspoint
            (setq interspoint (inters
                                pt1
                                pt3
                                pt2
                                pt4
                                t
                              )
            )
          )
        )
      )
      (if (and
            l1
            l2
          )
        (progn
          (setq h (/ (* mj 2) (+ l1 l2)))
          (setq str (strcat "L1=" (rtos l1) "&L2=" (rtos l2) "&H="
                            (rtos h) "&S=(" (rtos l1) "+" (rtos l2) ")*"
                            (rtos h) "/2=" (rtos mj)
                    )
          )
          (command "TEXT" "J" "C" interspoint "" "" str)
        )
      )
    )
    (princ "\n非四邊形!")
  )
  (princ)
)
[/PHP]
寫得有點繁,但是畢竟是自己完成的.
請XYP版主看看是否有問題.能否在主體不變的情況下(仍用上面的函數),將程序再簡化點.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-12-6 13:51:48 | 显示全部楼层
楼上:
vertexs 函数未定义!无法测试!
为什么不把你信箱里的“垃圾”清一清?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-12-6 15:05:58 | 显示全部楼层
三角形底、高、腰长、面积公式标注
  1. [FONT=courier new](load "xyp_lib");版本 V.20051205
  2. ;|加载通用函数(可在签名栏直接下载)
  3. 如果已经下载xyp_lib并放到搜索路径下可以不再下载!
  4. 利用以下任何一种方式(首选第一种)即可加载和运行通用函数内的所有子程序:
  5. ★1·在acad.lsp中增加(load"xyp_lib")
  6. ■2·在每个程序内增加(load"xyp_lib")
  7. ■3·在command下,输入(load"xyp_lib")
  8. ■4·在菜单.mnl中增加(load"xyp_lib")
  9. ■5·将xyp_lib.vlx文件直接拽到cad屏幕
  10. ★通用函数下载地址:
  11. [url]http://www.xdcad.net/forum/attachme...&postid=1606661[/url]
  12. |;

  13. ;;;三角形面积边长、面积公式标注
  14. (defun c:test ()
  15.   (CMDLASC0)
  16.   (setq        ss (ssget '((0 . "*POLYLINE")))
  17.         i  -1
  18.   )
  19.   (setvar "OSMODE" 0)
  20.   (while (setq s1 (ssname ss (setq i (1+ i))))
  21.     (if        (= (length (setq ptn (xyp-get-vertexs s1 3))) 3)
  22.       (progn
  23.         (setq pt1  (car ptn)
  24.               pt2  (cadr ptn)
  25.               pt3  (caddr ptn)
  26.               pt4  (inters pt1
  27.                            (polar pt1 (+ (angle pt2 pt3) (* pi 0.5)) 100)
  28.                            pt2
  29.                            pt3
  30.                            nil
  31.                    )
  32.               pt28 (xyp-get-MinMaxPoint s1 2)
  33.               txt1 (/ (* (distance pt2 Pt3) (distance pt1 Pt4)) 2.0)
  34.               txt2 (strcat "S "
  35.                            (rtos txt1 2 3)
  36.                            " = "
  37.                            (rtos (distance pt2 Pt3) 2 3)
  38.                            "×"
  39.                            (rtos (distance pt1 Pt4) 2 3)
  40.                            "/"
  41.                            (itoa 2)
  42.                    )
  43.         )
  44.         (mkla "尺寸标注" 4)
  45.         (subtxt pt1 pt2)
  46.         (subtxt pt2 pt3)
  47.         (subtxt pt1 pt3)
  48.         (subtxt pt1 pt4)
  49.         (xyp-Text 8 pt28 txt2)
  50.         (mkla "辅助线" 1)
  51.         (command "line" pt1 pt4 "")

  52.       )
  53.     )
  54.   )
  55.   (CMDLA1)
  56. )
  57. (defun subtxt (Point1 Point2 / ang)
  58.   (setq ang (rad2ang (angle Point1 Point2)))
  59.   (while (> ang 90)
  60.     (setq ang (- ang 180))
  61.   )
  62.   (command "text"
  63.            "j"
  64.            "BC"
  65.            (xyp-get-RightPoint Point1 Point2 (* sc 100))
  66.            (* sc 300)
  67.            ang
  68.            (rtos (distance Point1 Point2) 2 3)
  69.   )
  70. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-6 15:21:07 | 显示全部楼层
xyp版主
您这副程式中的xyp-get-RightPoint这函数
是做什么用途的呢
可以公布一下做法吗

另外这段 (* sc 100)   (* sc 300) 有何含意呢
烦请版主可以解惑一下

谢谢

(defun subtxt (Point1 Point2 / ang)
  (setq ang (rad2ang (angle Point1 Point2)))
  (while (> ang 90)
    (setq ang (- ang 180))
  )
  (command "text"
           "j"
           "BC"
           (xyp-get-RightPoint Point1 Point2 (* sc 100))
           (* sc 300)
           ang
           (rtos (distance Point1 Point2) 2 3)
  )
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-12-6 18:16:29 | 显示全部楼层
示范六点物件列示座标:
只要改一下就可以变成显示其他的点形.

[PHP]
(defun c:ts ( / polygon pt1 pt2 pt3 pt4 pt5 pt6 ptlist str1 str2 str3

str4 str5 str6)

(setq ptlist (vertexs (car (setq polygon (entsel "\n请点选物件:")))))
(setq   pt1 (nth 0 ptlist)
        pt2 (nth 1 ptlist)
        pt3 (nth 2 ptlist)
        pt4 (nth 3 ptlist)
        pt5 (nth 4 ptlist)
        pt6 (nth 5 ptlist)
)

(setq str1 (strcat "PT1:X=" (rtos (car pt1) 2 4) ", Y=" (rtos (cadr

pt1) 2 4)))
(setq str2 (strcat "PT2:X=" (rtos (car pt2) 2 4) ", Y=" (rtos (cadr

pt2) 2 4)))
(setq str3 (strcat "PT3:X=" (rtos (car pt3) 2 4) ", Y=" (rtos (cadr

pt3) 2 4)))
(setq str4 (strcat "PT4:X=" (rtos (car pt4) 2 4) ", Y=" (rtos (cadr

pt4) 2 4)))
(setq str5 (strcat "PT5:X=" (rtos (car pt5) 2 4) ", Y=" (rtos (cadr

pt5) 2 4)))
(setq str6 (strcat "PT6:X=" (rtos (car pt6) 2 4) ", Y=" (rtos (cadr

pt6) 2 4)))

(command "text" "j" "tl" pt1 "3" "0" str1)
(command "text" "j" "tl" pt2 "3" "0" str2)
(command "text" "j" "tl" pt3 "3" "0" str3)
(command "text" "j" "tl" pt4 "3" "0" str4)
(command "text" "j" "tl" pt5 "3" "0" str5)
(command "text" "j" "tl" pt6 "3" "0" str6)

(prin1))


(defun vertexs (ename / plist pp n)
  (setq obj (vlax-ename->vla-object ename))
  (setq plist (vlax-safearray->list
              (vlax-variant-value
              (vla-get-coordinates obj)
              ) )
  )
  (setq n 0)
  (repeat (/ (length plist) 2)
  (setq pp (append
           pp
           (list (list (nth n plist) (nth (1+ n) plist) ) ) )
           )
  (setq n (+ n 2))
  )
  pp
)

[/PHP]

另请教可以将下列这段程序改变为自动判断物件顶点自动编号列出吗?

(setq   pt1 (nth 0 ptlist)
        pt2 (nth 1 ptlist)
        pt3 (nth 2 ptlist)
        pt4 (nth 3 ptlist)
        pt5 (nth 4 ptlist)
        pt6 (nth 5 ptlist)
)

(setq str1 (strcat "PT1:X=" (rtos (car pt1) 2 4) ", Y=" (rtos (cadr

pt1) 2 4)))
(setq str2 (strcat "PT2:X=" (rtos (car pt2) 2 4) ", Y=" (rtos (cadr

pt2) 2 4)))
(setq str3 (strcat "PT3:X=" (rtos (car pt3) 2 4) ", Y=" (rtos (cadr

pt3) 2 4)))
(setq str4 (strcat "PT4:X=" (rtos (car pt4) 2 4) ", Y=" (rtos (cadr

pt4) 2 4)))
(setq str5 (strcat "PT5:X=" (rtos (car pt5) 2 4) ", Y=" (rtos (cadr

pt5) 2 4)))
(setq str6 (strcat "PT6:X=" (rtos (car pt6) 2 4) ", Y=" (rtos (cadr

pt6) 2 4)))

(command "text" "j" "tl" pt1 "3" "0" str1)
(command "text" "j" "tl" pt2 "3" "0" str2)
(command "text" "j" "tl" pt3 "3" "0" str3)
(command "text" "j" "tl" pt4 "3" "0" str4)
(command "text" "j" "tl" pt5 "3" "0" str5)
(command "text" "j" "tl" pt6 "3" "0" str6)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-7 08:30:52 | 显示全部楼层
确实如果可以自动判断点数就不用写那么长了~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-12-7 09:00:12 | 显示全部楼层
最初由 xyz518mm 发布
[B]示范六点物件列示座标:
只要改一下就可以变成显示其他的点形.
[/B]
  1. [FONT=courier new](defun c:test ()
  2.   (CMDLA0)
  3.   (setq        ss (ssget '((0 . "*POLYLINE")))
  4.         i  -1
  5.   )
  6.   (while (setq s1 (ssname ss (setq i (1+ i))))
  7.     (setq ptn (xyp-get-Vertexs s1 3))
  8.     (if        (= (length ptn) 6)
  9.       (foreach pt ptn (xyp-ZB pt))
  10.     )
  11.   )
  12.   (CMDLA1)
  13. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-7 11:53:00 | 显示全部楼层
感谢XYP版主的解答
请教如果程序不用 xyp-get-Vertexs 这函数
运作可以完成吗?

另外 xyp-ZB 这函数是用来做什么用的呢?
烦请版主或各位高手们可以解答一下~
谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2005-12-7 23:45:14 | 显示全部楼层

求n多边形的角点表

求n多边形的角点表,多边形顶点数可能为n,可能大于n(即有可能有多点共线的顶点)
[PHP]
(defun pt (ptlistn / i j lst lst0 lst1 ptlist);主程序
  (setq ptlist ptlistn)
  (while (and
           ptlist
           (not (ptsonline ptlist))
         )
    (setq i (length ptlist))
    (setq j 2)
    (setq lst (list (nth 0 ptlist) (nth 1 ptlist)))
    (while (< j i)
      (if (ptsonline (cons (nth j ptlist) lst))
        (setq lst (cons (nth j ptlist) lst))
      )
      (setq j (1+ j))
    )
    (if (> (length lst) 2)
      (progn
        (setq lst1 (list (xd-points_miny_minx lst)
                         (xd-points_maxy_maxx lst)
                   )
        )
        (setq lst0 (li_subtract lst lst1))
        (setq ptlist (li-union (li_subtract ptlist lst) lst1))
        (setq ptlistn (li_subtract ptlistn lst0))
      )
      (progn
        (setq lst1 lst)
        (setq lst0 '())
        (setq ptlist (li_subtract ptlist lst))
        (setq ptlistn (li_subtract ptlistn lst0))
      )
    )
  )
  ptlistn
)
(defun xd-points_miny_minx (pts)       ; y優先於x
  (car (vl-sort pts '(lambda (e1 e2)
                       (if (equal (cadr e1) (cadr e2) 1e-10)
                         (< (car e1) (car e2))
                         (< (cadr e1) (cadr e2))
                       )
                     )
       )
  )
)
(defun xd-points_maxy_maxx (pts)       ; y優先於x
  (car (vl-sort pts '(lambda (e1 e2)
                       (if (equal (cadr e1) (cadr e2) 1e-10)
                         (> (car e1) (car e2))
                         (> (cadr e1) (cadr e2))
                       )
                     )
       )
  )
)
(defun li-union (lst1 lst2 / lst tmp);表并集
  (setq lst '())
  (foreach tmp lst2
    (if (not (member tmp lst1))
      (setq lst (cons tmp lst))
    )
  )
  (setq lst (reverse lst)
        lst (append
              lst1
              lst
            )
  )
  lst
)
(defun li_subtract (lst1 lst2 / lst);表差集
  (setq lst '())
  (if lst1
    (progn
      (foreach tmp lst1
        (if (not (member tmp lst2))
          (setq lst (cons tmp lst))
        )
      )
    )
  )
  (setq lst (reverse lst))
  lst
)
(defun vertexs (ename / plist pp n);求顶点表
  (setq obj (vlax-ename->vla-object ename))
  (setq plist (vlax-safearray->list (vlax-variant-value
                                                        (vla-get-coordinates obj)
                                    )
              )
  )
  (setq n 0)
  (repeat (/ (length plist) 2)
    (setq pp (append
               pp
               (list (list (nth n plist) (nth (1+ n) plist)))
             )
    )
    (setq n (+ n 2))
  )
  pp
)
(defun radtoang (n)弧度转角度
  (/ (* 180 n) pi)
)
(defun ptsonline (ptlist / angle01 i j yesorno);判断点表是否共线
  (if (> (setq i (length ptlist))
         2
      )
    (progn
      (setq angle01 (radtoang (angle (nth 0 ptlist) (nth 1 ptlist))))
      (setq j 2)
      (while (< j i)
        (if (or
              (equal (abs (- angle01 (radtoang (angle (nth 0 ptlist)
                                                      (nth j ptlist)
                                               )
                                     )
                          )
                     ) 180 1e-10
              )
              (equal (abs (- angle01 (radtoang (angle (nth 0 ptlist)
                                                      (nth j ptlist)
                                               )
                                     )
                          )
                     ) 0 1e-10
              )
            )
          (setq yesorno t)
          (setq yesorno nil)
        )
        (if yesorno
          (setq j (1+ j))
          (setq j i)
        )
      )
      yesorno
    )
    (setq yesorno t)
  )
)[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-12-8 00:22:50 | 显示全部楼层
我的想法:
梯形也是4边形,更宽一点说的n(n>=3)边形,只要能够得到n边形顶点坐标,就可以求得n边形的面积(划分成n-2个三角形进行计算,然后求和),不局限于梯形啊!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-8 08:02:03 | 显示全部楼层
那弧形的该怎么办呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-7 13:01 , Processed in 0.522501 second(s), 51 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表