箭头的绘制,这个做过实现,可以很好的绘制出来
2012-08-23 16:10
169 查看
//说明:功能在线条尾部(终点)画箭头.
//flSx,flSy),(flEx,flEy):分别为线条起点终点坐标.
//flLength:箭头一边的长度.
//flAngle:箭头两边的夹角.
//pDC:图形设备句柄
//GetDistance:得到点点之间距离的函数,其代码在最下方提供.
**********************************
if(GetDistance(flSx,flSy,flEx,flEy) == 0) return;
float tmpX = flEx + (flSx-flEx)*flLength/GetDistance(flSx,flSy,flEx,flEy);
float tmpY = flEy + (flSy-flEy)*flLength/GetDistance(flSx,flSy,flEx,flEy);
float fl1X = (tmpX-flEx)*cos(-flAngle/2) - (tmpY-flEy)*sin(-flAngle/2) + flEx;
float fl1Y = (tmpY-flEy)*cos(-flAngle/2) + (tmpX-flEx)*sin(-flAngle/2) + flEy;
float fl2X = (tmpX-flEx)*cos(flAngle/2) - (tmpY-flEy)*sin(flAngle/2) + flEx;
float fl2Y = (tmpY-flEy)*cos(flAngle/2) + (tmpX-flEx)*sin(flAngle/2) + flEy;
pDC-> MoveTo(flEx,flEy);
pDC-> LineTo(fl1X,fl1Y);
pDC-> MoveTo(flEx,flEy);
pDC-> LineTo(fl2X,fl2Y);
****************************************
辅助函数GetDistance为一个得距离的方法,代码如下
float GetDistance(float flStartx,float flStarty,float flEndx,float flEndy)
{
float flRlt;
flRlt=(flStartx-flEndx)*(flStartx-flEndx)+(flStarty-flEndy)*(flStarty-flEndy);
flRlt=sqrt(flRlt);
return flRlt;
}
//flSx,flSy),(flEx,flEy):分别为线条起点终点坐标.
//flLength:箭头一边的长度.
//flAngle:箭头两边的夹角.
//pDC:图形设备句柄
//GetDistance:得到点点之间距离的函数,其代码在最下方提供.
**********************************
if(GetDistance(flSx,flSy,flEx,flEy) == 0) return;
float tmpX = flEx + (flSx-flEx)*flLength/GetDistance(flSx,flSy,flEx,flEy);
float tmpY = flEy + (flSy-flEy)*flLength/GetDistance(flSx,flSy,flEx,flEy);
float fl1X = (tmpX-flEx)*cos(-flAngle/2) - (tmpY-flEy)*sin(-flAngle/2) + flEx;
float fl1Y = (tmpY-flEy)*cos(-flAngle/2) + (tmpX-flEx)*sin(-flAngle/2) + flEy;
float fl2X = (tmpX-flEx)*cos(flAngle/2) - (tmpY-flEy)*sin(flAngle/2) + flEx;
float fl2Y = (tmpY-flEy)*cos(flAngle/2) + (tmpX-flEx)*sin(flAngle/2) + flEy;
pDC-> MoveTo(flEx,flEy);
pDC-> LineTo(fl1X,fl1Y);
pDC-> MoveTo(flEx,flEy);
pDC-> LineTo(fl2X,fl2Y);
****************************************
辅助函数GetDistance为一个得距离的方法,代码如下
float GetDistance(float flStartx,float flStarty,float flEndx,float flEndy)
{
float flRlt;
flRlt=(flStartx-flEndx)*(flStartx-flEndx)+(flStarty-flEndy)*(flStarty-flEndy);
flRlt=sqrt(flRlt);
return flRlt;
}
相关文章推荐
- 实现一个"可变二维数组",这个二维数组的行数要求用户从键盘输入,每行的元素个数仍由用户从键盘输入. //数组元素值用户可以自定义.最后把二维数组打印出来.不要忘记释放数组内存. /*void main
- C# 实现完整功能的截图控件(1)-实现绘图工具栏控件 控件实现了截图、绘制矩形、圆形、箭头、线条、文字,还需要可以撤销绘制步骤、保存图形等功能,基本实现了跟QQ2008截图一样的功能,还可以更
- jxl.jar 的百度百科,根据这个还是可以搞出来的,不过就是修改那块写的不是很好,修改其实可以直接读取数据并操作。
- C#怎么通过一个按钮Button,实现点击这个按钮可以打开一个文件或者文件夹?
- Log分析 你还可以去data/anr的目录下把trace.txt这个文件拷贝出来,在该文件中会写了产生anr的函数堆栈可以帮助分析
- ,遇到某个类中有很多相似的方法,区别只是后缀不同,可以通过这个方法,实现拼接方法名而调用方法
- 交换机接出来的网线可以再接上无线路由器实现无线上网吗
- 写一个方法,参数接收一个String类型的对象,最终可以把这个字符串参数中出现过的每一个字母打印出来 例如: "wwqweqdasdafdsfdsferer" 将来方法接收这个参数后会打印:
- 用js实现php里面的函数库 strtr()这个很好用
- 下面我这个方法可以实现限制某些QQ号登陆,而没有被限制的QQ号可以登陆,不需要借助任何工具。
- System.Threading.Mutex:一台电脑上面只有一个进程实例在运行,利用Mutex互斥量可以实现了这个功能
- C#控制台基础 函数的参数是接口 实现接口的类都可以作为参数,很好用
- Adobe AIR技术,这个需求可以实现不?
- 物体的属性中可以添加东西。并且可以用这个访问。这个很好。
- 图片另存为.rar 可以解压出来东西实现方法
- 一个表中的Id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数,用SQL语句及视图、存储过程分别实现。
- arcgis javascript api 中实现 根据一个点画出一个指定半径的圆,并且查询图层,绘制出落入这个圆中的空间对象
- 有一架天平12个小球,其中有11个重量相同,1个与另外11个不同(不清楚这个球是轻还是重),要求最多称3次,就可以将其中重量特殊的小球找出来。
- [Happy DSA] 程序实现绘制箭头的原理
- 【C语言】没事可以试试这个小程序,使用文件操作,模拟实现一个简单的文件拷贝工具!