谁能帮忙解决个算法 (画线)(100分)

  • 主题发起人 主题发起人 kmask
  • 开始时间 开始时间
K

kmask

Unregistered / Unconfirmed
GUEST, unregistred user!
谁能帮忙解决个算法

我算术不行,大家来帮忙

目的:我想在CANVAS上用描点法动态画线


我自制过程的原型大体如下

procedure drawaline(sp,ep:tpoint;precision:integer);//op为起始点坐标,ep为终点坐标,这两个坐标随机产生,precision为精度,即画多少个点组成一条线,也可以看作是线的密集程度

假设 op:=0,0 //canvas左上脚
ep:=245,90
precision:=100;//密集度

正常情况下:op与ep之间将有100个点组成一条虚线

drawaline中的龌龊代码已经给我删掉了,你能猜出来画出了什么东西吗???

一条波浪线!!!!!!是真的,一条波浪线,看起来也挺平滑的,可惜不是我想要的,我只要直线

谁能帮帮忙???告诉我这个drawaline该怎样写

 
不知道你说的是什么。能不能写明白点儿?
 
好吧,简单的说

我要在两个点之间画一条直线,一条用若干个点组成的直线

而且,我想知道每一个点的坐标

明白了吗?如何做???
 
pointnx:=op.x+(n*(ep.x-op.x) div precision);
pointny:=op.y+(n*(ep.y-op.y) div precision);
主要是精度吧!
 
代码:
我自己解决了,怎么办?
 
可以先用代数的方法求出两点所在直线的方程(用两点法,不用我教吧)。
设两点为:(x1,y1),(x2,y2) ,100个点
方程为:y=f(x)
X方向上的增量: dx=|x1-x2|/100
precision:=100;
for i:=1 to precision do
begin
x:=x1+i*dx;
y:=f(x);
canvas.pixel[x,y]:=clred;//红色
end;

注:
1. x1<>x2,若x1=x2,改用dx:=|y1-y2|/100;
2. 保证x1<x2;
 
我想我知道你的意思。
我在做触摸屏时写过这样的程序,任意两点之间画一条真线,
是用点画的,所以要知道这条线上每一个点的坐标(在LCD上点数可是有限制的)。
其实很简单,不知道你解决了没有,如果没有我可以提供给你。
我的程序是用C写的,不过一样的,看公式就知道了。
 
尽管我变相的解决了这个问题,但还是谢谢大家

jeefong,麻烦发给我看看,先谢了 邮件是 cmmail.com上的kmask

接着就要来兑现啦

 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
692
import
I
后退
顶部