android 学习笔记之图形算法
莫名奇妙地用了叉积分。求完面积之后,再进行平均(除以y):
奇怪的是
pt2.fX = poly[0].fY - poly[3].fY;
pt2.fY = poly[3].fX - poly[0].fX;
这两行,竟然与逻辑推理出来的不一致。刚好取了个相反数。
static inline bool poly_to_point(SkPoint* pt, const SkPoint poly[], int count) {
float x = 1, y = 1;
SkPoint pt1, pt2;
if (count > 1) {
pt1.fX = poly[1].fX - poly[0].fX;
pt1.fY = poly[1].fY - poly[0].fY;
y = SkPoint::Length(pt1.fX, pt1.fY);
if (checkForZero(y)) {
return false;
}
switch (count) {
case 2:
break;
case 3:
pt2.fX = poly[0].fY - poly[2].fY;
pt2.fY = poly[2].fX - poly[0].fX;
goto CALC_X;
default:
pt2.fX = poly[0].fY - poly[3].fY;
pt2.fY = poly[3].fX - poly[0].fX;
CALC_X:
x = SkScalarDiv(SkScalarMul(pt1.fX, pt2.fX) +
SkScalarMul(pt1.fY, pt2.fY), y);
break;
}
}
pt->set(x, y);
return true;
}
2.从多边形到多边形。先转换为矩形,再转换为多边形。
bool SkMatrix::setPolyToPoly(const SkPoint src[], const SkPoint dst[],
int count) {
if ((unsigned)count > 4) {
SkDebugf("--- SkMatrix::setPolyToPoly count out of range %d\n", count);
return false;
}
if (0 == count) {
this->reset();
return true;
}
if (1 == count) {
this->setTranslate(dst[0].fX - src[0].fX, dst[0].fY - src[0].fY);
return true;
}
SkPoint scale;
if (!poly_to_point(&scale, src, count) ||
SkScalarNearlyZero(scale.fX) ||
SkScalarNearlyZero(scale.fY)) {
return false;
}
static const PolyMapProc gPolyMapProcs[] = {
SkMatrix::Poly2Proc, SkMatrix::Poly3Proc, SkMatrix::Poly4Proc
};
PolyMapProc proc = gPolyMapProcs[count - 2];
SkMatrix tempMap, result;
tempMap.setTypeMask(kUnknown_Mask);
if (!proc(src, &tempMap, scale)) {
return false;
}
if (!tempMap.invert(&result)) {
return false;
}
if (!proc(dst, &tempMap, scale)) {
return false;
}
if (!result.setConcat(tempMap, result)) {
return false;
}
*this = result;
return true;
}
android 学习笔记之图形算法相关推荐
- android学习笔记42——图形图像处理2——绘图
绘图 android的绘图应该继承View组件,并重写onDraw(Canvas canvas)方法即可. 重写onDraw(Canvas canvas)方法时涉及一个绘图API:Canvas,Can ...
- Android学习笔记:Android基础知识点(不断更新中)
1.Android学习笔记:OkHttp 2.Android学习笔记:更新UI的方法(UI线程和非UI线程) 3.Android学习笔记:Volley 4.Android学习笔记:Handler 5. ...
- Android学习笔记之在图片特效
1.涂鸦(能清屏) HandWritingActivity.java [java] view plaincopy package xiaosi.handWriting; import android. ...
- android学习笔记---55_frame动画的实现,Java技术qq交流群:JavaDream:251572072
android学习笔记---55_frame动画的实现,Java技术qq交流群:JavaDream:251572072 Java技术qq交流群:JavaDream:251572072 2013/5/1 ...
- Android学习笔记09:Paint及Canvas的简单应用
2019独角兽企业重金招聘Python工程师标准>>> Android学习笔记09:Paint及Canvas的简单应用 在Android中需要通过graphics类来显示2D图形. ...
- 【学习笔记】【算法】【智能优化】粒子群优化(PSO)
[学习笔记][算法][智能优化]粒子群优化(PSO) 文章目录 [学习笔记][算法][智能优化]粒子群优化(PSO) 1 算法背景 1.1 背景 1.2 基础知识 2 算法原理 2.1 基本原理 2. ...
- Android学习笔记-常用的一些源码,防止忘记了
Android学习笔记-常用的一些源码,防止忘记了... 设置拨打电话 StringdialUri="tell:"+m_currentTelNumble; IntentcallIn ...
- Android学习笔记 2.2.1 线性布局 2.2.2 表格布局
Android学习笔记 疯狂Android讲义 文章目录 Android学习笔记 疯狂Android讲义 第2章 Android 应用的界面编程 2.2 第1组 UI组件:布局管理器 2.2.1 线性 ...
- android jackson xml,[Android学习笔记]jackson库的使用
Jackson库一般用于序列化和反序列化操作,通常会涉及到的操作是: 1. Java Object -> Json String 2. Java Object -> Xml String ...
最新文章
- R语言编写自定义分组统计函数(customize statistics function)可视化分组箱图并在X轴标签下方添加分组对应的统计值(样本数N、中位数median、四分位数的间距iqr)
- 双linux grub rescue,Grub Rescue修复方法
- vuejs目录结构启动项目安装nodejs命令,api配置信息思维导图版
- ubuntu服务器创建共享文件夹,Ubuntu samba安装创建共享目录及使用
- React简介、虚拟DOM、Diff算法、创建React项目、JSX语法、组件、组件声明方式、组件传值props和state、组件的生命周期
- 苹果计划在明年推出的高端iPhone机型上应用挖孔屏
- dayz如何修改服务器指令,【遊戲本體內核心代碼修改】DayZ 有無控制臺刷物品指令、Or設定服務端刷物品MOD...
- drop table 、delete table和truncate table的区别
- linux xps 13 wifi,戴尔XPS 13无线网卡替换教程和教程 | MOS86
- oso kabuwj severe conime 美女病毒 重要文件.exe : 通过移动设备引发的血案...
- 如何将图片批量压缩大小?怎样一次性压缩多张图片?
- win10 hao123劫持html文件,Win10 edge浏览器主页被hao123劫持怎么解决?
- 【Vue实用功能】Vue实现浏览器全屏退出全屏
- 1.3 飞桨开源深度学习平台介绍
- A Framework for Multi-stage Bonus Allocation in meal delivery Platform
- 考勤管理代码:python基础练手用的
- 网络工程基础- -mac地址以及端口安全
- EXSI自定义第三方驱动生成镜像——筑梦之路
- 安卓手机突然很卡_手机越用越卡怎么办?赶紧跟小编一起来清理手机,手把手教你解决安卓手机卡顿...
- Gym101522GHIJKL----La Salle-Pui Ching Programming Challenge 培正喇沙編程挑戰賽 2017
热门文章
- python层次聚类分析_SPSS聚类分析:系统聚类分析
- c语言输入身高计算标准体重_女人身高165cm标准体重是多少?
- windows 远程访问别人的linux下的ftp服务器,linux与windows之间使用ftp相互访问(CentOS提示ftp:command not found)...
- C++中创建二维数组的几种方法
- C++编程进阶4(C++中的强制类型转换运算符、不要返回自定义类内部成员的指针,引用和迭代器)
- Pdf怎么转换excel表格,职场人士必备技能
- seafile服务端的搭建
- 网络部署原理加实验步骤
- Python之配置日志模块logging
- java web servelt