计算机图形学—判断点在直线上的方法

做计算机图形学实验的时候,要捕获和拖动直线或者是图形的某一条边。

我们在寝室讨论如何判断鼠标在直线上的时候我的想法是扫描直线上的点再进行近似判断,在线上点附近就算是捕获直线了。

有个同学想到了用三角形两边之和大于第三的原理。第二天我就急忙实现了。

 

算法的思想是:

 

 

已知三角形两边之和大于第三边,当鼠标点在直线上时点到直线两端点的距离和等于直线的长度,

我们可以用点到两顶点的距离之和小于直线长度加上一个误差范围值(我选取的是0.5),

当符合要求的时候可以近似判定点就在直线上。

 

用MFC实现:

 

 

同时给出判断捕获直线两个端点的方法:

 

 

 

CDrawLine是自己写的类,

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
里面包含大多数计算机图形学的实现算法 (1)画直线、画多边形、画圆、画字符 (2)对多边形进行填充 (3)图形裁剪 (4)图形的几何变换 (5)三维图形的消隐及着色 1、 界面要求 (1) 系统采用Windows通用的界面式样; (2) 所有功能必须集成在一个界面下; (3) 不同的功能采用不同的菜单; (4) 所有的功能必须具有菜单和图标两种操作方式; 2、 画直线 (1) 可以任意指定直线的起止位置; (2) 可以任意设置直线的线宽; (3) 可以任意设定直线的颜色; 3、 画多边形 (1) 可以任意指定多边形的边数和多边形的节位置; (2) 可以任意设置多边形边线的线宽; (3) 可以任意设定多边形边线的颜色; 4、 画圆 (1) 可以任意指定圆心和半径; (2) 可以任意设置圆弧边线的线宽; (3) 可以任意设定圆弧边线的颜色; 5、 画字符 (1) 可以任意指定字符的位置; (2) 可以任意设置字符的大小、颜色、方向、字体等; (3) 所画的字符对象可以是单个字符,也可以是具有多个字符的字符串; 6、 多边形填充 (1) 可以对任意形状的多边形进行填充; (2) 可以处理包含洞的多边形; (3) 可以通过选择多边形或在指定多边形内的一(种子)进行多边形填充; (4) 可以任意设定多边形填充的颜色; 7、 裁剪 (1) 以矩形为裁剪窗口; (2) 被裁剪的对象包括线段、多边形、圆、字符等,其数量不限; (3) 可以任意指定矩形窗口的位置; (4) 线段裁剪算法可以为逐判断法、cohn-Sutherland算法等;其它算法不限; 8、 几何变换 (1) 图形变换包括对二维图形进行平移、旋转、缩放、对称等变换,以及对三维图形进行平移、旋转、缩放等变换; (2) 平移、旋转和缩放可以通过鼠标操作和输入变换参数两种方式进行; (3) 二维图形可以至少包括直线、多边形、圆、字符等; (4) 三维图形至少包括多面体; (5) 二维图形数据可以通过本系统的画图功能生成,也可以通过文件读入;三维图形数据采取文件读入方式; 9、 消隐 (1) 消隐对象为多面体,多面体的形状不限; (2) 消隐所采用的算法不限; (3) 多面体图形数据采取文件读入方式; (4) 三维图形的显示步骤必须是:在读入多面体数据后,首先显示没有经过消隐的三维图形,在输入消隐处理命令后,显示消隐后的三维图形

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值