java中画圆弧用哪个方法_绘制斐波那契弧

我正在尝试创建一个类似于这些的Fibonacci Arcs应用程序 .

c592c1d1-2842-42fb-8a20-946de04b53c6.png

但是,我喜欢画出超过图中所示的三条斐波那契线 . 我已经使用JFreeChart创建了一个应用程序来尝试完成此任务 . 但是,这是尝试绘制上一张图片中显示的相同弧(但作为圆圈)时的结果 .

f6d579de-0017-4551-8d8e-578c9ee44228.png

最初,它只是看起来不对,但是当我缩小时,它确实是一个圆圈,但它太大了 .

f813c752-469a-423e-adc8-c2b6adf1bfd9.png

要计算弧线,你绘制一条线,然后取一个斐波那契比例 - 让我们使用.381例如 - 该线的百分比 . 如果你看第一张照片,你会看到最里面的圆弧与直线相交,直线距离圆心的距离为.381% . 首先,我计算这一点 . 然后我构建一条从.381%点到中心的线 . 然后我取这条线的距离,这应该是半径 . 然后我用这个半径绘制圆圈 .

这是计算半径的代码 . 停止和开始是绘制线的停止点和起点 .

multiplier = ratio38Value + i;

diffx = (stop.getX() - start.getX()) * multiplier;

diffy = (stop.getY() - start.getY()) * multiplier;

xValue = start.getX() + diffx;

yValue = start.getY() + diffy;

point = new Point(xValue, yValue);

lineSegment = new Line(point, stop);

radius = lineSegment.getDistance();

circle = new Circle(stop.getX(), stop.getY(), radius);

circles.add(circle);

这是计算线距离的代码

public double getDistance(){

double x = Math.pow(endPoint.getX() - startPoint.getX(), 2);

double y = Math.pow(endPoint.getY() - startPoint.getY(), 2);

return Math.sqrt(x + y);

}

我找回了一个圆形对象列表(这是我创建的一个包含半径和中心点的对象),每个圆圈需要绘制一个,然后绘制它们 .

List circles = fibonacciCalculations.getFibonacciArcs(startPoint, endPoint);

if(circles != null)

{

for (Circle circle : circles){

double xCenter = circle.getX();

double yCenter = circle.getY();

double radius = circle.getRadius();

plot.addAnnotation(new XYShapeAnnotation(new Ellipse2D.Double(xCenter - radius, yCenter - radius, radius + radius, radius + radius)));

}

}

我认为这个问题与时间的x轴和价格的y轴如何不完全相关有关 . 我的意思是,如果半径是20,你将在每个点离中心20个单位 . 所以说你的股价只有5美元,在你的最低点你会在-15 . 如果是这种情况,我不知道如何解决它 . 但它也可能是我的逻辑中的一些错误 . 任何想法,将不胜感激 .

编辑:虽然酒吧看起来像第一张照片中的每周酒吧,但它们确实是每日酒吧 . 此外,我已经将坐标从数据空间转换为x y坐标 . 我使用下面的代码来做到这一点 .

@Override

public void chartMouseMoved(ChartMouseEvent event) {

Rectangle2D dataArea = cp.getScreenDataArea();

JFreeChart chart = event.getChart();

XYPlot plot = (XYPlot) chart.getPlot();

ValueAxis xAxis = plot.getDomainAxis();

ValueAxis yAxis = plot.getRangeAxis();

double x = xAxis.java2DToValue(event.getTrigger().getX(), dataArea,

RectangleEdge.BOTTOM);

double y = yAxis.java2DToValue(event.getTrigger().getY(), dataArea,

RectangleEdge.LEFT);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值