Trochoids: Mend freeze bug
I had updated the guide circle drawing routine to draw points every 360 / radius steps (so smaller circles had fewer XOR'd points), but obviously this will cause a divide by zero if either circle's radius = 360, since I'm using an integer, it will cause a frozen for()-loop if radius > 360. h/t Pere for pointing out the freeze!
This commit is contained in:
parent
b8f6ec2bbf
commit
4496e007a1
1 changed files with 15 additions and 3 deletions
|
|
@ -382,7 +382,6 @@ void trochoids_work(magic_api * api, int which,
|
||||||
|
|
||||||
/* Erase old before drawing new */
|
/* Erase old before drawing new */
|
||||||
|
|
||||||
/* FIXME */
|
|
||||||
update_rect->x = 0;
|
update_rect->x = 0;
|
||||||
update_rect->y = 0;
|
update_rect->y = 0;
|
||||||
update_rect->w = canvas->w;
|
update_rect->w = canvas->w;
|
||||||
|
|
@ -393,6 +392,7 @@ void trochoids_work(magic_api * api, int which,
|
||||||
|
|
||||||
/* Draw the lines */
|
/* Draw the lines */
|
||||||
LCM = calc_lcm(r, R);
|
LCM = calc_lcm(r, R);
|
||||||
|
|
||||||
for (a = 0; a < 360.0 * (float) (LCM / R); a++) {
|
for (a = 0; a < 360.0 * (float) (LCM / R); a++) {
|
||||||
float a2 = (a + 1);
|
float a2 = (a + 1);
|
||||||
|
|
||||||
|
|
@ -417,12 +417,19 @@ void trochoids_work(magic_api * api, int which,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (guides) {
|
if (guides) {
|
||||||
|
int guide_spacing;
|
||||||
|
|
||||||
/* When still dragging (before release), draw some "guides",
|
/* When still dragging (before release), draw some "guides",
|
||||||
showing the mechanism that would be used to generate the pattern */
|
showing the mechanism that would be used to generate the pattern */
|
||||||
rotator_anim_a = (int) (atan2(y - trochoids_y, x - trochoids_x) / M_PI * 180.0);
|
rotator_anim_a = (int) (atan2(y - trochoids_y, x - trochoids_x) / M_PI * 180.0);
|
||||||
|
|
||||||
/* Stator (fixed circle) */
|
/* Stator (fixed circle) */
|
||||||
for (a = 0; a < 360; a = a + 360 / R) {
|
guide_spacing = 360 / R;
|
||||||
|
if (guide_spacing < 2) {
|
||||||
|
guide_spacing = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (a = 0; a < 360; a = a + guide_spacing) {
|
||||||
px = (int) ((float) trochoids_x + ((float) R * deg_cos(a)));
|
px = (int) ((float) trochoids_x + ((float) R * deg_cos(a)));
|
||||||
py = (int) ((float) trochoids_y - ((float) R * deg_sin(a)));
|
py = (int) ((float) trochoids_y - ((float) R * deg_sin(a)));
|
||||||
api->putpixel(canvas, px, py, 0);
|
api->putpixel(canvas, px, py, 0);
|
||||||
|
|
@ -432,7 +439,12 @@ void trochoids_work(magic_api * api, int which,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Rotator (rolling circle) */
|
/* Rotator (rolling circle) */
|
||||||
for (a = 0; a < 360; a = a + 360 / r) {
|
guide_spacing = 360 / r;
|
||||||
|
if (guide_spacing < 2) {
|
||||||
|
guide_spacing = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (a = 0; a < 360; a = a + guide_spacing) {
|
||||||
if (which == TOOL_HYPOTROCHOID_SIZES ||
|
if (which == TOOL_HYPOTROCHOID_SIZES ||
|
||||||
which == TOOL_HYPOTROCHOID_NOSIZES_1 ||
|
which == TOOL_HYPOTROCHOID_NOSIZES_1 ||
|
||||||
which == TOOL_HYPOTROCHOID_NOSIZES_2 ||
|
which == TOOL_HYPOTROCHOID_NOSIZES_2 ||
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue