public void drawAL(int sx, int sy, int ex, int ey, Graphics2D g2)
{
g2.setStroke(new BasicStroke(1.5f)) ;
double H = 8; // 箭头高度
double L = 3.5; // 底边的一半
int x3 = 0;
int y3 = 0;
int x4 = 0;
int y4 = 0;
double awrad = Math.atan(L / H); // 箭头角度
double arraow_len = Math.sqrt(L * L + H * H); // 箭头的长度
double[] arrXY_1 = rotateVec(ex - sx, ey - sy, awrad, true, arraow_len);
double[] arrXY_2 = rotateVec(ex - sx, ey - sy, -awrad, true, arraow_len);
double x_3 = ex - arrXY_1[0]; // (x3,y3)是第一端点
double y_3 = ey - arrXY_1[1];
double x_4 = ex - arrXY_2[0]; // (x4,y4)是第二端点
double y_4 = ey - arrXY_2[1];
Double X3 = new Double(x_3);
x3 = X3.intValue();
Double Y3 = new Double(y_3);
y3 = Y3.intValue();
Double X4 = new Double(x_4);
x4 = X4.intValue();
Double Y4 = new Double(y_4);
y4 = Y4.intValue();
// 画线
g2.drawLine(sx, sy, ex, ey);
GeneralPath triangle = new GeneralPath();
triangle.moveTo(ex, ey);
triangle.lineTo(x3, y3);
triangle.lineTo(x4, y4);
triangle.closePath();
//实心箭头
g2.fill(triangle);
//非实心箭头
//g2.draw(triangle);
}
// 计算
public double[] rotateVec(int px, int py, double ang, boolean isChLen, double newLen)
{
double mathstr[] = new double[2];
// 矢量旋转函数,参数含义分别是x分量、y分量、旋转角、是否改变长度、新长度
double vx = px * Math.cos(ang) - py * Math.sin(ang);
double vy = px * Math.sin(ang) + py * Math.cos(ang);
if (isChLen) {
double d = Math.sqrt(vx * vx + vy * vy);
vx = vx / d * newLen;
vy = vy / d * newLen;
mathstr[0] = vx;
mathstr[1] = vy;
}
return mathstr;
}
分享到:
相关推荐
在本游戏中,自编写了一个代表华容道人物的类,实现华容道游戏中人物的构造,画出华容道的边界,提示曹操逃出位置和按键规则,点击相应的人物,然后按键盘上的上下左右箭头移动,判断是否和其它人物或下边界出现重叠,...
- 在Java中,我们可以使用`java.awt.Cursor`类的`setCursor`方法,传入`Cursor`类型的常量来设置光标。 - 在Python的Tkinter库中,使用`tkinter`的`cursor`属性来改变光标。 2. **光标类型**: - 不同的环境提供...
开发者还可能使用了事件监听器来响应用户的键盘输入,例如WASD或箭头键来控制方块的移动和旋转。同时,为了实现方块的动画效果,游戏循环可能采用定时器或者延时函数来控制每帧的时间间隔。 在分析源代码时,你可以...
例如,上箭头键可能会使飞机的y坐标减小,下箭头键则增加,左箭头和右箭头相应地改变x坐标。 3. **颜色处理**:描述中提到飞机有颜色变化,这可能涉及到色彩理论和图形渲染。开发者可能会使用RGB、HSV等色彩模型来...
在测试函数中,我们可以使用下面的代码来创建一个树,并将其显示出来: ```java import java.awt.BorderLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing....
22. 类构造函数:在C++中,给定的构造函数会将a设为4,b设为a与5的乘积,所以x.a是4,x.b是20。 23. 表达式计算:在某些编程语言中,'M+N'会被解释为字符串连接,因此1+&K的结果是1232。 24. 工具栏操作:用户可以...
15. Swing组件:Swing是在AWT基础上构建的新图形界面系统,提供了AWT的功能,且组件由Java代码实现,不是重量级组件。 16. 线程生命周期:线程的start()方法使其进入就绪状态,run()方法执行完毕或异常终止则进入...
14. 数据流图:在数据流图中,带有箭头的线段表示数据流,即信息的流向。 15. 选择多个文件:在Windows资源管理器中,选择不连续的多个文件需先按住Ctrl键再逐个单击。 16. JavaScript概述:JavaScript是一种...
例如,在C++中,我们可以使用`GetCursorInfo()`函数,而在Java中,可以利用`java.awt.MouseInfo.getPointerInfo().getCursor()`方法获取鼠标信息。 除了获取当前形状,有时我们还需要能够改变鼠标形状,这同样可以...
26. AWT布局管理器:Java AWT中包括FlowLayout、BorderLayout、CardLayout和GridLayout等多种布局管理器。 27. 资源管理器:带“+”的文件夹表示包含子文件夹,可展开。 28. 插入声音:在Word中,"联机剪辑"功能...
例如,箭头形状通常表示一般操作,而沙漏形状表示系统正在等待响应。在各种操作系统中,如Windows、Mac OS或Linux,都有预定义的鼠标指针形状,开发者可以通过编程接口(API)来访问和修改这些形状。 在Windows平台...
C#还支持Windows API调用,如user32.dll中的PrintWindow函数,可以获取任意窗口的截图。结合WinForm或WPF,可以实现类似QQ截图的交互式界面,包括选择区域、添加标注等功能。 对于JAVA,我们可以利用java.awt.Robot...
6. 函数变量作用域:在不同函数中可以使用同名变量,函数内部定义的变量仅在该函数内部有效,局部变量在复合语句中定义的有效范围仅限于该复合语句,而不是整个函数。 7. Java InputStream合并:`...
17. Swing是AWT的增强和扩展,两者可以在GUI程序中同时使用,但AWT中的组件不是从Swing继承的。 18. 可以设置“字段大小”属性的数据类型通常是文本(Text)。 19. DataSet使用XML来描述数据,具有跨平台特性。 ...
这通常通过监听键盘输入事件并在事件触发时调用特定函数来实现。 首先,我们需要理解基本的事件处理机制。在大多数编程语言中,如Python、Java或C#,都有库或框架提供事件驱动编程的支持。例如,Python的pygame库...
源码中可能会有专门的函数来检测赛车与其他物体(如障碍物、边界)的碰撞,一旦发生碰撞,游戏会根据设定的规则作出反应,如减慢赛车速度、重新开始游戏等。 此外,游戏可能会有一个主类(Main class)负责初始化和...
20. **Excel命令**:在Excel中,带有右箭头的命令通常表示该命令具有子菜单,展开后会有更具体的选项。 21. **系统信息查看**:在Windows中,可以通过控制面板的“系统”命令或右键点击“我的电脑”来查看系统的...
10. JavaScript确认对话框:在JavaScript中,可以使用`confirm()`函数创建一个确认对话框,询问用户是否执行某个操作,如删除。 11. Java源文件与类:一个源文件最多只能包含一个公共类,但可以包含多个非公共类。 ...
- 快捷方式是文件或文件夹的一个链接,图标左下角有一个小箭头。 ### 16. Access对象 - Access关系数据库中的对象不包括 **Word文档**。主要对象包括表、查询、窗体、报表、宏和模块等。 ### 17. 算法有穷性 - ...
1. **JAVA基础语法**:作为源码的基础,对JAVA语言的基本结构、数据类型、控制流程(如if语句、for循环、while循环)以及函数的理解至关重要。源码中的类定义、方法声明和变量声明都是JAVA语法的体现。 2. **AWT库*...