java - 从每条路径与初始点相距一定距离的点绘制路径
问题描述
我在试图弄清楚如何从画布上的一个点绘制路径时遇到了一些麻烦,每条路径的起点与初始点的距离相等。为了说明我的意思,我到目前为止的代码能够生成:
期望的结果是这样的:
我的代码:
int n = 3;
int r;
double x;
double y;
point1 = new Point(mWidth/2, mHeight/2);
double angle;
double angleFactor;
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
for (int i = 0; i < 3; i++){
angleFactor = 2 * Math.PI / n;
angle = i * angleFactor;
x = (point1.x) + r * Math.cos(angle);
y = (point1.y) + r * Math.sin(angle);
//Draw paths
path.reset();
path.moveTo(point1.x, point1.y);
path.lineTo((float) x, (float) y);
canvas.drawPath(path, paint);
}
}
有一个简单的解决方案吗?
解决方案
由于您希望线的偏移量和中心点之间的距离很小,您可以像这样定义起始坐标:
double xStart, xEnd;
double yStart, yEnd;
double offsetFraction = 0.1;
在for
循环内onDraw()
:
double lengthX = r * Math.cos(angle);
double lengthY = r * Math.sin(angle);
xStart = (point1.x) + offsetFraction * lengthX;
yStart = (point1.y) + offsetFraction * lengthY;
xEnd = (point1.x) + lengthX;
yEnd = (point1.y) + lengthY;
//Draw paths
path.reset();
path.moveTo((float) xStart, (float) yStart);
path.lineTo((float) xEnd, (float) yEnd);
canvas.drawPath(path, paint);
推荐阅读
- unity3d - 如何在编辑器窗口中创建自定义节点,就像在动画窗口中一样?
- c# - 使用 Azure ActiveDir oAuth2.0 JWT 令牌 Microsoft Graph 的 Asp-Net-Core WebApi 身份验证
- c++ - 如何阻止 SWIG 抛出类型宏的语法错误(c++ 到 python)
- javascript - 固定正文位置后停止页面转到顶部
- windows - Ansible:将 Azure blob 下载到 Windows VM 的最优雅方式?
- javascript - 如何使用 puppeteer 截取多个网站的完整截图?
- java - 在 SWT 中刷新一个标签的控件
- mysql - 将 CSV 加载到 CloudSQL
- c++ - 使用函数参数返回类型解决模板重载
- javascript - 几个小时后,Expo 上的 Firebase 身份验证到期