最近在写一个画图程序。遇到一个算法问题。望大家指教

hugo12345 2008-07-13 09:27:17
在一个固定的区域随便画4条线。然后用鼠标框选一个区域。需要达到的目标是选中经过该区域的所有直线。这个算法怎么实现?
...全文
139 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
hugo12345 2008-07-15
  • 打赏
  • 举报
回复
2楼的方法我不太明白.谁能说详细点?
RichardSzwz 2008-07-15
  • 打赏
  • 举报
回复
类似拾取,你在画这4条线的时候首先要构建每条线的特性,例如线段就是起始、终止点的坐标,然后拾取这个线条的算法就可以根据这两个点计算了,可以通过斜率计算是否有包容的点即可。

我感觉二楼说的有道理!
hugo12345 2008-07-15
  • 打赏
  • 举报
回复
按9楼的说法 也就是要判断所有直线咯。如果画布上线段太多. 就要逐个判断咯.不太科学吧
GentleCat 2008-07-15
  • 打赏
  • 举报
回复
计算该直线(在固定区域内肯定表现为线段啦)的边界盒与该矩形是否相交,如相交,则继续判断线段的与矩形的边界是否
相交(具体可用线段的向量叉乘判断)
gomoku 2008-07-15
  • 打赏
  • 举报
回复
You have to do hit test.

But there are optimizations for complex scene, like

Bounding Box, // a bounding box is rectangle one, so it is easier for pre-intersect-detection than a circle
Spatial partitioning, // divide the space into sub-spaces and hit-test within the smaller area
Temporal coherence, // a far away object is unlikely to intersect the next moment
...
hugo12345 2008-07-15
  • 打赏
  • 举报
回复
如果在一个有很多线段或是图形的画布上.用鼠标框选一个区域,如果用判断相交的方法判断的话就要计算所有的线段或图形.这个不科学吧.再说如果是一个图形就不能判断相交了吧.请问还有别的方法吗?
shrinerain 2008-07-15
  • 打赏
  • 举报
回复
线性代数的"矩阵", 不知道楼主有没有学过.

一条线段的方程是y=ax+b(x1<x<x2)

你是一个4个2元一次方程的方程组, 也就是一个矩阵.

求解即可.

gomoku 2008-07-13
  • 打赏
  • 举报
回复
1楼的方法,如何判断相交呢?
拿出笔和纸来琢磨琢磨。
两条线相交并不是难题,权且其中一条还是平行于X轴或Y轴。
hugo12345 2008-07-13
  • 打赏
  • 举报
回复
杂弄啊???????!!!!!!!!!!!!
hugo12345 2008-07-13
  • 打赏
  • 举报
回复
1楼的方法,如何判断相交呢?
2楼的方法,您的意思是不是判断这条直线是否有点落在这个区域内?那就需要这个区域的点的集合哦。
hugo12345 2008-07-13
  • 打赏
  • 举报
回复
1楼 的方法,如何判断相交呢?
2楼 的方法,能否说的清楚点。我不是很明白。
谢谢
cnming 2008-07-13
  • 打赏
  • 举报
回复
类似拾取,你在画这4条线的时候首先要构建每条线的特性,例如线段就是起始、终止点的坐标,然后拾取这个线条的算法就可以根据这两个点计算了,可以通过斜率计算是否有包容的点即可。

类似CAD,我的CSDN BLOG中有部分CAD的内容
gomoku 2008-07-13
  • 打赏
  • 举报
回复
一个鼠标框选区域正好有4个线段。

随便画的直线如果同那4个线段的任何一个相交,那么该直线就经过该区域。

111,000

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧