输出 两点间直线 上所有点?
int类型 表示所有点就可以
这个必须知道线段的长度。
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); }
根据x坐标或者y坐标以1为单位移动直到移出直线外,先计算出斜率,用斜率来算出每个点的坐标。
谢谢,斜率k可以在循环外层求得,因为知道两点坐标。
@KissFU: 恩,对。
画线段?点大小是多少。线段上的点是无数的。。
基本上就是用三角函数或者直角函数直接求出一些点
思路简单点的,两点就能确定一条直线了Y = kX + b; k 和 b都能求出来。
在两点所形成的[矩形]内选点,看看哪些点符合这个公式就在这条线上了,就是两点[之间][直线]上的点了。
谢谢你的回答,直线是可以求出来的。但是怎么输出直线上所有点呢(用int 表示就ok),可否代码实现呢
@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 就是在线上的了 } } }
@之奇一昂: k*i + b = j 这里可能你需要根据情况来用double来计算
这个需要用到数学知识了,要求有多少个点,这个可以根据点间距来计算