gpt4 book ai didi

java - 在java中绘制之字形(Spring)

转载 作者:行者123 更新时间:2023-11-29 04:50:04 25 4
gpt4 key购买 nike

我目前正在制作一个程序,该程序可以动画化质量 Spring 在位移时的简谐运动。除了我的程序当前使用 graphics.drawline 方法绘制一条直线来表示 Spring ,而不是绘制类似 Spring 的事实之外,我的一切都在工作。我理想情况下想要像 this 这样的东西但是我对图形不是很有经验,也不知道如何处理它,我试图自己制作一个算法,但它一直在崩溃。有谁知道我可以在这里使用的任何现有算法?如果 Spring 的拉伸(stretch)看起来逼真,那也很棒(如果可能的话)。

这是我当前的代码:

    g.fillRect(width/10 - 2, height/2 - 10, 4, 20);
g.fillRect(9*width/10 - 2, height/2 - 10, 4, 20);

g.drawLine(width/10, height/2, (int) (width/2 - (sCoefficientH * s)), height/2);
g.fillOval((int) (width/2 - (sCoefficientH * s)) -5, height/2 - 5, 10, 10);

如您所见,有一条线将墙(小矩形)连接到椭圆形(代表 Spring 上的质量)。如果我可以在此类中添加一个新方法,该方法采用 2 个坐标和一个松弛的大小(看起来不会压缩)并返回图形对象(注意我没有使用 Graphics2D),其中绘制了 Spring 正确的地方然后我认为它会看起来好多了。 This是目前的样子。

最佳答案

试试这个:

void drawSpring(double x1, double y1, double x2, double y2, double w, int N, Graphics g)
{
// vector increment
double inv = 0.25 / (double)N;
double dx = (x2 - x1) * inv,
dy = (y2 - y1) * inv;

// perpendicular direction
double inv2 = w / sqrt(dx * dx + dy * dy);
double px = dy * inv2,
py = -dx * inv2;

// loop
double x = x1, y = y1;
for (int i = 0; i < N; i++)
{
g.drawLine(x , y ,
x + dx + px, y + dy + py);
g.drawLine(x + dx + px, y + dy + py,
x + 3.0 * dx - px, y + 3.0 * dy - py);
g.drawLine(x + 3.0 * dx - px, y + 3.0 * dy - py,
x + 4.0 * dx , y + 4.0 * dy );
x += 4.0 * dx;
y += 4.0 * dy;
}
}

也许将 Graphics 更改为 Java 中的任何等效项。

编辑:我在 VB.NET 中得到的: enter image description here

关于java - 在java中绘制之字形(Spring),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35777581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com