lily1117 发表于 2010-5-19 11:17:00

求一小程序~~~

<p>用Visual Lisp编写一个知道三点后自动形成闭合四边形的程序~~</p>

vladimir 发表于 2016-10-24 16:15:58

非常不错的程序,谢谢楼主能提出这么好的问题。

ZZXXQQ 发表于 2010-5-19 20:34:00

四边形有四个点,第四个点如何求得?给个图例。

lily1117 发表于 2010-5-20 19:55:00

<p>知道三点就等于知道两点加边长就能知道第四个点了 </p><p><shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" opreferrelative="t" ospt="75" coordsize="21600,21600"><span lang="EN-US" style="FONT-FAMILY: 宋体; FONT-SIZE: 10.5pt; mso-bidi-font-family: &quot;Times New Roman&quot;; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA;"><shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" opreferrelative="t" ospt="75" coordsize="21600,21600">&nbsp;<stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path oconnecttype="rect" gradientshapeok="t" oextrusionok="f"></path><lock aspectratio="t" vext="edit"></lock></shapetype><shape id="_x0000_i1025" type="#_x0000_t75" style="WIDTH: 273.75pt; HEIGHT: 162.75pt;"><imagedata otitle="" src="file:///C:\Users\sony\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png"></imagedata></shape><p class="MsoNormal" style="LINE-HEIGHT: 125%; TEXT-INDENT: 21pt; MARGIN: 3pt 0cm; LAYOUT-GRID-MODE: char; mso-layout-grid-align: none; mso-char-indent-count: 2.0;"><span style="LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; COLOR: black; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt;">已知<span lang="EN-US">1,2两个房角点和边长L,求第3,4个房角点,可按下式计算得到:</span><p></p></p><p align="center" class="MsoNormal" style="TEXT-ALIGN: center; LINE-HEIGHT: 125%; MARGIN: 3pt 0cm; LAYOUT-GRID-MODE: char; mso-layout-grid-align: none;"><span style="POSITION: relative; TOP: 42pt; mso-text-raise: -42.0pt;"><shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" opreferrelative="t" ospt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path oconnecttype="rect" gradientshapeok="t" oextrusionok="f"></path><lock aspectratio="t" vext="edit"></lock></shapetype><shape id="_x0000_i1025" type="#_x0000_t75" oole="" style="WIDTH: 89.25pt; HEIGHT: 107.25pt;"><imagedata otitle="" src="file:///C:\Users\sony\AppData\Local\Temp\msohtmlclip1\01\clip_image001.wmz"></imagedata></shape></span><p></p></p><p></p></span></shapetype></span></p><p class="MsoNormal" style="LINE-HEIGHT: 125%; TEXT-INDENT: 21pt; MARGIN: 3pt 0cm; LAYOUT-GRID-MODE: char; mso-layout-grid-align: none; mso-char-indent-count: 2.0;">已知<span lang="EN-US">1,2两个房角点和边长L,求第3,4个房角点,可按下式计算得到:</span><p></p></p><p align="center" class="MsoNormal" style="TEXT-ALIGN: center; LINE-HEIGHT: 125%; MARGIN: 3pt 0cm; LAYOUT-GRID-MODE: char; mso-layout-grid-align: none;"><span style="POSITION: relative; TOP: 42pt; mso-text-raise: -42.0pt;"><shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" opreferrelative="t" ospt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path oconnecttype="rect" gradientshapeok="t" oextrusionok="f"></path><lock aspectratio="t" vext="edit"></lock></shapetype><shape id="_x0000_i1025" type="#_x0000_t75" oole="" style="WIDTH: 89.25pt; HEIGHT: 107.25pt;"><imagedata otitle="" src="file:///C:\Users\sony\AppData\Local\Temp\msohtmlclip1\01\clip_image001.wmz"></imagedata></shape></span><p></p></p><p></p>

ZZXXQQ 发表于 2010-5-21 16:08:00

如果是矩形是可以求得第四点。是四边形就没办法求了。你要的四边形是否是矩形?

lily1117 发表于 2010-5-23 09:21:00

ZZXXQQ发表于2010-5-21 16:08:00static/image/common/back.gif如果是矩形是可以求得第四点。是四边形就没办法求了。你要的四边形是否是矩形?

<p>是的&nbsp; 是矩形~~</p>

ZZXXQQ 发表于 2010-5-24 11:02:00

矩形的边与哪两点平行?

ZZXXQQ 发表于 2010-5-25 20:09:00

这样行吗?<br/><br/>;三点画矩形 明经 ZZXXQQ 2010.5.25<br/>(defun c:tt ()<br/>&nbsp;(setvar "CMDECHO" 0)<br/>&nbsp;(setq oldos (getvar "OSMODE"))<br/>&nbsp;(if (and<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq p1 (getpoint "\n第一点 :"))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq p2 (getpoint "\n第二点(基准边) :"))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq p3 (getpoint "\n第三点 :"))<br/>&nbsp;&nbsp;&nbsp;&nbsp; ) (progn<br/>&nbsp; (setq p4 (inters p1 p2 (polar p3 (+ (/ pi 2) (angle p1 p2)) 10) p3 nil))<br/>&nbsp; (setq ang (angle p4 p3)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; w (distance p4 p3)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p3 (polar p1 ang w)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p4 (polar p2 ang w))<br/>&nbsp; (setvar "OSMODE" 0)<br/>&nbsp; (command ".pline" p2 p1 p3 p4 "c")<br/>&nbsp;))<br/>&nbsp;(setvar "OSMODE" oldos)<br/>&nbsp;(setvar "CMDECHO" 1)<br/>&nbsp;(princ)<br/>)<br/>

lily1117 发表于 2010-5-26 16:49:00

谢谢~~

jslxt 发表于 2011-10-22 20:02:41

淡定淡定淡淡的

mycad 发表于 2013-6-21 10:46:01

超级版主ZZXXQQ的程序简洁明了,学习了,谢谢!
页: [1] 2
查看完整版本: 求一小程序~~~