美文网首页
画带箭头的线段

画带箭头的线段

作者: xuxiang | 来源:发表于2023-02-01 09:46 被阅读0次

#deifne F_EQU 0.0000001

#define M_PI  3.1415926

需要注意显示时的设备坐标系和逻辑坐标系,还需要考虑缩放比例。

坐标系:

设备坐标系的原点在左上角,x从左到右变大,y从上到下变大。

逻辑坐标系的原点在左下角,x从左到右变大,y从下到上变大。

计算时只考虑逻辑坐标系,显示时再转换成设备坐标系。

缩放比例:

如下的srcX,不一定是真实的x坐标。加入显示时一个像素代表一个单位,则srcX是真实的x坐标,否则srcX*scale才是真实的x坐标,scale代表缩放比例,比如一个像素代表50mm,则x坐标的真实数据是:srcX*50,单位为mm。

假定有点A(srcX,srcY),B(desX,desY)。有一线段从点A到点B。

则正常显示画线从点A到点B即可。

假如点A和点B是圆圈,需要从圆圈外部连线,而不是两个圆心之间连,则需要计算两个圆圈外部的坐标A1(src1X,src1Y),B1(des1X,des1Y)。

AB线段的角度正切值: tanAB=(desY-srcY)/(desX-srcX)

z=atan(tanAB)

正切函数图像如上。

正弦函数图像如上。

余弦函数图像如上。

假定显示时A点和B点圆圈半径为 r。

 因为正切函数无法像正弦,余弦那样表达4个像限,所以通过反正切求线段AB的角度时需要针对4种情况做处理:

情况1:

srcX<desX,srcY<desY

z=z;

情况2:

srcX>desX,srcY<desY

z=M_PI-z;

情况3:

srcX>desX,srcY>desY

z=M_PI+z;

情况4:

srcX<desX,srcY>desY

z=2*M_PI-z;

最终计算圆圈上点坐标的公式如下:

src1X=srcX+cos(z)*r*scale

src1Y=srcY+sin(z)*r*scale

des1X=desX-cos(z)*r*scale

des1Y=desY-sin(z)*r*scale

此时假定以(des1X,des1Y)为顶点画一个顶点角度为30度的锐角三角形。

则三角形另外2个点的坐标t1(t1X,t1Y),t2(t2X,t2Y)

B=M_PI/2-z-(15*M_PI)/180.0

C=M_PI/2-z+(15*M_PI)/180.0

t1X=des1X-sin(B)*15*scale

t1Y=des1Y-cos(B)*15*scale

t2X=des2X-sin(C)*15*scale

t2Y=des2Y-cos(C)*15*scale

相关文章

  • 画带箭头的线段

    #deifne F_EQU 0.0000001 #define M_PI 3.1415926 需要注意显示时的设备...

  • 4.2 向量和矩阵

    1、向量 向量,指具有大小(magnitude)和方向的量。它可以形象化地表示为带箭头的线段。箭头所指:代表向量的...

  • Tikz:好看的箭头

    说明:用Tikz中画带箭头的线时,只用[->]画的箭头太难了!推荐使用:[-latex]

  • 画带箭头的view

    (void)drawRect:(CGRect)rect {CGRect frame = CGRectMake(0,...

  • 向量和矩阵

    向量 数学中:形象的用一个带有箭头的线段指代向量,线段长度表示向量的大小,箭头所指方向为向量的方向。所以说向量我们...

  • iOS - 画带箭头弹窗

    来自:现实

  • 向量的理解

    向量 向量指具有大小(magnitude)和方向的量。它可以形象化地表示为带箭头的线段。在3D笛卡尔坐标系中,可以...

  • OpenGL-向量/矩阵变换/投影

    基本概念 向量 从坐标原点指向这个位置点的一个向量(带箭头的线段) 向量在OpenGL里对应的数据类型M3DVec...

  • OC 绘制带箭头的线

    绘图需求需要画带箭头的线,一开始想着绘制箭头好像很简单,类似Window开发有对应的lineCap属性去设置线。O...

  • 给你的图表增值加分(2):柱形图上标注升降箭头和百分比

    还是在经济学人微博刚刚看到的图表案例: 这个图表的主要特点是,柱形图之间标注了箭头线段和增长百分比,重点突出,有画...

网友评论

      本文标题:画带箭头的线段

      本文链接:https://www.haomeiwen.com/subject/owqihdtx.html