我目前正在制作一个程序,它可以在质量弹簧移位时激活质量弹簧的简谐运动。我所做的一切都与以下事实不同:我的程序目前使用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是目前的样子。
答案 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中的等价物。