在 0 和 360 度(或弧度-PI 和 PI)的边缘
On the edge of 0 and 360 degrees (or radians -PI and PI)
我在循环排斥的处理中有一个小演示。
除了物体及其排斥器(鼠标)的那一刻外,它工作得很好
度数接近 360 | 0 区(或 PI | -PI )。
或 YouTube video
100% 是因为这个转变,但我不知道如何克服它。已经玩过模数了。
它在对象内部,Processing / JAVA,围绕 0.0,0.0 中心
float repulsorAngle = atan2(repulsor.y, repulsor.x);
if(rad < 0.0) { angle = map(rad, -PI, 0, 180, 360); }
else { angle = map(rad, 0, PI, 0, 180); }
float angleDist = abs(angle - repulsor.angle);
float dist = PVector.dist(new PVector(x, y), new PVector(repulsor.x, repulsor.y));
float inc = 45.0;
if (angleDist < inc) {
float sine = sin(map(angleDist, inc, 0, 0, PI / 2)) * 50.0;
println(sine);
x = cos(radians(angle)) * (r + sine * dir);
y = sin(radians(angle)) * (r + sine * dir);
} else {
x = cos(radians(angle)) * (r);
y = sin(radians(angle)) * (r);
}
首先希望大家不要把弧度和度数混用
你的计算
float angleDist = abs(angle - repulsor.angle);
and later comparison with
inc=45 degrees
例如,如果一个角度是 359
而另一个角度是 1
, 就会出错。
您可以构建一些 if 条件或使用表达式:
angleDist = arrcos(cos(angle - repulsor.angle));
正确处理所有情况
我在循环排斥的处理中有一个小演示。 除了物体及其排斥器(鼠标)的那一刻外,它工作得很好 度数接近 360 | 0 区(或 PI | -PI )。
或 YouTube video
100% 是因为这个转变,但我不知道如何克服它。已经玩过模数了。
它在对象内部,Processing / JAVA,围绕 0.0,0.0 中心
float repulsorAngle = atan2(repulsor.y, repulsor.x);
if(rad < 0.0) { angle = map(rad, -PI, 0, 180, 360); }
else { angle = map(rad, 0, PI, 0, 180); }
float angleDist = abs(angle - repulsor.angle);
float dist = PVector.dist(new PVector(x, y), new PVector(repulsor.x, repulsor.y));
float inc = 45.0;
if (angleDist < inc) {
float sine = sin(map(angleDist, inc, 0, 0, PI / 2)) * 50.0;
println(sine);
x = cos(radians(angle)) * (r + sine * dir);
y = sin(radians(angle)) * (r + sine * dir);
} else {
x = cos(radians(angle)) * (r);
y = sin(radians(angle)) * (r);
}
首先希望大家不要把弧度和度数混用
你的计算
float angleDist = abs(angle - repulsor.angle);
and later comparison with
inc=45 degrees
例如,如果一个角度是 359
而另一个角度是 1
,就会出错。
您可以构建一些 if 条件或使用表达式:
angleDist = arrcos(cos(angle - repulsor.angle));
正确处理所有情况