PVector p1,p2,n;
float d = 0; void setup()
{
size(600,600); p1 = new PVector(150,30);//线段第一个端点
p2 = new PVector(-25,-100);//线段第二个端点 PVector vec = PVector.sub(p1,p2);
vec.normalize();
n = new PVector(-vec.y,vec.x);//与线段垂直的向量
d = n.dot(p1);
} void draw()
{
background(#CCCCCC);
translate(300,300);//重置坐标原点
strokeWeight(1);
stroke(#000000);
line(-300,0, 300,0);//画横纵轴
line(0,-300, 0,300); drawLine(p1,p2);
drawVector(n); PVector q = new PVector(mouseX-300,mouseY-300);
strokeWeight(8);
stroke(#EEEE00);//yellow
point(q.x,q.y); float temp = d - q.dot(n);
PVector nearestPnt = new PVector(n.x,n.y);
nearestPnt.mult(temp);
nearestPnt.add(q); PVector delV1,delV2;//线段上的 最近点 到两端点的向量
delV1 = PVector.sub(nearestPnt,p1);
delV2 = PVector.sub(nearestPnt,p2);
if(PVector.dot(delV1,delV2)>0)//如果两个向量的点积大于0,则最近点在线段外
{
nearestPnt = module(delV1)<module(delV2)?p1:p2;//则重置最近点到最近的端点
} drawLine(q,nearestPnt);
} //求向量的模
float module(PVector v)
{
return sqrt(pow(v.x,2)+pow(v.y,2));
} //画一条绿色的线段,端点加粗
void drawLine(PVector p1,PVector p2)
{
strokeWeight(1);
stroke(0,155,0);
line(p1.x,p1.y, p2.x,p2.y);
strokeWeight(5);
point(p1.x,p1.y);
point(p2.x,p2.y);
} //画一个红色向量,原点开始
void drawVector(PVector v)
{
int k = 50;
strokeWeight(1);
stroke(255,0,0);
line(0,0, v.x*k,v.y*k);
strokeWeight(5);
point(0,0);
}

[Processing]点到线段的最小距离的更多相关文章

  1. POJ 1584 A Round Peg in a Ground Hole(判断凸多边形,点到线段距离,点在多边形内)

    A Round Peg in a Ground Hole Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4438   Acc ...

  2. (点到线段的最短距离)51nod1298 圆与三角形

    1298 圆与三角形 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0).   收起 ...

  3. POJ - 1584 A Round Peg in a Ground Hole(判断凸多边形,点到线段距离,点在多边形内)

    http://poj.org/problem?id=1584 题意 按照顺时针或逆时针方向输入一个n边形的顶点坐标集,先判断这个n边形是否为凸包. 再给定一个圆形(圆心坐标和半径),判断这个圆是否完全 ...

  4. NEU 1496 Planar map 计算几何,点到线段距离 难度:0

    问题 H: Planar map 时间限制: 1 Sec  内存限制: 128 MB提交: 24  解决: 22[提交][状态][讨论版] 题目描述 Tigher has work for a lon ...

  5. poj1584(判断凸包+求点到线段的距离)

    题目链接:https://vjudge.net/problem/POJ-1584 题意:首先要判断凸包,然后判断圆是否在多边形中. 思路: 判断凸包利用叉积,判断圆在多边形首先要判断圆心是否在多边形中 ...

  6. POJ 1584 A Round Peg in a Ground Hole 判断凸多边形 点到线段距离 点在多边形内

    首先判断是不是凸多边形 然后判断圆是否在凸多边形内 不知道给出的点是顺时针还是逆时针,所以用判断是否在多边形内的模板,不用是否在凸多边形内的模板 POJ 1584 A Round Peg in a G ...

  7. sgu 1348 Goat in the Garden 2【点到线段的距离】

    链接: http://acm.timus.ru/problem.aspx?space=1&num=1348 http://acm.hust.edu.cn/vjudge/contest/view ...

  8. Peter and Snow Blower CodeForces - 613A (点到线段距离)

    大意: 给定多边形, 给定点$P$, 求一个以$P$为圆心的最小的圆环包含整个多边形. #include <iostream> #include <cmath> #define ...

  9. UVA 11796 - Dog Distance

    题意  两条狗啊,同时跑,,同时结束,各自跑各自的道路,问跑的过程中,他们最大距离和最小距离的差: 方法  恶心一点就是,最大最小距离的求解方法,假设两只狗都只有一条线段要跑,则可以判定在端点处有最大 ...

随机推荐

  1. 取消centOS7虚拟机锁屏

    https://blog.csdn.net/ViJayThresh/article/details/81076622

  2. 如何动态调用 C 函数

    JSPatch 支持了动态调用 C 函数,无需在编译前桥接每个要调用的 C 函数,只需要在 JS 里调用前声明下这个函数,就可以直接调用: require('JPEngine').addExtensi ...

  3. [USACO08NOV]Mixed Up Cows

    嘟嘟嘟 一看n那么小,那一定是状压dp了(表示从没写过,慌). 首先dp[i][j](i 是一个二进制数,第x位为1代表选了第x头牛),表示 i 这个状态最后一头牛是第 j 头牛时的方案数. 然后当 ...

  4. Java并发编程 -- 文章汇总

    文章汇总 1.Thread和Runnable 2.synchronized 3.Lock 4.Executor框架 5.信号量和障碍器 6.Exchanger线程间交换数据 7.Java内存操作总结

  5. [源码分析]ArrayList

    add public boolean add(E e) { //先确保数组容量 ensureCapacityInternal(size + 1); //直接将值放在size位置 elementData ...

  6. Jenkins启动和停止服务

    1.怎么启动Jenkins? step1:进入到Jenkins的war包所在的目录. 如果是win7及以上版本,直接打开Jenkins的war包所在的目录,在地址栏敲cmd,回车. 上述结果和进入cm ...

  7. Java泛型学习一

    Java泛型 所谓泛型,就是变量类型的参数化.泛型是java1.5中引入的一个重要特征,通过引入泛型,可以使编译时类型安全,运行时更少抛出ClassCastException的可能.一提到参数化,最熟 ...

  8. Spring源码分析(二十)准备环境

    摘要: 本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. prepareRefresh函数主要是做些准备工作,例如对系统属性及环 ...

  9. 《Python核心编程》第二版第五章答案

    本人python新手,答案自己做的,如果有问题,欢迎大家评论和讨论! 更新会在本随笔中直接更新. 5-1.整型.讲讲Python普通整型和长整型的区别. Python的标准整形类型是最通用的数字类型. ...

  10. (转)使用 Nmon 监控 Linux 的系统性能

    看到一个使用Nmon的文章,写的很基础,适合新手,转载之.下面是原文的信息: 作者:Hitesh Jethva 译者:sonofelice 校对:wxy 传送门:linux.cn/article-68 ...