在java中绘制一个之字形(Spring)

时间:2016-03-03 16:23:42

标签: java swing graphics awt

我目前正在制作一个程序,它可以在质量弹簧移位时激活质量弹簧的简谐运动。我所做的一切都与以下事实不同:我的程序目前使用graphics.drawline方法绘制直线来代表弹簧,而不是像弹簧那样绘制。我理想地想要像this这样的东西,但是我对图形并不是很有经验并且不知道如何处理它,我试着自己制作一个算法,但它一直在崩溃。有谁知道我可以在这里使用的任何现有算法?如果弹簧的拉伸看起来很逼真,那么这也很好(如果可能的话)。

这是我目前的代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="ir.aftabeshafa.shafadoc.MainActivity"
    tools:showIn="@layout/app_bar_main">
    <fragment
        android:id="@+id/headlines_fragment"
        android:name="ir.aftabeshafa.shafadoc.CatFrag"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

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

1 个答案:

答案 0 :(得分:3)

试试这个:

runJavaScript

也许将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; } } 改为Java中的等价物。

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