java 画笔对象xy方向_java – JFreeChart PolarPlot:数学方向

另外,对于navigational和geodetic应用程序,org.jfree.chart.plot.PolarPlot似乎是designed.

使用变换θ’=π/ 4-θ并重写refreshAngleTicks(),如@mort的suggested,产生合理的结果.

vzQ3W.png

import java.awt.Color;

import java.awt.Dimension;

import java.util.ArrayList;

import java.util.List;

import javax.swing.JFrame;

import org.jfree.chart.ChartPanel;

import org.jfree.chart.JFreeChart;

import org.jfree.chart.axis.NumberAxis;

import org.jfree.chart.axis.NumberTick;

import org.jfree.chart.axis.ValueAxis;

import org.jfree.chart.plot.PolarPlot;

import org.jfree.chart.renderer.DefaultPolarItemRenderer;

import org.jfree.chart.renderer.PolarItemRenderer;

import org.jfree.data.xy.XYDataset;

import org.jfree.data.xy.XYSeries;

import org.jfree.data.xy.XYSeriesCollection;

import org.jfree.ui.TextAnchor;

/**

* @see http://en.wikipedia.org/wiki/Polar_coordinate_system

* @see https://stackoverflow.com/questions/3458824

*/

public class ArchimedesSpiral extends JFrame {

private static final String title = "Archimedes' Spiral";

public ArchimedesSpiral(String title) {

super(title);

JFreeChart chart = createChart(createDataset());

ChartPanel panel = new ChartPanel(chart);

panel.setPreferredSize(new Dimension(500, 500));

panel.setMouseZoomable(false);

this.add(panel);

}

private static XYDataset createDataset() {

XYSeriesCollection result = new XYSeriesCollection();

XYSeries series = new XYSeries(title);

for (int t = 0; t <= 3 * 360; t++) {

series.add(90 - t, t);

}

result.addSeries(series);

return result;

}

private static JFreeChart createChart(XYDataset dataset) {

ValueAxis radiusAxis = new NumberAxis();

radiusAxis.setTickLabelsVisible(false);

PolarItemRenderer renderer = new DefaultPolarItemRenderer();

PolarPlot plot = new PolarPlot(dataset, radiusAxis, renderer) {

@Override

protected List refreshAngleTicks() {

List ticks = new ArrayList();

int delta = (int) this.getAngleTickUnit().getSize();

for (int t = 0; t < 360; t += delta) {

int tp = (360 + 90 - t) % 360;

NumberTick tick = new NumberTick(

Double.valueOf(t), String.valueOf(tp),

TextAnchor.CENTER, TextAnchor.CENTER, 0.0);

ticks.add(tick);

}

return ticks;

}

};

plot.setBackgroundPaint(new Color(0x00f0f0f0));

plot.setRadiusGridlinePaint(Color.gray);

plot.addCornerTextItem("r(θ) = θ; 0 < θ < 6π");

JFreeChart chart = new JFreeChart(

title, JFreeChart.DEFAULT_TITLE_FONT, plot, true);

chart.setBackgroundPaint(Color.white);

return chart;

}

public static void main(String[] args) {

ArchimedesSpiral demo = new ArchimedesSpiral(title);

demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

demo.pack();

demo.setLocationRelativeTo(null);

demo.setVisible(true);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值