gpt4 book ai didi

Android - 计算弧角

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:13:26 25 4
gpt4 key购买 nike

我有一个圆弧,我想在 0、45、90、135、180 度处绘制刻度线,谁能帮我计算一下在这个草图上实现点 5 和点 30 的 x、y 所需的数学?:

enter image description here

这是我绘制 1 刻度标记的代码。

   private void drawScale(Canvas canvas) {
//canvas.drawOval(scaleRect, scalePaint);

canvas.save();

Paint p = new Paint();
p.setColor(Color.WHITE);
p.setStrokeWidth(10f);
canvas.drawLine(rectF.left-getWidth()/20, rectF.height()/2, rectF.left, rectF.height()/2, p);


canvas.restore();
}

最佳答案

您可以使用sincos 计算它的旋转。假设您有零点 A 并希望将其旋转到点 B 并旋转 30°。像这样:

enter image description here

基本上新点在(cx+x,cy+y)。在这种特殊情况下,sincos 的定义如下:

sin = x/R
cos = y/R

得到精确的xy 并不难。因此,要在已知半径的圆中以特定角度旋转点,我们需要用下一种方式计算坐标:

x = cx + sin(angle) * R; 
y = cy + cos(angle) * R;

现在让我们回到 Android 和 Canvas!

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);

canvas.save();
float cx = getWidth() / 2f;
float cy = getHeight() / 2f;

float scaleMarkSize = getResources().getDisplayMetrics().density * 16; // 16dp
float radius = Math.min(getWidth(), getHeight()) / 2;

for (int i = 0; i < 360; i += 45) {
float angle = (float) Math.toRadians(i); // Need to convert to radians first

float startX = (float) (cx + radius * Math.sin(angle));
float startY = (float) (cy - radius * Math.cos(angle));

float stopX = (float) (cx + (radius - scaleMarkSize) * Math.sin(angle));
float stopY = (float) (cy - (radius - scaleMarkSize) * Math.cos(angle));

canvas.drawLine(startX, startY, stopX, stopY, scalePaint);
}

canvas.restore();
}

代码将以 45° 的步长绘制标记。请注意,您需要将角度转换为弧度,对于 Y 轴,我使用了减号,因为它在 Canvas 上被翻转了。这是我得到的:

enter image description here

关于Android - 计算弧角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30014372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com