我有10000条甚至更多的线
目标:找出所有水平线,竖直的线,以及两两平行的线,两两垂直的线。再从平行线里面找出两两相等的线,分别做出不同标记。
要求: 用最少的循环最高的效率来实现。写出伪代码判断水平: IsThisLineHorizontal()
判断竖直 IsThisLineVertical()
判断两两平行 IsTwoLinesParallel()
判断两两垂直 IsTwoLinesNormal()
判断两两相等 IsTwoLinesEqual()要考虑到所有的水平线必然两两平行
所有竖直的线也必然两两平行
所有水平线与竖直线之间必然两两垂直我目前的方法是:
Step1: 先将所有线分为三类:水平线,竖直线,既不水平又不竖直的线
Step2: 循环所有水平线,对水平线两两加平行标志,如果平行的话判断是否相等,若相等加相等标志
Step3: 循环所有竖直线,对竖直线两两加平行标志,如果平行的话判断是否相等,若相等加相等标志
Step4:循环水平线与竖直线,两两加垂直标志。
Step5: 循环既不水平又不竖直的线,找处其中两两平行,两两垂直的线,如果平行的话判断是否相等,若相等加相等标志。太复杂了,有没有办法简化
目标:找出所有水平线,竖直的线,以及两两平行的线,两两垂直的线。再从平行线里面找出两两相等的线,分别做出不同标记。
要求: 用最少的循环最高的效率来实现。写出伪代码判断水平: IsThisLineHorizontal()
判断竖直 IsThisLineVertical()
判断两两平行 IsTwoLinesParallel()
判断两两垂直 IsTwoLinesNormal()
判断两两相等 IsTwoLinesEqual()要考虑到所有的水平线必然两两平行
所有竖直的线也必然两两平行
所有水平线与竖直线之间必然两两垂直我目前的方法是:
Step1: 先将所有线分为三类:水平线,竖直线,既不水平又不竖直的线
Step2: 循环所有水平线,对水平线两两加平行标志,如果平行的话判断是否相等,若相等加相等标志
Step3: 循环所有竖直线,对竖直线两两加平行标志,如果平行的话判断是否相等,若相等加相等标志
Step4:循环水平线与竖直线,两两加垂直标志。
Step5: 循环既不水平又不竖直的线,找处其中两两平行,两两垂直的线,如果平行的话判断是否相等,若相等加相等标志。太复杂了,有没有办法简化
思归说的有道理、但是两两相等说的好像不是很明白。 hdt(近来工作忙,每天只能接分半个小时)
你说是个矩阵运算、可以写一个大概吗??
只要多说明一下。谢谢
直線方程式﹕y1=a1x+b1; y1=0則垂直,若a1=0則平行.
另一直線:y2=a2x+b2 若a1=a2兩直線平行﹐若a1=a2且b1=b2兩直線相等.
觉得对精度要求不是很高的话,思归的方法最合适!!list不会很多!!
不过,我有几年没接触过cad了,呵呵具体算法一点都记不住了,参考书也不知丢哪去,sorry
根据文件score.txt中的学生成绩计算平均成绩,并计算排名,将处理的结果写入文件score_result.txt中,score.txt文件格式如下
张三 66 78
李四 99 45
………………
写出程序
救命的
1.求出每条线的斜率(0-180)、长度,和其中的一个顶点来。(顶点的选择规则如下,选择每条线段右的顶点,如果是垂直就是最下)
2.对所有线进行分组。(建立一个链表数组,对所有线进行遍历,如果斜率存在于链表数组中,就把这个线挂在后面的链里,如果没有,则插入数组,作为一个头),如下图:斜率1.3>斜率3.1565->斜率0.2345->……
| | |
线段1 线段2 线段3
| | |
线段4 线段6 线段5
| | |
线段7
3.对每个链表中的线比较最右下节点,相同的剔除(因为是同一根线)
4.那么平行线就是斜率相同的线,即在一个链表里的线
5.求垂直的只要在数组中查找斜率垂直就可以,而且找到就停。(因为垂直线斜率只有一个)
6.求斜率相同,长度相同的就在链表里查长度,相同就相等啦
7.查水平与垂直,只要在数组中查斜率也就可以了。最后建议,如果精度高,建议把斜率用分数表示,方法如下:
一条线段必然有两个顶点,分别记为(a1,b1),(a2,b2)。斜率k=取正{(b1-b2)/(a1-a2)}
在程序中不要计算出具体的值,只要存好b1-b2和a1-a2就可以了
具体用这样的表示方法如何判平行与垂直就不用我说了吧?我觉得这样先用斜率分组,可以减少很多不必要的比较次数,楼主说的那种在非平行非垂直线中找的方法有很多很多次的比较都是无谓的,应该尽量减少。
以上是我的一点看法,希望大家多多指正。