首页 新闻 会员 周边 捐助

c# 两点求 两点间直线上所有点

0
[已解决问题] 解决于 2015-12-01 17:40

输出        两点间直线 上所有点?

问题补充:

int类型 表示所有点就可以

亲福的主页 亲福 | 初学一级 | 园豆:40
提问于:2015-11-30 14:20
< >
分享
最佳答案
0

这个必须知道线段的长度。

 Point pStart = new Point(0, 2);
            Point pEnd = new Point(8, 2);
            //定义线上的点
            List<Point> linePoint = new List<Point>();
            //定义x坐标的大小
            Point pointMaxX = new Point();
            Point pointMinX = new Point();
            //给x坐标大的点和小的点赋值
            if (Math.Max(pStart.X, pEnd.X) == pStart.X)
            {
                pointMaxX = pStart;
                pointMinX = pEnd;
            }
            else
            {
                pointMaxX = pEnd;
                pointMinX = pStart;
            }
            // 循环x坐标(循环满足x坐标为整数的y坐标)或者y坐标均可
            for (int i = pointMinX.X + 1; i < pointMaxX.X; i++)
            {
                // 计算斜率
                double k = ((double)(pointMinX.Y - pointMaxX.Y)) / (pointMinX.X - pointMaxX.X);
                // 根据斜率,计算y坐标
                double y = k * (i - pointMinX.X) + pointMinX.Y;
                // 简单判断一下y是不是整数
                double d = y - (int)y;
                if (0.001 > d && d > -0.001)
                {
                    linePoint.Add(new Point(i,(int)d));
                }
            }
            //打印点
            foreach (var item in linePoint)
            {
                Console.WriteLine(item.X + @"," + item.Y);
            }
奖励园豆:5
凝冰 | 小虾三级 |园豆:685 | 2015-11-30 15:03

根据x坐标或者y坐标以1为单位移动直到移出直线外,先计算出斜率,用斜率来算出每个点的坐标。

凝冰 | 园豆:685 (小虾三级) | 2015-12-01 12:43

谢谢,斜率k可以在循环外层求得,因为知道两点坐标。

亲福 | 园豆:40 (初学一级) | 2015-12-01 17:39

@KissFU: 恩,对。

凝冰 | 园豆:685 (小虾三级) | 2015-12-01 17:40
其他回答(3)
0

画线段?点大小是多少。线段上的点是无数的。。

基本上就是用三角函数或者直角函数直接求出一些点

吴瑞祥 | 园豆:29449 (高人七级) | 2015-11-30 14:30
0

思路简单点的,两点就能确定一条直线了Y = kX + b; k 和 b都能求出来。

在两点所形成的[矩形]内选点,看看哪些点符合这个公式就在这条线上了,就是两点[之间][直线]上的点了。

之奇一昂 | 园豆:1421 (小虾三级) | 2015-11-30 15:25

谢谢你的回答,直线是可以求出来的。但是怎么输出直线上所有点呢(用int 表示就ok),可否代码实现呢

支持(0) 反对(0) 亲福 | 园豆:40 (初学一级) | 2015-12-01 11:03

@KissFU: 假设点A(x1,y1) B(x2,y2)这两个点,求出的直线方程为 y = kx + b;

那么,我们还可以确定所需要的线段的坐标范围 (x1~x2, y1~y2)这个矩形。

如果已经知道点了,我们直接把点代到这个公式里面算一下就知道是不是在这条线上了。

如果不知道点,那得看你的精度要求了, x1~x2之间的double数可是无穷的……

int就好办了。

for(int i = x1; i <= x2; i ++){
    for(int j = y1; j <= y2; j++){
         if(k*i + b = j){
            // i j 就是在线上的了
        }
    }
}        

 

支持(0) 反对(0) 之奇一昂 | 园豆:1421 (小虾三级) | 2015-12-01 12:54

@之奇一昂: k*i + b = j 这里可能你需要根据情况来用double来计算

支持(0) 反对(0) 之奇一昂 | 园豆:1421 (小虾三级) | 2015-12-01 12:57
0

这个需要用到数学知识了,要求有多少个点,这个可以根据点间距来计算

CodeHsu | 园豆:5668 (大侠五级) | 2015-11-30 22:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册