我正在嘗試創建一個繪製類似於這些的斐波納契弧的應用程序。 Draw Fibonacci Arcs
但是,我想要完整的圓圈而不是圓弧,並且我想繪製超過圖片中顯示的三條斐波那契線。我已經使用JFreeChart創建了一個應用程序來嘗試完成此操作。但是,這是試圖繪製上一張圖片中顯示的相同弧(但圓圈)時的結果。
最初,它看起來錯了,但是當我縮小時,它確實是一個圓圈,但它太大了。
要計算弧線,可以繪製一條線,然後取一個斐波那契數 - 例如,使用.381 - 該線的百分比。如果你看第一張圖片,你會看到最裏面的圓弧與直線距離圓心的距離的0.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<Circle> 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。如果是這樣,我不知道如何解決它。但在我的邏輯中也可能有一些錯誤。任何想法,將不勝感激。
編輯:雖然酒吧看起來像他們可能是第一張圖片每週酒吧,他們確實是每天酒吧。另外,我已經將座標從數據空間轉換爲xy座標。我使用下面的代碼來做到這一點。
@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);
是的,規模是拋出的形象,所以很難知道發生了什麼事情。你可以做的是將自己的比例縮放到與第一張圖像相同的比例。對於x軸,比例單位是幾周。在Count中,在圓心和交點之間有多少個單位,然後使用計算出的比例來調整您的比例。兩個圖表上的單位應該匹配。對y軸做同樣的事情。 –
@NickZiebert是正確的:['XYShapeAnnotation'](http://www.jfree.org/jfreechart/api/javadoc/org/jfree/chart/annotations/XYLineAnnotation.html)座標位於「數據空間」中[示例](http://stackoverflow.com/a/6802375/230513)。 – trashgod
我想幫助您調試,但您不提供足夠的信息 - 否則它只會花費太多時間。猜測:不正確的比例,你的線只是更長的時間,然後你認爲,混合開始/停止,空間轉換。你能提供一個完整的代碼示例 - 也許在github上?或者你能提供一些真實的數字嗎? –