Cesium计算多边形面积(十一)
//计算三角形面积
function triangleArea(p0, p1, p2) {
let v0 = Cesium.Cartesian3.subtract(p0, p1, new Cesium.Cartesian3())
let v1 = Cesium.Cartesian3.subtract(p2, p1, new Cesium.Cartesian3())
let cross = Cesium.Cartesian3.cross(v0, v1,v0);
return Cesium.Cartesian3.magnitude(cross) * 0.5
} //计算多边形面积
function area(positions) {
let result = 0
if (!Array.isArray(positions)) {
console.log('不是数组');
return result
} if (!(positions[0] instanceof Cesium.Cartesian3)) {
console.log('不是Cartesian3');
//转换为Cartesian3数组
positions = Transform.transformWGS84ArrayToCartesianArray(positions);
} //创建一个geometry
let geometry = Cesium.CoplanarPolygonGeometry.createGeometry(
Cesium.CoplanarPolygonGeometry.fromPositions({
positions: positions,
vertexFormat: Cesium.VertexFormat.POSITION_ONLY
})
) if (!geometry) {
console.log('不是geometry');
return result
} //顶点坐标数组p;
let flatPositions = geometry.attributes.position.values
console.log(flatPositions); //确定geometry的基本体的索引,也就是组成其的三角形的索引,每三个为一组,组成一个三角形
let indices = geometry.indices
console.log(indices); //计算三角形面积,最后加在一起
for (let i = 0; i < indices.length; i += 3) {
let p0 = Cesium.Cartesian3.unpack(
flatPositions,
indices[i] * 3,
new Cesium.Cartesian3()
)
console.log(p0); let p1 = Cesium.Cartesian3.unpack(
flatPositions,
indices[i + 1] * 3,
new Cesium.Cartesian3()
)
console.log(p1);
let p2 = Cesium.Cartesian3.unpack(
flatPositions,
indices[i + 2] * 3,
new Cesium.Cartesian3()
)
console.log(p2);
result += triangleArea(p0, p1, p2)
}
return result
} //一个正方形的四个端点
var p0 = new Cesium.Cartesian3(0,0,0);
var p1 = new Cesium.Cartesian3(1,0,0);
var p2 = new Cesium.Cartesian3(1,1,0);
var p3 = new Cesium.Cartesian3(0,1,0); var input = [p0,p1,p2,p3];
var output = area(input);
console.log(output);
顶点坐标数组flatPositions:

也就是顶点2、3、0组成一个三角形,0,1,2组成一个三角形
至于代码中为了要乘3,是为了保证每次取的数组是连续的,比如2、3、0乘3是6、9、0,从6开始取三个6,7,8,从9开始取三个9,10,11,从0开始取三个0,1,2,这样取到的三个点才是正确的三角形
用到的一些方法:
Cesium计算多边形面积(十一)的更多相关文章
- poj 1265 Area【计算几何:叉积计算多边形面积+pick定理计算多边形内点数+计算多边形边上点数】
题目:http://poj.org/problem?id=1265 Sample Input 2 4 1 0 0 1 -1 0 0 -1 7 5 0 1 3 -2 2 -1 0 0 -3 -3 1 0 ...
- 利用python计算多边形面积
最近业务上有一个需求,给出多边形面积. Google了一下,发现国内论坛给的算法都是你抄我我抄你,也不验证一下是否正确, 从 博客园到csdncsdn 然后传播到国内各个角落...真是无力吐槽了. 直 ...
- js版根据经纬度计算多边形面积(墨卡托投影)
[摘要:var earthRadiusMeters = 6371000.0; var metersPerDegree = 2.0 * Math.PI * earthRadiusMeters / 360 ...
- POJ 3907 Build Your Home | 计算多边形面积
给个多边形 计算面积 输出要四舍五入 直接用向量叉乘就好 四舍五入可以+0.5向下取整 #include<cstdio> #include<algorithm> #includ ...
- [C语言] 关于计算多边形面积的一点问题
[一道练习题] 面基 时间限制:1000ms 内存限制:65536kb 通过率:107/134 (79.85%) 正确率:107/319 (33.54%) 题目描述 按顺时针或逆时针顺序输入 ...
- leaflet计算多边形面积
上一篇介绍了使用leaflet绘制圆形,那如何计算圆形的面积呢? 1.使用数学公式计算,绘制好圆形后,获取中心点以及半径即可 2.使用第三方工具计算,如turf.js. 这里turf的area方法入参 ...
- hdu-2036求任意多边形面积
改革春风吹满地 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- 【改革春风吹满地 HDU - 2036 】【计算几何-----利用叉积计算多边形的面积】
利用叉积计算多边形的面积 我们都知道计算三角形的面积时可以用两个邻边对应向量积(叉积)的绝对值的一半表示,那么同样,对于多边形,我们可以以多边形上的一个点为源点,作过该点并且过多边形其他点中的某一个的 ...
- HDU_2036——多边形面积,行列式计算
Problem Description “ 改革春风吹满地, 不会AC没关系; 实在不行回老家, 还有一亩三分地. 谢谢!(乐队奏乐)”话说部分学生心态极好,每天就知道游戏,这次考试如此简单的题目,也 ...
- hdu2036 (计算多边形的面积)
Input 输入数据包含多个测试实例,每个测试实例占一行,每行的开始是一个整数n(3<=n<=100),它表示多边形的边数(当然也是顶点数),然后是按照逆时针顺序给出的n个顶点的坐标(x1 ...
随机推荐
- 万字 HashMap 详解,基础(优雅)永不过时
本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 前言 大家好,我是小彭. 在上一篇文章里,我们聊到了散列表的整体设计思想,在后续几篇文章里,我们将以 Jav ...
- Django基础笔记5(Session)
Session cookie:保存在客户端浏览器上的键值对 session:保存在服务器端的数据 保持会话 def index(req): v = req.session.get('use ...
- 【Java SE】Day05数组
一.数组的定义和访问 1.初始化 动态new int[10];--默认值 静态new int[]{1,2,3};,省略为{1,2,3}; 2.访问 长度arr.length属性(数组的属性) 打印数组 ...
- RequestMappingHandlerMapping请求地址映射的初始化流程!
之前的文章里,介绍了DispatcherSerlvet处理请求的流程. 其中一个核心的步骤是:请求地址映射,即根据request获取对应的HandlerExcecutionChain. 为了后续的请求 ...
- 痞子衡嵌入式:低功耗&高性能边缘人工智能应用的新答案 - MCXN947
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦MCX系列MCU的新品MCXN947. 自 2015 年恩智浦和飞思卡尔合并成新恩智浦之后,关于它们各自的 Arm Cortex- ...
- Nmap常用方法
1.扫描单个目标地址 在Nmap后面直接添加目标地址即可扫描 nmap 目标地址 2.扫描多个目标地址 如果目标不在同一网段,或在同一网段但不连续且数量不多,可以使用该方法进行扫描 nmap ...
- Jenkins&&gitlab2
Jenkins slave 添加jenkins slave节点: jenkins slave节点创建工作目录与基本环境配置,如果jenkins slave节点需要clone代码和执行java 代码编 ...
- 前后端开发必会的 HTTP 协议“十全大补丸”(万字长文)
本文全面介绍了 HTTP 协议相关知识,包括 HTTP 请求报文.响应报文.持久连接.缓存.Cookie 以及 HTTP 版本升级等! HTTP 协议全称为 HyperText Transfer Pr ...
- 《Kubernetes Operator 开发进阶》- 作者絮絮叨
目录 今天聊啥 本书读者 推荐序 推荐序1 - 邓洪超 推荐序2 - 任晶磊 推荐语 推荐语1 - 张磊 推荐语2 - 宋净超 推荐语3 - 王泽锋 推荐语4 - 周鹏飞 推荐语5 - 郑东旭 本书简 ...
- Windows 11 内核新调试器「GitHub 热点速览 v.23.01」
本周热点趋势榜虽然新项目不多,但是还是有几个不错值得收藏的工具项目,比如用来做文本转语音的 tortoise-tts 能生成更加贴近真实人声的语音,让 Golang 并发更出色的 conc,以及通过 ...