博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网页版几何画板开发笔记(六) 关于线
阅读量:7024 次
发布时间:2019-06-28

本文共 1712 字,大约阅读时间需要 5 分钟。

hot3.png

点的核心信息是坐标 x,y; 如果是别的子类型, 则根据子类型和所依赖的对象, 根据几何关系计算出点的坐标.

另一核心对象为线, 两点可以确定(determine)一条线. 因而线的最本质信息是点, 分别为 p1和p2,

其中 p1 做为起点, p2 作为终点或过该点.

当前暂时实现的线的子类型有: 线段, 射线, 直线, 平行线, 垂线, 角平分线. 下面分别笔记.

class Line extends ObjBase {

  Point p1;  // 起点
  Point p2;  // 终点
  string type = 'line'; // 对象类型: 线.
  string sub_type; // 线的子类型.
  Range t_range; // 参数 t 的取值范围.
  
  public static Line new_seg(p1,p2); // 新建线段子类型的线.
  public static Line new_ray(p1,p2); // 新建射线子类型的线.
  public static Line new_sline(p1,p2); // 新建过点 p1,p2 的直线.
  public static Line new_paral(line1, p3); // 新建过点 p3 平行于 line1 的直线.
  public static Line new_perpl(line1, p3); // 新建过点 p3 垂直于 line1 的直线.
  public static Line new_bisl(pA,pO,pB); // 新建∠AOB 的角平分线.
}

子类型的名字: 线段=segment, 射线=ray, 直线=sline, 平行线=paral, 垂线=perpl, 角平分线=bisl.

对于线段, 当用参数式表示线的时候, t 的取值范围为 [0, 1], 点在 p1,p2 之间.

对于射线, t 的取值范围为 [0, +无穷), 点在 p1->p2 方向.
对于直线, t 的取值范围为 (-无穷, +无穷), 点在整个实数范围.

平行线(paral), 垂线(perpl) 也是直线; 角平分线(bisl)则是射线.

线段, 射线, 直线都仅依赖点 p1,p2, 不需要特别阐述了. 下面笔记另三种线的创建和位置计算:

Line.new_paral(line1, p3) // 过点 p3 做 line1 的平行线.

  平行线依赖 line1, p3, 故此其父对象是 [line1, p3].
  在前面的数学推导中, 我们提及过点做平行线的推导, 在实际几何画板中, 根据研究, 算法如下:
V = (p2-p1)/2  -- p1,p2 是 line1 的点 p1,p2
平行线的 p1=p3-V, p2=p3+V
相当于在 p3 的两侧分别取p1->p2 的一半, 构成平行于 p1p2 的线.
t 的取值范围为 (-无穷, +无穷).

Line.new_perpl(line1, p3) // 过点 p3 做 line1 的垂线.

  类似于平行线, 垂线依赖 line1,p3. 计算点的算法:
V=(p2-p1)*i/2
垂线的 p1=p3-V, p2=p3+V.
t 的取值范围为 (-无穷, +无穷).

Line.new_bisl(pA, pO, pB) // 求角 ∠AOB 的角平分线.

  父对象: [pA,pO,pB]
尽管前面我们有推导过如果求三点的角平分线点, 但因要兼容几何画板的算法, 这里使用的
是根据几何画板的方式(自己研究的, 不一定对).
具体方法是在角的两条边上各取一点 L,K, 使得OL=OK=94.7 (经验值), 然后取 L,K 的中点
作为角平分线的 p2, p1 不言而喻是用 pO 点了.
角平分线的 t 取值范围为 [0, +无穷), 也即射线.

今假设要实现别的方式的线, 则方法是 1.添加子类型; 2.确定t的范围; 3.new/update 算法.

 

转载于:https://my.oschina.net/u/232554/blog/174019

你可能感兴趣的文章
局网满猿关不住,一波码农出墙来。
查看>>
关于厦门宽带用户升级了FTTH光纤入户,从别的地方拿来的ITV机顶盒没有办法使用的解决办法...
查看>>
Head First 设计模式笔记:(一)策略模式
查看>>
学习活动图的制作
查看>>
HTTP 错误 404.2 - Not Found 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面...
查看>>
Oracle 跟踪SQL 查询 及清除 v$SqlArea
查看>>
(经典)tcp粘包分析
查看>>
生产线工序基础知识
查看>>
iOS设备通知中心精品推荐消息删除
查看>>
无限分类(3种不同方案)
查看>>
EXCEL多列名称组合成一列名称
查看>>
Step download timeout (120 sec)
查看>>
日历工具类(一)——公历农历互相转换
查看>>
asp.net excel 操作
查看>>
Xianfeng轻量级Java中间件平台:流水号管理、组织机构管理
查看>>
基于RESTful标准的Web Api
查看>>
这样就算会了PHP么?-9
查看>>
ANT下载和配置
查看>>
ubuntu 步步为营之uclinux编译和移植(完整版)
查看>>
【踩坑经历】一次Asp.NET小网站部署踩坑和解决经历
查看>>