多边形的时针方向与法线方向

从相反的法线方向观察,顺时针还是逆时针是相反的。

多边形的时针方向与法线方向的关系呈右手法则关系。

GoogleEarth中的面具有时针方向,法线方向为正向,反之为负向

GoogleEarth的垂面在法线方向为亮色,反向为暗色

GoogleEarth的水平面或斜面无论法线指向天空还是地面,背离地面的一侧总是亮色。

要保证多边形的各侧向垂面的法线总是朝外(保持外侧面为亮面),若该多边形为顺时针,则各垂面边框按从高点起始,先画水平线到下点,再画垂线到低点,最后回到高点的方法。反之,若该多边形为逆时针,则各垂面边框应从高点开始,先画垂线到低点,再画水平线到下点,最后回到高点的方法。

换句话说,假设各垂面都从高点开始画,如果多边形是顺时针的,则先画水平线;如果多边形是逆时针的,则先画垂直线。归纳为 “顺高水,逆高垂”。

 

凸多边形只有具有一个时针方向,但凹多边形的凸边和凹边时针方向不相同。一个多边形无论凹凸,判断每相邻两边的时针方向更有意义。由3点构成的两边,计算这3点的卷积(CorssProduct),卷积为正是逆时针,卷积为负是顺时针。

卷积=(ΔXi,ΔYi)×(ΔXi+1,ΔYi+1),即 cp=(xi-xi-1)×(yi+1-yi)-(yi-yi-1)×(xi+1-xi), 若cp>0,该点为逆时针点。反之为顺时针点。

同时,如果一个多边形是凸多边形,那么,它每个顶点的卷积都为正或都为负。凹多边形的所有顶点的卷积有的为正有的为负。

此外,如果多边形存在重合的两点,或连续3点在一条直线上,那么,卷积=0,没有时针方向,也不区分凹凸。

 

代码示例1:判断一个多边形是顺时针还是逆时针

/*

   Return the clockwise status of a curve, clockwise or counterclockwise

   n vertices making up curve p

   return 0 for incomputables eg: colinear points

          CLOCKWISE == 1

          COUNTERCLOCKWISE == -1

   It is assumed that

   - the polygon is closed

   - the last point is not repeated.

   - the polygon is simple (does not intersect itself or have holes)

*/

int ClockWise(XY *p,int n)

{

   int i,j,k;

   int count = 0;

   double z;

 

   if (n < 3)

      return(0);

 

   for (i=0;i<n;i++) {

      j = (i + 1) % n;

      k = (i + 2) % n;

      z  = (p[j].x - p[i].x) * (p[k].y - p[j].y);

      z -= (p[j].y - p[i].y) * (p[k].x - p[j].x);

      if (z < 0)

         count--;

      else if (z > 0)

         count++;

   }

   if (count > 0)

      return(COUNTERCLOCKWISE);

   else if (count < 0)

      return(CLOCKWISE);

   else

      return(0);

}

 

代码示例2:判断一个多边形是凸多边形还是凹多边形

   Return whether a polygon in 2D is concave or convex

   return 0 for incomputables eg: colinear points

          CONVEX == 1

          CONCAVE == -1

   It is assumed that the polygon is simple

   (does not intersect itself or have holes)

*/

int Convex(XY *p,int n)

{

   int i,j,k;

   int flag = 0;

   double z;

 

   if (n < 3)

      return(0);

 

   for (i=0;i<n;i++) {

      j = (i + 1) % n;

      k = (i + 2) % n;

      z  = (p[j].x - p[i].x) * (p[k].y - p[j].y);

      z -= (p[j].y - p[i].y) * (p[k].x - p[j].x);

      if (z < 0)

         flag |= 1;

      else if (z > 0)

         flag |= 2;

      if (flag == 3)

         return(CONCAVE);

   }

   if (flag != 0)

      return(CONVEX);

   else

      return(0);

}

 

转载于:https://www.cnblogs.com/mol1995/p/10890367.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/275123.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

裂墙推荐!再也不用求后端给接口了...

大家好&#xff0c;我是若川。今天咱们来介绍一款强大的云服务平台&#xff01;MemFire Cloud注册即享5GB存储空间、每月100万读额度和每月10万写额度。平台入口&#xff1a;https://memfiredb.com/今天&#xff08;12月10号&#xff09;还有限时的送书活动&#xff01;感兴趣的…

1.今日标签:视频价值一千字

I love the App Store. It looks and works better than ever. But also, I love tricky design challenges. How do you improve something that already works great?我喜欢App Store。 它的外观和工作比以往更好。 但是我也很棘手 设计挑战。 您如何改善已经很好的工作&a…

蚂蚁金服疯了吗?大动作,非裁员,年底全员涨薪又涨假期!!!

大家好&#xff0c;我是若川。最近组织了源码共读活动&#xff0c;感兴趣的可以点此加我微信 ruochuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。以下分享一篇水文&#…

书呆子rico_寻找设计和类型书呆子的清道夫

书呆子ricoI studied graphic design at an art school where typography was a core focus. I took 3 levels of typography classes and nearly lost my mind! But even before I studied type, I had a soft spot for signage. It’s one of the themes I enjoy shooting mo…

WebStorm 和 VsCode 的结合体来了!

大家好&#xff0c;我是若川。最近组织了源码共读活动&#xff0c;感兴趣的可以点此加我微信 ruochuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。周末分享下简单的文章~每…

设计的概念以及含义_什么是设计概念? 以及为什么您应该始终从一个开始

设计的概念以及含义We work on designs almost every day, and we use different design methods to make the design usable, aesthetically appealing, and likable. But, many times, those well-crafted designs fail to reach a level to become market differentiator or…

netflix 工作原理_Netflix如何在屏幕后面工作?

netflix 工作原理Netflix has reported to have over 182 million subscribers worldwide in the first quarter of 2020 (Of course, these numbers don’t include freeloaders like me, who’s family or friends have been generous enough to share their account and pas…

B/S开发中浏览器的工具利器

B/S系统的前端浏览器性能和标准兼容方面是开发中的一个重要问题&#xff0c;把IE中使用的各种工具整理一下&#xff0c;对于开发中标准、规范检查等起到一个作用 主要是三个主流的浏览器和相关的插件 FireFox Firefox-latest.exe firebug-1.7.3-fx.xpi yslow-3.0.3-fx.xpi 安装…

你需要的git命令大全来了

大家好&#xff0c;我是若川。最近组织了源码共读活动&#xff0c;感兴趣的可以点此加我微信 ruochuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。虽然你可能用图形化工具…

uitest_您在Swift中的第一个UITest

uitest测试中 (TESTING) 什么是自动UITest&#xff1f; (What Is Automated UITest?) When we speak about testing, we usually think about unit testing. However, there is another kind of test that is extremely powerful and useful in the app world: UITests.当谈到…

UltraGrid中实现下拉Grid(UltraDropDown)

昨天提到了如何在Grid的Cell中下拉列表框&#xff0c;今天将演示如何在Grid的Cell中实现下拉Grid&#xff0c;这也是UltraGrid提供的一个很好的特性。 1&#xff0e; 拖放一个Grid到Form中&#xff0c;添加一些Band Column&#xff0c;然后设置Team栏位为DropDown或DropDownLis…

Vue团队核心成员开发的39行小工具 install-pkg 安装包,值得一学!

1. 前言大家好&#xff0c;我是若川。最近组织了源码共读活动&#xff0c;感兴趣的可以点此加我微信 ruochuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。本文仓库 https:…

人脸识别及对比_没有“色彩对比可及性的神话”

人脸识别及对比重点 (Top highlight)When you need to work on interfaces, color contrast is a real thing you have to take into account to make it accessible. You have the right to be afraid of losing part of the aesthetics of your beautifully well-designed in…

Entity Framework4.0 (一)概述(EF4 的Database First方法)

Entity Framework4.0(以后简称&#xff1a;EF4)&#xff0c;是Microsoft的一款ORM&#xff08;Object-Relation-Mapping&#xff09;框架。同其它ORM&#xff08;如&#xff0c;NHibernate,Hibernate&#xff09;一样&#xff0c;一是为了使开发人员以操作对象的方式去操作关系…

mysql 相关子查询使用【主表得数据需要扩展(统计数据依赖与其他表,但是与主表有关联)】...

2019独角兽企业重金招聘Python工程师标准>>> SELECT t.building,t.unit,t.room,t.ashcan ,(SELECT COUNT(a.resident_id) from t_address_book a where a.village_id t.village_id AND a.building t.building and a.room t.unit and a.house t.room and…

竟然被尤雨溪点赞了:我给Vue生态贡献代码的这一年

大家好&#xff0c;我是若川。最近组织了源码共读活动&#xff0c;感兴趣的可以点此加我微信 ruochuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。这篇文章在知乎被尤雨溪…

60款很酷的 jQuery 幻灯片演示和下载

jQuery 是一个非常优秀的 JavaScript 框架&#xff0c;使用简单灵活&#xff0c;同时还有许多成熟的插件可供选择&#xff0c;它可以帮助你在项目中加入漂亮的效果&#xff0c;其中之一就是幻灯片&#xff0c;一种在有限的网页空间内展示系列项目时非常好的方法。今天这篇文章要…

流体式布局与响应式布局_将固定像素设计转换为流体比例布局

流体式布局与响应式布局Responsive web design has been a prime necessity for every enterprise ever since Google announced that responsive, mobile-friendly websites will see a hike in their search engine rank in 2015.自Google宣布响应式&#xff0c;移动友好型网…

怎样开发一个 Node.js 命令行工具包

大家好&#xff0c;我是若川。最近组织了源码共读活动&#xff0c;感兴趣的可以点此加我微信 ruochuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。源码共读活动很多都是读…

印刷报价系统源码_皇家印刷术-设计系统案例研究

印刷报价系统源码重点 (Top highlight)Typography. It’s complicated. With Product Design, it’s on every screen. Decisions for a type scale affect literally every aspect of a product. When you’re working with an existing product, defining typography can fee…