请问如何获取一条直线上所有点的坐标?

coolsol 2004-01-23 10:35:10
比如我在屏幕上画一条直线,
水平的直线,起点坐标是(0,0),终点坐标是(100,0),那么我可以很简单的得到这条直线上所有的点的坐标,就是(1,0),(2,0)…………
但是如果我画的不是一条水平的直线,而是一条斜线,起始坐标是(0,0),终点坐标是(60,70),那么我怎样得到这条直线上所有的点的坐标呢?
斜线的长度都不是一个整数,不过这个可以取整,但是各个点的坐标我实在是想不出来怎样获得,如果各位坛友能够帮助我,实在是不甚感激!!!!!!!!
...全文
2493 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
简易无忌 2004-02-01
  • 打赏
  • 举报
回复
坐标不要定义为整形数,根据判断,分成几个类别,如:

1:竖直线段时~~~
2:水平
3:(1)当|x2-x1|<30时,x取3.2, 3.3, 3.4, 3.5,...
(2)........
flc 2004-01-31
  • 打赏
  • 举报
回复
学习
coolsol 2004-01-31
  • 打赏
  • 举报
回复
楼上的和 cso(sjxsoft)的解决方案一样
不行啊~~~~~~~~~~~~
我郁闷死了
简易无忌 2004-01-27
  • 打赏
  • 举报
回复 1
假若直线的两个端点是:(x1,y1) 和 (x2,y2) 那么,直线间的点的坐标为:

( x , y1+(x-x1)(y2-y1)/(x2-x1) ) 所有变量可设为Single


也就是说,给定一个x坐标,那么y坐标就是 y1+(x-x1)(y2-y1)/(x2-x1)

不知道搂主是不是想要这个。
cso 2004-01-25
  • 打赏
  • 举报
回复
不知道这个有用没有:
Public Declare Function LineDDA Lib "gdi32" Alias "LineDDA" (ByVal n1 As Long, ByVal n2 As Long, ByVal n3 As Long, ByVal n4 As Long, ByVal lpLineDDAProc As Long, ByVal lParam As Long) As Long
枚举指定线段中的所有点
Long,非零表示成功,零表示失败
n1,n2 ---------- Long,线段的x,y起点坐标
n3,n4 ---------- Long,线段的x,y终点坐标
lpLineDDAProc -- Long,vb5中的一个函数地址
lParam --------- Long,枚举过程中传递给回调函数的用户自定义值通常用这个函数执行自定义的线段作图——例如,可将一条线中的其他每个像素都设成不同的颜色。在MM_TEXT模式下,每个点都对应于设备中的一个像素——在这种模式下,也可用这个函数进行线段中的击中测试。线段中的最后一个点不会枚举出来
zyl910 2004-01-25
  • 打赏
  • 举报
回复
去学《计算机图形学》
一般第一章就是讲图形光栅化,第一节就是讲直线的


有一种叫做Bresenham的算法,只用了整数加减运算
coolsol 2004-01-25
  • 打赏
  • 举报
回复
自己顶一下各位指教啊
lnfxzcl 2004-01-25
  • 打赏
  • 举报
回复
根据给出的点进行插值,然后,对各点进行拟合,拟合后,会形成一个方程式。这样,就可以求出来一条曲线了。
cso 2004-01-23
  • 打赏
  • 举报
回复
注意,我先给你写了一个例子,但是不全,必须是末坐标的一个数值必须大于始坐标,剩下的就是你自己的事情了。仓促而成,仅供参考
Private Sub Command1_Click()
Dim P(), i
Const StartPointX = 2
Const EndPointX = 10
Const StartPointY = 0
Const EndPointY = 20
ReDim P(IIf(EndPointY - StartPointY > EndPointX - StartPointX, EndPointY - StartPointY, EndPointX - StartPointX))
For i = 0 To UBound(P)
If EndPointY - StartPointY > EndPointX - StartPointX Then
Print "X:" & StartPointX + (i / (EndPointY - StartPointY)) * (EndPointX - StartPointX)
Print "Y:" & StartPointY + i
Else
'....
End If
Next i
End Sub
coolsol 2004-01-23
  • 打赏
  • 举报
回复
cso(sjxsoft) 您能够详细的解说一下吗?我是彻头彻尾的菜鸟。谢谢!
cso 2004-01-23
  • 打赏
  • 举报
回复
你可以尝试用始末坐标量除以下
coolsol 2004-01-23
  • 打赏
  • 举报
回复
谢谢楼上的,但是事情往往不是这么简单的
两条不同斜率的斜线,
比如一条很平的斜线,起始点的坐标为(0,0),终点坐标为(100,10),如果按照三楼的方法,可能就只能得到10个点
一条斜率很大的直线,起始点的坐标为(0,0),终点坐标为(100,100),如果按照三楼的方法,可能就只能得到100个点
这显然都是不正确的,所以还请各位继续指教!!
smalle 2004-01-23
  • 打赏
  • 举报
回复
直线不是有一个方程表达式的嘛,从X=0到60代入方程得出的Y就是点的Y值啦!

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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