我有以下Banach分形问题:所谓的Banach曲线可以使用以下分形规则生成:
注意:以点(x, y)为中心的半径r圆是所有点(x r·cos(t),y r·sin(t))的集合,其中0≤t≤2π,t以弧度给出。我可以使用Math.toRadians()
指南:
我想过每次添加圆圈,因为每次都应该有9个在边缘,1个在中心,但是我似乎只能得到右边或左边的圆圈,并且由于某种原因出现了运行时错误。
public static void banachCurve(int n) {
banachCurve (0.5,0.5,1,n);
}
private static void banachCurve(double x, double y, double r, int n) {
if (n == 0) {
return;
}
double d = (r/3);
StdDraw.circle (x,y,d);
// StdDraw.ellipse(x, y, r, r);
banachCurve (x + d, y, d, n - 1); // centre
banachCurve (x + d+ d, y+d, d, n--); // left
banachCurve (x , y + d, d, n--); // right
banachCurve (x+d , y +d+ d, d, n--);
banachCurve (x+d , y +d, d, n--);
}
如果要拖动数学。cos()在图片中,a la是当前公认的答案,为什么不全力以赴,使用正弦和余弦绕圆移动:
private static void banachCurve(double x, double y, double r, int n) {
if (n == 0) {
return;
}
double d = r / 3;
StdDraw.circle (x, y, d);
banachCurve (x, y, d, n - 1); // center
for (double angle = 0; angle < 360; angle += 45) {
double theta = Math.toRadians(angle);
double dx = x + d * Math.cos(theta);
double dy = y + d * Math.sin(theta);
banachCurve (dx, dy, d, n - 1);
}
}
banachCurve的输出(0.5、0.5、1、3)
这种方法可以轻松测试@tucuxi的建议,即六个而不是八个周围的圆圈。只需将
for
循环中的增量角度从45增加到60:
虽然我不能说这是对原设计的改进。尽管考虑到此代码设计,七个周围的圆圈同样微不足道,但仍吸引了人们的眼球:
每次调用n--
时,您都将n
传递给函数,然后将其递减一个以进行下一次调用。相反,您需要将n-1
传递给每个调用,因为调用本身会在其自己的递归调用中进一步递减n
,最终在您正确拥有的0
处停止。
对于四个基点,使用(x d,y)
、(x,y d)
、(x-d,y)
和(x,y-d)
可以正常工作,但对于四个对角点,毕达哥拉斯方法需要使用平方根(Math.sqrt
),或者三角方法需要使用正弦和余弦(Math.sin和
Math.cos
)。使用(x d,y d)
等将它们放置在正方形上。
假设x和y标记圆的中心,则函数将变为:
private static void banachCurve(final double x, final double y, final double r, final int n) {
if (n == 0) {
return;
}
final double d = r / 3;
StdDraw.circle (x, y, d);
banachCurve (x, y, d, n - 1); // centre
banachCurve (x, y + d, d, n - 1); // north
banachCurve (x + d, y, d, n - 1); // east
banachCurve (x, y - d, d, n - 1); // south
banachCurve (x - d, y, d, n - 1); // west
// Get the diagonal radius for a point at 45 degrees on the circle
final double diagD = Math.cos(Math.toRadians(45)) * d;
banachCurve (x + diagD, y + diagD, d, n - 1); // north-east
banachCurve (x + diagD, y - diagD, d, n - 1); // south-east
banachCurve (x - diagD, y - diagD, d, n - 1); // south-west
banachCurve (x - diagD, y + diagD, d, n - 1); // north-west
}
以下是banachCurve(0.5, 0.5, 1, 6)的输出:
例如,随机函数产生120个数字(0或1),这些相加值的平均值必须接近60。
问题内容: 我正在尝试用Java绘制曲线。一个简单的以(X,Y)开始,(X,Y)结束和曲线量的贝塞尔曲线就足够了。 我找不到在Swing中执行此操作的方法。如果不在Swing中,我可以使用一些简单的数学方法吗?我将如何在Swing中实现它? 编辑:我知道如何通过重写paint(Graphics g)方法绘制形状和线条。 问题答案: 您可以使用Java 2D Object Path2D.Double
求大佬解答一下, 只做过简单的曲线积分例题, 这题解不了。
规则的曲线比如圆、椭圆、抛物线都可以用一个函数去描述,对于不规则的曲线无法使用一个特定的函数去描述,这也就是样条曲线和贝塞尔曲线出现的原因。Threejs提供了这两种曲线的API,不需要自己封装,如果你想深入研究可以学习计算机图形学。 一条光滑样条曲线案例 在三维空间中设置5个顶点,输入三维样条曲线CatmullRomCurve3作为参数,然后返回更多个顶点,通过返回的顶点数据,构建一个几何体,通
主要内容:JavaFX曲线,QuadCurveJavaFX曲线 要创建三次曲线,请使用适当的构造函数。 设置三次曲线的主要参数是,,controlX1(控件点1X),controlY1(控件点1Y),controlX2(控件点2X)和controlY2(控件点2Y),,。 ,,和参数是曲线的起点和终点。,,和是控件点。 控制点(控制X1,控制Y1)影响线起点(startX,startY)和中间点之间的线段。控制点(controlX2,cont
SVG 曲线 - <polyline> 实例 1 <polyline> 元素是用于创建任何只有直线的形状:Sorry, your browser does not support inline SVG. 下面是SVG代码:<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <polyline points="20,20 40,25 60,4