莫名奇妙地用了叉积分。求完面积之后,再进行平均(除以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 学习笔记之图形算法相关推荐

  1. android学习笔记42——图形图像处理2——绘图

    绘图 android的绘图应该继承View组件,并重写onDraw(Canvas canvas)方法即可. 重写onDraw(Canvas canvas)方法时涉及一个绘图API:Canvas,Can ...

  2. Android学习笔记:Android基础知识点(不断更新中)

    1.Android学习笔记:OkHttp 2.Android学习笔记:更新UI的方法(UI线程和非UI线程) 3.Android学习笔记:Volley 4.Android学习笔记:Handler 5. ...

  3. Android学习笔记之在图片特效

    1.涂鸦(能清屏) HandWritingActivity.java [java] view plaincopy package xiaosi.handWriting; import android. ...

  4. android学习笔记---55_frame动画的实现,Java技术qq交流群:JavaDream:251572072

    android学习笔记---55_frame动画的实现,Java技术qq交流群:JavaDream:251572072 Java技术qq交流群:JavaDream:251572072 2013/5/1 ...

  5. Android学习笔记09:Paint及Canvas的简单应用

    2019独角兽企业重金招聘Python工程师标准>>> Android学习笔记09:Paint及Canvas的简单应用 在Android中需要通过graphics类来显示2D图形. ...

  6. 【学习笔记】【算法】【智能优化】粒子群优化(PSO)

    [学习笔记][算法][智能优化]粒子群优化(PSO) 文章目录 [学习笔记][算法][智能优化]粒子群优化(PSO) 1 算法背景 1.1 背景 1.2 基础知识 2 算法原理 2.1 基本原理 2. ...

  7. Android学习笔记-常用的一些源码,防止忘记了

    Android学习笔记-常用的一些源码,防止忘记了... 设置拨打电话 StringdialUri="tell:"+m_currentTelNumble; IntentcallIn ...

  8. Android学习笔记 2.2.1 线性布局 2.2.2 表格布局

    Android学习笔记 疯狂Android讲义 文章目录 Android学习笔记 疯狂Android讲义 第2章 Android 应用的界面编程 2.2 第1组 UI组件:布局管理器 2.2.1 线性 ...

  9. android jackson xml,[Android学习笔记]jackson库的使用

    Jackson库一般用于序列化和反序列化操作,通常会涉及到的操作是: 1. Java Object -> Json String 2. Java Object -> Xml String ...

最新文章

  1. R语言编写自定义分组统计函数(customize statistics function)可视化分组箱图并在X轴标签下方添加分组对应的统计值(样本数N、中位数median、四分位数的间距iqr)
  2. 双linux grub rescue,Grub Rescue修复方法
  3. vuejs目录结构启动项目安装nodejs命令,api配置信息思维导图版
  4. ubuntu服务器创建共享文件夹,Ubuntu samba安装创建共享目录及使用
  5. React简介、虚拟DOM、Diff算法、创建React项目、JSX语法、组件、组件声明方式、组件传值props和state、组件的生命周期
  6. 苹果计划在明年推出的高端iPhone机型上应用挖孔屏
  7. dayz如何修改服务器指令,【遊戲本體內核心代碼修改】DayZ 有無控制臺刷物品指令、Or設定服務端刷物品MOD...
  8. drop table 、delete table和truncate table的区别
  9. linux xps 13 wifi,戴尔XPS 13无线网卡替换教程和教程 | MOS86
  10. oso kabuwj severe conime 美女病毒 重要文件.exe : 通过移动设备引发的血案...
  11. 如何将图片批量压缩大小?怎样一次性压缩多张图片?
  12. win10 hao123劫持html文件,Win10 edge浏览器主页被hao123劫持怎么解决?
  13. 【Vue实用功能】Vue实现浏览器全屏退出全屏
  14. 1.3 飞桨开源深度学习平台介绍
  15. A Framework for Multi-stage Bonus Allocation in meal delivery Platform
  16. 考勤管理代码:python基础练手用的
  17. 网络工程基础- -mac地址以及端口安全
  18. EXSI自定义第三方驱动生成镜像——筑梦之路
  19. 安卓手机突然很卡_手机越用越卡怎么办?赶紧跟小编一起来清理手机,手把手教你解决安卓手机卡顿...
  20. Gym101522GHIJKL----La Salle-Pui Ching Programming Challenge 培正喇沙編程挑戰賽 2017

热门文章

  1. python层次聚类分析_SPSS聚类分析:系统聚类分析
  2. c语言输入身高计算标准体重_女人身高165cm标准体重是多少?
  3. windows 远程访问别人的linux下的ftp服务器,linux与windows之间使用ftp相互访问(CentOS提示ftp:command not found)...
  4. C++中创建二维数组的几种方法
  5. C++编程进阶4(C++中的强制类型转换运算符、不要返回自定义类内部成员的指针,引用和迭代器)
  6. Pdf怎么转换excel表格,职场人士必备技能
  7. seafile服务端的搭建
  8. 网络部署原理加实验步骤
  9. Python之配置日志模块logging
  10. java   web servelt