来看看这个画直线的问题!(50分)

  • 主题发起人 主题发起人 Rik
  • 开始时间 开始时间
R

Rik

Unregistered / Unconfirmed
GUEST, unregistred user!
各位玩过以前任天堂红白机上的那种台球游戏了吗?它的瞄准线就是一条可以
在到球案边沿自动按一定角度折过去直线,请问如何用Delphi实现这个效果?
 
这不单是直线的问题呀,找到边界很好实现的,有空可以写个例子
 
根据反射角等于入射角的原理,你可以画出来啊,比如球在撞到水平线时
水平方向的变化不变,而垂直方向的值变负就行了呀,我以前做的一个屏幕保护
就是这样的,我在屏幕上画了3个球,开始时以随机的速度和角度射出,然后再
屏幕的四周反射,在每次触边时只需改变一个方向就可以了,当然,你这里的情况
可能稍微多了一点,就是袋口的角度,其实也可以调用tg()之类的函数啊



 
能给一个例子吗?我第一次接触这个。
 
要看你是以什么为水平线的,如果以弹到的球案边的话,则90-入射角,其他要看情况了
tg()也不错
 
自己计算角度,画线,有什么问题么?
 
不是太难吧
 
卷起千堆雪tyn,你能写一段示例给我吗?
 
写!我写!

其实也不是计算角度的问题,而是镜像的问题。
这么来:假设一直线起点 (X1,Y1),终点(X2,Y2),那么以经过(X1,Y1)点为水平轴,
则 : 与(X2,Y2)点对应的点就是 (X2,abs(Y2-(2*Y2-2*Y1))),应该明白了吧?

自己推理了。
 
完全明白!!!
可就是以我的能力做不到啊!!!
帮帮我这个高中生吧!
 
其实你画出这种效果只需要3个点,是不是?
这样来 :

以(X1,Y1)为基准点

Canvas.MoveTo(X1,Y1);
Canvas.LineTo(X2,Y2);
Canvas.MoveTo(X1,Y1);
Canvas.LineTo(X2,abs(Y2-(2*Y2-2*Y1)));

 
以上都没有考虑反射多次的情况,
给出伪代码:
TYPE TLINE=RECORD
POINTSTART:TPOINT;
POINTEND:TPOINT;
END;
FUNCTION GETREFLECTLINE(LINE:TLINE):TLINE;{求得该线的反射线}
BEGIN
{这段代码应该简单}
END;

PROCEDURE DRAWLINE(LINE{初始线}:TLINE;DEEP{反射几次}:INTEGER);
BEGIN
FOR I:=1 TO DEEP DO
BEGIN
LINE:=GETREFLECTLINE(LINE);
DRAW(LINE);
END
END;
{在台球杆旋转时重复执行,就呈现游戏中的那种效果了}
EVENT POLEDIRECTIONROTATE
DRAW(LINE,N)
END
 
哪位干脆给我一个好一些的TLine控件吧,然后我立即散分
 
干脆给你一个台球控件吧,不过我没有;有了编程思想,就自已动手,丰衣足食
 
还需要考虑是否有障碍,
在 小于n的时候就已经碰到球了,还画啥啊
 
只是一个比喻,有这样的线条控件吗?
 
还UP什么呀?就这事拖了9个月,你可真行。上面已经很清楚了,不要什么都用控件,能自
己尝试慢慢写出的东西为什么非要现成的呢?上面的情况已经很清楚了,怎么划线,怎么
改变方向,甚至别人也提醒你了,在遇到障碍物怎么办,你还需要什么。如果你对编程
不感兴趣,为什么要这个,如果感兴趣,为什么自己不尝试?
おかしい。
 
肯定不是3个点
 
后退
顶部