[Processing]点到线段的最小距离
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]点到线段的最小距离的更多相关文章
- 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 ...
- (点到线段的最短距离)51nod1298 圆与三角形
1298 圆与三角形 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). 收起 ...
- POJ - 1584 A Round Peg in a Ground Hole(判断凸多边形,点到线段距离,点在多边形内)
http://poj.org/problem?id=1584 题意 按照顺时针或逆时针方向输入一个n边形的顶点坐标集,先判断这个n边形是否为凸包. 再给定一个圆形(圆心坐标和半径),判断这个圆是否完全 ...
- NEU 1496 Planar map 计算几何,点到线段距离 难度:0
问题 H: Planar map 时间限制: 1 Sec 内存限制: 128 MB提交: 24 解决: 22[提交][状态][讨论版] 题目描述 Tigher has work for a lon ...
- poj1584(判断凸包+求点到线段的距离)
题目链接:https://vjudge.net/problem/POJ-1584 题意:首先要判断凸包,然后判断圆是否在多边形中. 思路: 判断凸包利用叉积,判断圆在多边形首先要判断圆心是否在多边形中 ...
- POJ 1584 A Round Peg in a Ground Hole 判断凸多边形 点到线段距离 点在多边形内
首先判断是不是凸多边形 然后判断圆是否在凸多边形内 不知道给出的点是顺时针还是逆时针,所以用判断是否在多边形内的模板,不用是否在凸多边形内的模板 POJ 1584 A Round Peg in a G ...
- 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 ...
- Peter and Snow Blower CodeForces - 613A (点到线段距离)
大意: 给定多边形, 给定点$P$, 求一个以$P$为圆心的最小的圆环包含整个多边形. #include <iostream> #include <cmath> #define ...
- UVA 11796 - Dog Distance
题意 两条狗啊,同时跑,,同时结束,各自跑各自的道路,问跑的过程中,他们最大距离和最小距离的差: 方法 恶心一点就是,最大最小距离的求解方法,假设两只狗都只有一条线段要跑,则可以判定在端点处有最大 ...
随机推荐
- Jupyter Notebook的使用
命令模式 (按键 Esc 开启) Enter : 转入编辑模式 Shift-Enter : 运行本单元,选中下个单元 Ctrl-Enter : 运行本单元 Alt-Enter : 运行本单元,在其下插 ...
- uva 12508 - Triangles in the Grid(几何+计数)
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u011328934/article/details/35244875 题目链接:uva 12508 ...
- CSS3新特性2D、3D效果讲解
希望这篇博客可以对你有所帮助,如果有什么技术上的问题,希望我们可以做进一步的交流,如果你觉得我哪里阐述的不正确或者你有更好的更透彻的理解,也可以联系我,我在这里随时等着你. 对于css/html是每个 ...
- Yii设置Cache缓存的方法
先在配置文件components数组中加上: 'cache'=>array( 'class'=>'CFileCache'), 设置Cache: Yii::app()->cache-& ...
- attr全选第三次失效
一功能checkbox时隐时现,比如第一次打开有勾选,第n次打开可能就不选了. 经过偶层层抽次剥茧(da da jiang you),终于知道了原因:attr()在二次选中勾选框时,失效. 比如,如下 ...
- 如何解决安卓(系统版本低) CSS3 动画问题---高性能动画
目前对提升移动端CSS3动画体验的主要方法有几点: 尽可能多的利用硬件能力,如使用3D变形来开启GPU加速 -webkit-transform: translate3d(0, 0, 0); -moz- ...
- jQuery----五星好评实现
在美团.淘宝.京东等网页上,有许多商品.服务评价页面,五星好评功能很常见,本文利用jQuery实现五星好评功能. 案例图片: ...
- go Context的使用
控制并发有两种经典的方式,一种是WaitGroup,另外一种就是Context WaitGroup的使用 WaitGroup可以用来控制多个goroutine同时完成 func main() { va ...
- Scala的文件读写操作与正则表达式
目录 在本篇博客中你将会学习并了解常用的文件处理任务,例如读取文件的一行文本,本博客的要点包含: Source.fromFile(...).getLines.toArray 输出文件所有行 Sourc ...
- 经典算法--冒泡排序(Java)
原理:将相邻元素的较大值赋给右边 思路:① 1.将集合或数组内的第一个元素与第二个元素进行比较,较大值赋给右边: 2.将第二个元素与第三个元素进行比较,较大值赋给右边: ....... (N-1).将 ...