मैं ऐसे अनुप्रयोग बनाने का प्रयास कर रहा हूं जो इनके समान फिबोनाची आर्क बनाता है। ड्रा फाइबोनैकी आर्क
हालांकि, मुझे आर्क की बजाय पूर्ण सर्कल चाहिए, और मैं तस्वीर में दिखाए गए तीन फिबोनाची लाइनों से अधिक आकर्षित करना चाहता हूं। मैंने इसे पूरा करने के प्रयास में JFreeChart का उपयोग करके एक एप्लिकेशन बनाया है। हालांकि, पिछली तस्वीर में दिखाए गए एक ही आर्क (लेकिन सर्कल के रूप में) को खींचने का प्रयास करते समय परिणाम यहां दिया गया है।
प्रारंभ में, यह गलत लगता है, लेकिन जब मैं ज़ूम आउट करता हूं, तो यह वास्तव में एक सर्कल है, लेकिन यह बहुत बड़ा तरीका है।
arcs की गणना करने के लिए, आप एक रेखा खींचते हैं, फिर एक फाइबोनैकी अनुपात लें - उदाहरण के लिए .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<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 पर होंगे। यदि ऐसा है, तो मुझे नहीं पता कि इसे कैसे ठीक किया जाए। लेकिन यह मेरे तर्क में कुछ त्रुटि भी हो सकती है। किसी भी सुझाव की सराहना की जाएगी।
संपादित करें: जबकि बार दिखते हैं कि वे पहली तस्वीर में साप्ताहिक बार हो सकते हैं, वे वास्तव में दैनिक बार हैं। साथ ही, मैंने पहले ही डेटा स्पेस से एक्स वाई निर्देशांक में निर्देशांक परिवर्तित कर दिए हैं। मैं ऐसा करने के लिए नीचे इस कोड का उपयोग करता हूं।
@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);
हाँ, पैमाने छवि को फेंक रहा है इसलिए यह जानना मुश्किल है कि क्या हो रहा है। आप क्या कर सकते हैं पहली छवि के समान पैमाने पर अपने पैमाने को स्केल करें। एक्स अक्ष के लिए, स्केल की इकाई सप्ताह है। गणना करें कि सर्कल के केंद्र और रेखा के चौराहे के बीच कितनी इकाइयां हैं, और फिर गणना के अनुपात का उपयोग करके अपने पैमाने को स्केल करें। दोनों चार्टों पर इकाइयों से मेल खाना चाहिए। वाई धुरी के लिए वही करें। –
@ निकिक्सबर्ट सही है: ['XYShapeAnnotation'] (http://www.jfree.org/jfreechart/api/javadoc/org/jfree/chart/annotations/XYLineAnnotation.html) निर्देशांक" डेटा स्पेस "में हैं, के लिए [उदाहरण] (http://stackoverflow.com/a/6802375/230513)। – trashgod
मैं आपको इसे डिबग करने में मदद करना चाहता हूं लेकिन आप पर्याप्त जानकारी प्रदान नहीं करते हैं - या इसमें बहुत अधिक समय लगेगा। अनुमान: गलत अनुपात, आपकी लाइन बस लंबी है, तो आपको लगता है, मिश्रित प्रारंभ/रोक, अंतरिक्ष रूपांतरण। क्या आप एक पूर्ण कोड उदाहरण प्रदान कर सकते हैं - शायद गिथब पर? या आप कुछ वास्तविक संख्या प्रदान कर सकते हैं? –