声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1815|回复: 2

[编程技巧] matlab 中有没有直接求多边形内角的函数

[复制链接]
发表于 2007-5-28 17:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
求一个任意多边形的每一个内角。当然,自己写代码可以实现,但是matlab有没有自带的函数可以应用?

我通过先求每条边的斜率k,然后通过atan函数来求每个内角myangle,可是在k和myangle中会有NaN产生!!
换句话说,在一位矩阵k和myangle中会有NaN产生!!

斜率:
k(i)=(y(i+1)-y(i))./(x(i+1)-x(i));
内角:
myangle(i)=atan(abs(k(i+1)-k(i))./(1+k(i+1).*k(i));

[ 本帖最后由 eight 于 2007-5-28 17:27 编辑 ]
回复
分享到:

使用道具 举报

发表于 2007-5-28 18:07 | 显示全部楼层
NaN产生 说明 除数为零了。
   应该加个判断语句,如果斜率为 无穷大的就不用求了。

   这种方法有时候好像不太管用。。   不知道用三角形  求内角 是不是好点。
 楼主| 发表于 2007-6-4 12:12 | 显示全部楼层
我用如下代码实现了任意多边形两相邻内角之差不大于某个值:(令我满意的是它避免了循环的使用)
相邻角比较2007 5 27
%     x1=x(1:end-1)     % 因为x(1)=x(end),所以这里取x1=x(1:end-1)
%     y1=y(1:end-1)
%     xx=x1(2:end);xx=[xx,x1(1)]
%     yy=y1(2:end);yy=[yy,y1(1)]
%     aa=yy-y1
%     bb=xx-x1
%     k=aa./bb
%     index_k=isnan(k)
%     if  any(index_k==1)
%         n=n-1;
%         continue
%    end
%    kk=k(2:end);kk=[kk,k(1)];
%    c=kk-k;d=1+kk.*k;
%    myangle1=atan(abs(c)./d)
%    myangle2=myangle1(2:end);
%    myangle2=[myangle2,myangle1(1)]
%    myangle=myangle2-myangle1
%    if max(abs(myangle))>(2*pi/S(n))*0.5   % S(n)为第n多边形边数
%       n=n-1
%       continue
%    end

如有不妥之处,还望高手指正!

[ 本帖最后由 canglang 于 2007-6-4 17:39 编辑 ]
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-27 12:26 , Processed in 0.087556 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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