[英]JavaFX: How to find the x,y of a specific point along a Circle given only the radius and the center x,y position?
[英]Androidplot draw circle with given point and radius
我正在使用附有PanZoom的androidplot:
PanZoom.attach(plot);
因此,我可以根据需要进行放大和缩小。
我接下来要在给定的点画一个圆。 现在,我使用strokewidth设置圆的尺寸。 但是,当我放大和缩小时,圆的大小保持不变,尽管它应根据缩放级别进行缩放。 因此,想象一下我无限放大,圆圈应该以一定的缩放级别覆盖整个屏幕。
但事实并非如此。 我该如何实现? 我当时在想根据缩放级别增加圆的笔触宽度,但是我既无法获得缩放级别,也无法获得绘图左侧和右侧的域级别。
编辑:在xml文件夹中,我创建一个文件,例如circle.xml:
<?xml version="1.0" encoding="utf-8"?>
<config
fillPaint.color="#00000000"
linePaint.color="#00000000"
linePaint.strokeWidth="0dp"
pointLabelFormatter.textPaint.color="#FFFFFF"
vertexPaint.color="#371cd1d4"
vertexPaint.strokeWidth="20dp"/>
和在Java中
sigmaLabelFormatter = new LineAndPointFormatter();
sigmaLabelFormatter.setPointLabelFormatter(new PointLabelFormatter());
sigmaLabelFormatter.configure(activity.getApplicationContext(), R.xml.circle);
sigmaLabelFormatter.setPointLabelFormatter(null);
缩放仅影响XYSeries数据的绘制; 如果直接在画布上绘制,则无论平移/缩放如何,都将精确地将其绘制在画布上指定的位置。
不过,您可以做的一件事就是制作系列来代表您的圆并在那里绘制圆。 这将使圆圈响应平移和缩放动作。 棘手的部分将是拾取足够的点,以确保圆在您支持的最高缩放级别下显得平滑。
我终于找到了解决方案,因为我终于做到了:
在图的左侧和右侧获取域级别。
或者更精确地获得图的宽度。
由于地块的尺寸以米为单位,因此我进行如下计算:
private float calculateDP(float px){
return px / (densityDpi / densityDefault);
}
private float pixelsPerMeter(float value){
float w = plot.getGraph().getWidgetDimensions().canvasRect.width();
float w2 = plot.getBounds().getWidth().floatValue();
return value * (w / w2);
}
private void init(Activity activity){
densityDpi = activity.getResources().getDisplayMetrics().densityDpi;
densityDefault = android.util.DisplayMetrics.DENSITY_DEFAULT;
}
private void onCreate(){
// ... lots of stuff
labelFormatter.getVertexPaint().setStrokeWidth(calculateDP(pixelsPerMeter(2)));
}
可能会帮助某人...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.