`
txf2004
  • 浏览: 7132789 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android canvas rotate():平移旋转坐标系至任意原点任意角度-------附:android反三角函数小结

 
阅读更多

自然状态下,坐标系以屏幕左上角为原点,向右是x正轴,向下是y正轴。现在要使坐标系的原点平移至任一点O(x,y),且旋转a角度,如何实现?

交待下我的问题背景,已知屏幕上有两点p1和p2,构成直线l。我要以两点的中点mid(x,y)为坐标原点,线段l的中垂线为一个轴,l为另外一个轴,做一个坐标系。切割出一个边长为d的正方形。示意图如下所示:

double d = Math.sqrt((p2.x-p1.x)*(p2.x - p1.x)+(p2.y-p1.y)*(p2.y-p1.y)); //p1、p2两点之间的距离

float k = Math.abs((p2.y - p1.y)/(p2.x - p1.x)); //斜率

double angle = Math.atan(k); //注意这个角度的范围是0 ----------pi/2, 不是0到90°

Point midPoint = new Point((p1.x+p2.x)/2, (p1.y+p2.y)/2); //求中点

/**********绘制新的坐标系***********/
canvas.save();
canvas.translate(midPoint.x, midPoint.y); //将坐标中心平移到midPoint
canvas.rotate((float) (90 - Math.toDegrees(angle)));

Paint paint2 = new Paint();
paint2.setAntiAlias(true);
paint2.setStyle(Style.STROKE);
paint2.setColor(Color.BLUE);

int dd = d; //假设要做的正方形的边长为两点之间的距离d

//在旋转后的坐标系上,边长为dd的正方形的右下顶点和左上顶点坐标分别为(0, d/2)、(-d, -d/2)

canvas.drawRect(new Rect(0, d/2, -d, -d/2), paint2);

canvas.restore();

总结:

1,先平移到新的原点,然后再旋转。

2,rotate()这个函数要注意,参数为正则顺时针,否则逆时针。这个参数要求必须是度数,如旋转90°,就填90,不能填pi/2. 就这块,纠结了大半天我。可以用Math.toDegrees() 和 Math.toRadians()互相转化 ° 和 弧度。

3,反三角函数Math.atan()求出来的不是°数,所以要转化。大爷的,浪费了我一下午。大哭

关于canvas 旋转相关,可参考资料:

http://blog.csdn.net/dinko321/article/details/7679019
http://www.cnblogs.com/-cyb/archive/2011/10/30/2229162.html
http://bbs.189works.com/thread-38386-1-1.html

http://www.myexception.cn/h/540302.html

关于canvas旋转后是只旋转了画布还是旋转了坐标,我也是云里雾里。经过个人测试,反正是坐标系也跟着旋转了。

android爱好者,欢迎加入群:192413115


分享到:
评论

相关推荐

    Android canvas 放大 缩小 平移

    Android的Matrix类提供了对2D变换的支持,包括缩放(scale)、平移(translate)和旋转(rotate)。要实现放大和缩小,我们可以创建一个Matrix对象,然后调用其setScale()方法,传入缩放的X轴和Y轴因子。例如,要将...

    安卓绘图 canvas 绘图 平移缩放

    调用translate()后,所有的后续绘图操作都会相对于新的坐标原点进行,即图形会向右(正dx)或左(负dx)平移,向上(正dy)或下(负dy)平移。 三、scale()方法:图形缩放 Canvas的scale()方法用于改变当前坐标系的...

    android canvas 画曲线图 画三角形(多边形)

    在Android开发中,Canvas是用于在屏幕上绘制图形的重要工具。Canvas提供了丰富的API,使得开发者能够绘制各种复杂的图形,包括直线、曲线、圆形、矩形以及多边形等。本篇文章将详细讲解如何利用Canvas在Android中画...

    Android下使用Canvas画图

    - `translate()`: 平移坐标系。 - `scale()`: 缩放坐标系。 - `rotate()`: 旋转坐标系。 - `skew()`: 扭曲坐标系。 6. **位图操作** - `drawBitmap()`: 在Canvas上绘制Bitmap,可以指定位置、缩放、旋转等。 ...

    WPF 中Canvas图像缩放和平移

    图像上放一个图元,同时实现缩放和平移操作 缩放操作:使用滚轮实现缩放,缩放原点以鼠标为中心 平移操作:按住鼠标右键,随鼠标平移 缩放和平移时图元和图像的相对位置不变 图元不能超出图像范围 图像不能拖出...

    android canvas 3D旋转木马 图片立体展示

    Android中的Matrix类提供了矩阵操作,可以进行平移、旋转和缩放等变换,是实现3D效果的关键。 2. **旋转动画**:要实现旋转木马的动态效果,需要使用Animation类或者ObjectAnimator来创建旋转动画。可以通过设置...

    Android Canvas绘图Demo

    2. 动画效果:利用Canvas的绘图操作,可以创建出各种动画效果,例如平移、旋转、缩放等。 3. 图形处理:对于图像编辑应用,Canvas可以用来绘制和修改图像,比如添加滤镜、绘制涂鸦等。 总结,Android Canvas绘图是...

    android-canvas.rar_ android Canvas_android canvas_android canv

    Canvas提供了一系列的变换方法,如`translate()`(平移)、`scale()`(缩放)、`rotate()`(旋转)和`skew()`(倾斜),这些方法可以在绘图之前改变Canvas的坐标系统,使得后续的绘图操作在新的坐标系下执行。...

    canvas案例笔记

    平移: ctx.translate(x, y) x表示从当前坐标系向x正方向移动x像素 y表示从当前坐标系向y轴的正方向移动y像素 旋转: ctx.rotate(x); x 表示弧度制单位 从当前坐标系沿着旋转x弧度 如果x值为正 顺时针旋转 反之 逆...

    AndroidCanvas:android canvas学习

    AndroidCanvas的坐标系统以左上角为原点(0,0),x轴向右增长,y轴向下增长。理解这个坐标系统对于精确绘制至关重要。 4. **绘图方法** - `drawRect()`:绘制矩形,需要指定矩形的四个顶点坐标。 - `drawCircle()`...

    android利用Paint在Canvas上实现竖排写字

    - 使用`canvas.save()`保存当前Canvas的状态,防止坐标系变化影响其他元素。 - 通过`canvas.translate(0, -textHeight)`将坐标原点向上移动一个文本高度的距离,确保下一行文本在上一行的下方。 - 使用`paint....

    android canvas 画图

    2. **坐标系统**:Android Canvas的坐标系统原点位于屏幕左上角,X轴向右延伸,Y轴向下延伸。坐标值范围通常为0到屏幕宽度或高度。 3. **保存与恢复状态**:Canvas提供了`save()`和`restore()`方法,用于保存和恢复...

    android-canvas-donut-chart.7z

    "android-canvas-donut-chart.7z"这个压缩包文件很可能包含了一个使用Canvas来实现甜甜圈图(Donut Chart)的示例项目。甜甜圈图是一种数据可视化工具,通常用于展示各项比例关系,它由环形区域组成,中心有一个空洞...

    Android Canvas画布使用Demo源码.rar

    - `rotate()`: 旋转画布,指定旋转角度。 - `skew()`: 扭曲画布,沿着X轴和Y轴倾斜。 8. **保存和恢复状态** - `save()`: 保存当前Canvas的状态,包括坐标变换、绘图样式等。 - `restore()`: 恢复到之前保存的...

    canvas 原位置旋转图片

    注意这里的负号,因为我们在旋转后,图片的左上角不再对应于原点,所以需要根据旋转角度调整坐标。 `restore`方法用于撤销最近一次调用`save`方法后的所有状态改变,包括`translate`和`rotate`,使得画布恢复到初始...

    Android_rotate--animation.zip_Android 动画_android_android animati

    XML动画文件可以更方便地管理动画,包括旋转、缩放、平移等。在`android_compass.xml`中,开发者可能定义了一个旋转动画,用于模拟指南针指针的旋转效果。 `android_rotate`标签暗示了重点在于旋转操作,可能涉及了...

    Android-CoordinateAxisChart在Android绘制坐标轴函数图像

    "Android-CoordinateAxisChart在Android绘制坐标轴函数图像"这个项目专注于利用自定义视图来实现坐标轴图表的绘制,这对于数据分析、科学计算或统计展示的应用非常有用。下面将详细介绍如何在Android中创建并使用`...

    Android 自定义画布canvas 实现绘制和清空画布功能

    在Android开发中,自定义画布Canvas是实现图形绘制的核心工具。Canvas提供了丰富的API,允许开发者在屏幕上绘制各种形状、图像以及文字等。本教程将深入探讨如何利用Canvas实现绘制和清空画布的功能。 首先,我们...

    canvas图片旋转自适应容器宽度实践

    本实践主要探讨的是如何使用Canvas实现图片的旋转,并在每次旋转90度后自动调整宽度以适应容器,保持等比缩放,确保图片不失真。 首先,我们需要在HTML中创建一个`<canvas>`元素,并设置其宽度和高度,以及关联一个...

Global site tag (gtag.js) - Google Analytics