十分钟年华老去

--为了理想、生命和爱情

十分钟年华老去
十分钟年华老去的公告
生命如水般流逝,十分钟,真的那么短暂而灿烂。 但愿那辉煌的片段里,有你我的相助,相识。
最近评论
lovekatherine:被标题迷惑了
yang2003:没看懂
zdsdiablo:就是因为网上没找到,所以我才决定写一下的,方便大家嘛。
zdsdiablo:就是因为网上没找到,所以我才决定写一下的,方便大家嘛。
eagerEagle:我找了很久,都没搜到这方面的内容。最后不得以发帖提问,没想到后来在你这里找到了,我就把你的文字全转过去了(地址也在内),不介意吧?
文章分类
收藏
相册
空白
[ 博客 ]
天天想你的我(RSS)
慕容剑朔(RSS)
[ 视野 ]
java汇总
操作系统
chinaunix
代理服务
cnproxy
外国代理
电子教程
apache
电子书巨多巨好
维维软件园
技术论坛
chinajavaworld
gceclub.sun
javafan
javaresearch
kissjava
matrix
中国DotNet俱乐部
开源项目
apache
java业内新闻
java游戏开源
Jogl
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

原创 求点到线段的近似算法收藏

新一篇: 学习笔记[序列化].NET Framework 开发员指南 | 旧一篇: 工作流开发笔记四

在做UI部分的时候要求出点是否在线段上,然而操作上实际是一个矩形区域才对,也就是说应该是点到矩形的距离.因为我们画的线段是有宽度的.我的算法是近似算法,其实也是对点到线段的计算,只是有一部分的精确程度不高,变成了区域了.

言归正传

先给出点是否在线段上的算法

 public bool IsContains(PointF p)
  {
   float a1,a2;
   float f1,f2,f3,f4;
   f1=p.X-HeadX;
   f2=p.Y-HeadY;
   f3=TailX-HeadX;
   f4=TailY-HeadY;

   a1=(f1)/(f3);
   a2=(f2)/(f4);

   if(f3==0f && p.X<=HeadX && a2>=0f && a2<=1f)
    return true;
   if(f4==0f && p.Y==HeadY && a1>=0f && a1<=1f)
    return true;

   if(a1==a2 && a1>=0f && a1<=2f && a2>=0f && a2<=2f)
    return true;


   return false;
}

接下来是改进的算法

public bool IsContains(PointF p)
{
   float a1,a2;
   float f1,f2,f3,f4;
   f1=p.X-HeadX;
   f2=p.Y-HeadY;
   f3=TailX-HeadX;
   f4=TailY-HeadY;

   a1=(f1)/(f3);
   a2=(f2)/(f4);
   
   Console.WriteLine("a1 :"+a1+"   a2 :"+a2);   

   if(f3==0f && (p.X-HeadX>=-1 && p.X-HeadX<=1) && a2>=0f && a2<=1f)
    return true;
   if(f4==0f && (p.Y-HeadY>=-1 && p.Y-HeadY<=1) && a1>=0f && a1<=1f)
    return true;

   if(a1-a2>-.1 && a1-a2<.1 && a1>=0f && a1<=1f && a2>=0f && a2<=1f)
    return true;


   return false;
}

其中HeadX HeadY为线段的头点坐标 TailX TailY为尾点坐标,可以颠倒,没有太大影响.p.X p.Y提供当前点坐标

可以看出主要区别在于最后一个判断上.当然了算法求的只是近似值,我只试验了几个方向上的线段,可以用,也许会有某些误差,数学忘好多.没办法论证了.有空的吧.

发表于 @ 2005年10月20日 18:58:00|评论(loading...)|编辑

新一篇: 学习笔记[序列化].NET Framework 开发员指南 | 旧一篇: 工作流开发笔记四

评论

#近似 发表于2005-10-21 08:50:00  IP: 211.100.21.*
拿来应急还成
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © 十分钟年华老去