【发布时间】:2015-05-25 17:57:41
【问题描述】:
所以我被分配了选择一张图片并使用java代码(主要是drawLine和drawArc方法)绘制它的任务,我决定使用下面屏幕截图链接中显示的flamel。
问题 1:drawArc 方法的 (x, y, x width, y height, startAngle, arcAngle) 正确吗?我将图片放入绘画并打开网格,这样我可以获得(x,y)坐标并计算高度和宽度。但是,当我运行程序时,圆弧永远不会从 (x,y) 坐标开始,我总是必须调整所有数字才能将圆弧移动到应有的位置。有没有什么办法解决这一问题?我是不是做错了什么?
问题 2:上面的屏幕截图是我迄今为止编码的结果。请注意,如红色箭头所示,该弧的末端向内移动,而不是倾斜结束。将该弧与第一个屏幕截图(原始火焰)的相应区域进行比较,以更好地了解我的意思。基本上我想要一条流过的曲线。我四处搜索并找到了 Cardinal Spline (Catmull-Rom),这正是我正在寻找的,但我没有找到关于它如何工作的简单解释或示例代码.代码越短越好(更容易理解)。我使用 jGrasp 进行编码,我发现的所有“演示”和“源代码”都有大量我不理解且不知道如何修复的编译错误。我是一名 Java 新手,所以如果有人可以让我了解如何创建一条通过 Java Applet 中多个点的曲线的基础知识,我将不胜感激。
代码如下
import java.applet.*;
import java.awt.*;
public class Flamel extends Applet
{
public void paint (Graphics flamel)
{
//crown
flamel.drawLine(217,75,217,105);
flamel.drawLine(283,75,283,105);
flamel.drawLine(217,105,283,105);
flamel.drawArc(217,62,33,20,180,180);
flamel.drawArc(250,62,33,20,180,180);
//left wing
flamel.drawLine(203,98,147,98);
flamel.drawLine(233,133,216,133);
flamel.drawLine(204,127,181,127);
flamel.drawLine(181,127,172,118);
flamel.drawArc(204,113,22,20,199,67);
flamel.drawArc(158,93,25,25,190,90);
flamel.drawArc(145,95,20,14,154,140);
flamel.drawArc(203,65,60,67,180,90);
//right wing
flamel.drawLine(297,98,353,98);
flamel.drawLine(267,133,284,133);
flamel.drawLine(296,127,319,127);
flamel.drawLine(319,127,328,118);
flamel.drawArc(274,113,22,20,270,67);
flamel.drawArc(318,93,25,25,260,80);
flamel.drawArc(334,95,20,14,255,140);
flamel.drawArc(236,65,60,67,270,90);
//cross heads (top/bottom/left/right)
flamel.drawLine(250,128,237,151);
flamel.drawLine(250,128,263,151);
flamel.drawLine(237,151,244,159);
flamel.drawLine(263,151,257,159);
flamel.drawLine(250,421,238,398);
flamel.drawLine(250,421,263,398);
flamel.drawLine(238,398,244,393);
flamel.drawLine(263,398,257,393);
flamel.drawLine(170,220,146,233);
flamel.drawLine(170,246,146,233);
flamel.drawLine(170,220,177,227);
flamel.drawLine(170,246,177,240);
flamel.drawLine(330,220,354,233);
flamel.drawLine(330,246,354,233);
flamel.drawLine(330,220,323,227);
flamel.drawLine(330,246,323,240);
//cross body
flamel.drawLine(244,159,244,393);
flamel.drawLine(257,159,257,393);
flamel.drawLine(177,227,323,227);
flamel.drawLine(177,240,323,240);
//snake (starting upward from tail)
flamel.drawArc(252,342,10,45,270,180);
flamel.drawArc(240,296,6,33,90,180);
flamel.drawArc(225,270,35,85,90,180);
flamel.drawArc(235,218,45,45,270,90);
}
}
【问题讨论】: