【发布时间】:2016-01-05 13:54:51
【问题描述】:
我正在尝试使用直线将圆分成 n 个相等的部分。思路是得到圆的圆周上端点的坐标,然后画线。
要查找坐标,我使用以下代码:
static void getPoints(int x0,int y0,int r)
{
double angle = 0;
double angleToRadian = 0;
for(int i = 0 ; i < noOfDividingPoints ;i++)
{
angle = i * (360/noOfDividingPoints);
angleToRadian = ( angle * 3.141 ) / 180;
APP_LOG(APP_LOG_LEVEL_DEBUG, "LOG: Angle: %lf, AngleToRadian: %lf", angle, angleToRadian );
x[i] = (int) (x0 + r * cos_lookup(angleToRadian));
y[i] = (int) (y0 + r * sin_lookup(angleToRadian));
APP_LOG(APP_LOG_LEVEL_DEBUG, "LOG: i: %d, x[i]: %d, y[i]: %d", i, (int)x[i], (int)y[i] );
}
}
使用这个 getPoints 方法我正在填充数组 x[] 和 y[],然后遍历这些数组以在 x[i] 和 y[i] 之间画线
但是,从上面的代码计算出来的值很奇怪,下面是打印 x[] 和 y[] 内容的日志
[14:18:58] WatchFace.c:41> LOG: Angle: f, AngleToRadian: f
[14:18:57] WatchFace.c:45> LOG: i: 0, x[i]: 4587522, y[i]: 84
[14:18:57] WatchFace.c:36> LOG: Angle: 90
[14:18:57] WatchFace.c:41> LOG: Angle: f, AngleToRadian: f
[14:18:58] WatchFace.c:45> LOG: i: 1, x[i]: 4587522, y[i]: 84
[14:18:58] WatchFace.c:36> LOG: Angle: 90
[14:18:58] WatchFace.c:41> LOG: Angle: f, AngleToRadian: f
[14:18:58] WatchFace.c:45> LOG: i: 2, x[i]: 4587452, y[i]: 504
[14:18:58] WatchFace.c:36> LOG: Angle: 90
[14:18:58] WatchFace.c:41> LOG: Angle: f, AngleToRadian: f
[14:18:58] WatchFace.c:45> LOG: i: 3, x[i]: 4587452, y[i]: 924
[14:18:58] WatchFace.c:36> LOG: Angle: 90
[14:18:58] WatchFace.c:41> LOG: Angle: f, AngleToRadian: f
[14:18:58] WatchFace.c:45> LOG: i: 4, x[i]: 4587452, y[i]: 1344
[14:18:58] WatchFace.c:36> LOG: Angle: 90
[14:18:58] WatchFace.c:41> LOG: Angle: f, AngleToRadian: f
[14:18:58] WatchFace.c:45> LOG: i: 5, x[i]: 4587452, y[i]: 1344
[14:18:58] WatchFace.c:36> LOG: Angle: 90
[14:18:58] WatchFace.c:41> LOG: Angle: f, AngleToRadian: f
[14:18:58] WatchFace.c:45> LOG: i: 6, x[i]: 4587452, y[i]: 1834
[14:18:58] WatchFace.c:36> LOG: Angle: 90
[14:18:58] WatchFace.c:41> LOG: Angle: f, AngleToRadian: f
[14:18:58] WatchFace.c:45> LOG: i: 7, x[i]: 4587452, y[i]: 2254
请指出我在这里遗漏的内容。
谢谢。
【问题讨论】:
-
能否在函数开头也记录 x0、y0 和 r 的值?我想看看它们是什么。
-
@Kevin x0, y0 和 r 分别是中心和半径的坐标。他们没有改变。由于我在卵石手表上执行此操作,因此圆心是屏幕的中心 wic 计算为 (x,y) = ( bounds.size.w / 2, bounds.size.h / 2 ),半径为 70 .
-
好的,但是如果 x0 是
4587450而您期望它是1234,这将解释您奇怪的 x 值。这就是它值得研究的原因。 -
顺便问一下
noOfDividingPoints的值是多少? -
您提供的代码似乎与您提供的日志不一致。在您的日志中,您有“[14:18:58] WatchFace.c:36> LOG: Angle: 90”这一行,但我看不到代码在哪里产生了输出。还有,
noOfDividingPoints的类型是什么?
标签: c math pebble-watch pebble-sdk