322 bool calculate_max_unit_parameter,
323 bool normalize_r_gon_parameter,
325 float r_gon_roundness,
331 (void)calculate_r_gon_parameter_field;
332 (void)calculate_max_unit_parameter;
336 float segment_divider_A_angle_bisector =
M_PI_F / r_gon_sides;
337 float segment_divider_A_next_segment_divider =
float(2.0) * segment_divider_A_angle_bisector;
338 float segment_id =
floorf(x_axis_A_coord / segment_divider_A_next_segment_divider);
339 float segment_divider_A_coord = x_axis_A_coord -
340 segment_id * segment_divider_A_next_segment_divider;
341 float segment_divider_A_bevel_start = segment_divider_A_angle_bisector -
342 atanf((
float(1.0) - r_gon_roundness) *
343 tanf(segment_divider_A_angle_bisector));
345 float last_angle_bisector_A_x_axis =
M_PI_F -
346 floorf(r_gon_sides) * segment_divider_A_angle_bisector;
347 float last_segment_divider_A_x_axis =
float(2.0) * last_angle_bisector_A_x_axis;
348 float inner_last_bevel_start_A_x_axis = last_angle_bisector_A_x_axis -
349 atanf((
float(1.0) - r_gon_roundness) *
350 tanf(last_angle_bisector_A_x_axis));
351 float l_last_circle_radius = r_gon_roundness *
tanf(last_angle_bisector_A_x_axis) /
352 tanf(
float(0.5) * (segment_divider_A_angle_bisector +
353 last_angle_bisector_A_x_axis));
355 (
cosf(inner_last_bevel_start_A_x_axis) /
356 cosf(last_angle_bisector_A_x_axis - inner_last_bevel_start_A_x_axis)) -
357 l_last_circle_radius *
cosf(last_angle_bisector_A_x_axis),
358 l_last_circle_radius *
sinf(last_angle_bisector_A_x_axis) -
359 (
sinf(inner_last_bevel_start_A_x_axis) /
360 cosf(last_angle_bisector_A_x_axis - inner_last_bevel_start_A_x_axis)));
361 float2 outer_last_bevel_start = last_circle_center +
362 l_last_circle_radius *
364 sinf(segment_divider_A_angle_bisector));
365 float x_axis_A_outer_last_bevel_start =
atanf(outer_last_bevel_start.
y /
366 outer_last_bevel_start.
x);
367 float outer_last_bevel_start_A_angle_bisector = segment_divider_A_angle_bisector -
368 x_axis_A_outer_last_bevel_start;
370 if ((x_axis_A_coord >= x_axis_A_outer_last_bevel_start) &&
371 (x_axis_A_coord <
M_2PI_F - last_segment_divider_A_x_axis - x_axis_A_outer_last_bevel_start))
373 float bevel_start_A_angle_bisector = segment_divider_A_angle_bisector -
374 segment_divider_A_bevel_start;
376 if (((segment_divider_A_coord >= segment_divider_A_bevel_start) &&
377 (segment_divider_A_coord <
378 segment_divider_A_next_segment_divider - segment_divider_A_bevel_start)) ||
380 M_2PI_F - last_segment_divider_A_x_axis - segment_divider_A_bevel_start) ||
381 (x_axis_A_coord < segment_divider_A_bevel_start))
385 float l_angle_bisector =
float(0.0);
386 float r_gon_parameter =
float(0.0);
387 float max_unit_parameter =
float(0.0);
389 l_angle_bisector = l_coord *
390 cosf(segment_divider_A_angle_bisector - segment_divider_A_coord);
392 float spline_start_A_bevel_start = (
float(1.0) - r_gon_roundness) *
393 segment_divider_A_bevel_start;
395 if ((x_axis_A_coord >=
396 M_2PI_F - last_segment_divider_A_x_axis - segment_divider_A_angle_bisector) ||
397 (x_axis_A_coord < segment_divider_A_angle_bisector))
401 float effective_roundness =
float(1.0) -
tanf(segment_divider_A_angle_bisector -
402 x_axis_A_outer_last_bevel_start) /
403 tanf(segment_divider_A_angle_bisector);
404 float spline_start_outer_last_bevel_start = (
float(1.0) - effective_roundness) *
405 x_axis_A_outer_last_bevel_start;
408 r_gon_parameter = l_angle_bisector *
tanf(
fabsf(segment_divider_A_angle_bisector -
409 segment_divider_A_coord));
410 if (segment_divider_A_coord < segment_divider_A_angle_bisector) {
411 r_gon_parameter *= -
float(1.0);
413 if (normalize_r_gon_parameter) {
414 float normalize_based_on_l_angle_bisector =
415 l_angle_bisector *
tanf(outer_last_bevel_start_A_angle_bisector) +
416 spline_start_outer_last_bevel_start *
417 (
float(0.5) * l_angle_bisector +
float(0.5)) +
418 effective_roundness * x_axis_A_outer_last_bevel_start;
420 r_gon_parameter /= normalize_based_on_l_angle_bisector;
427 float spline_start_A_bevel_start = (
float(1.0) - r_gon_roundness) *
428 segment_divider_A_bevel_start;
431 r_gon_parameter = l_angle_bisector *
tanf(
fabsf(segment_divider_A_angle_bisector -
432 segment_divider_A_coord));
433 if (segment_divider_A_coord < segment_divider_A_angle_bisector) {
434 r_gon_parameter *= -
float(1.0);
436 if (normalize_r_gon_parameter) {
437 float normalize_based_on_l_angle_bisector =
438 l_angle_bisector *
tanf(bevel_start_A_angle_bisector) +
439 spline_start_A_bevel_start * (
float(0.5) * l_angle_bisector +
float(0.5)) +
440 r_gon_roundness * segment_divider_A_bevel_start;
442 r_gon_parameter /= normalize_based_on_l_angle_bisector;
448 r_gon_parameter = l_angle_bisector *
449 tanf(
fabsf(segment_divider_A_angle_bisector - segment_divider_A_coord));
450 if (segment_divider_A_coord < segment_divider_A_angle_bisector) {
451 r_gon_parameter *= -
float(1.0);
454 if (normalize_r_gon_parameter) {
455 if ((x_axis_A_coord >=
456 M_2PI_F - last_segment_divider_A_x_axis - segment_divider_A_angle_bisector) ||
457 (x_axis_A_coord < segment_divider_A_angle_bisector))
461 float effective_roundness =
float(1.0) -
tanf(segment_divider_A_angle_bisector -
462 x_axis_A_outer_last_bevel_start) /
463 tanf(segment_divider_A_angle_bisector);
464 float spline_start_outer_last_bevel_start = (
float(1.0) - effective_roundness) *
465 x_axis_A_outer_last_bevel_start;
467 float normalize_based_on_l_angle_bisector =
468 l_angle_bisector *
tanf(outer_last_bevel_start_A_angle_bisector) +
469 spline_start_outer_last_bevel_start *
470 (
float(0.5) * l_angle_bisector +
float(0.5)) +
471 effective_roundness * x_axis_A_outer_last_bevel_start;
473 r_gon_parameter /= normalize_based_on_l_angle_bisector;
478 float spline_start_A_bevel_start = (
float(1.0) - r_gon_roundness) *
479 segment_divider_A_bevel_start;
481 float normalize_based_on_l_angle_bisector =
482 l_angle_bisector *
tanf(bevel_start_A_angle_bisector) +
483 spline_start_A_bevel_start * (
float(0.5) * l_angle_bisector +
float(0.5)) +
484 r_gon_roundness * segment_divider_A_bevel_start;
486 r_gon_parameter /= normalize_based_on_l_angle_bisector;
491 max_unit_parameter =
tanf(bevel_start_A_angle_bisector) + spline_start_A_bevel_start +
492 r_gon_roundness * segment_divider_A_bevel_start;
497 segment_id * segment_divider_A_next_segment_divider +
498 segment_divider_A_angle_bisector);
505 float nearest_segment_divider_SA_coord = segment_divider_A_coord -
506 float(segment_divider_A_coord >
507 segment_divider_A_angle_bisector) *
508 segment_divider_A_next_segment_divider;
509 float l_angle_bisector =
float(0.0);
510 float r_gon_parameter =
float(0.0);
511 float max_unit_parameter =
float(0.0);
513 float l_circle_center = (
float(1.0) - r_gon_roundness) /
514 cosf(segment_divider_A_angle_bisector);
515 float l_coord_R_l_bevel_start =
cosf(nearest_segment_divider_SA_coord) * l_circle_center +
518 sqr(r_gon_roundness) -
sqr(l_circle_center));
520 l_angle_bisector = l_coord / l_coord_R_l_bevel_start;
522 float spline_start_A_bevel_start = (
float(1.0) - r_gon_roundness) *
523 segment_divider_A_bevel_start;
526 float coord_A_bevel_start = segment_divider_A_bevel_start -
527 fabsf(nearest_segment_divider_SA_coord);
528 r_gon_parameter = l_coord *
sinf(bevel_start_A_angle_bisector);
530 if (coord_A_bevel_start < spline_start_A_bevel_start) {
531 r_gon_parameter += l_coord *
cosf(bevel_start_A_angle_bisector) * coord_A_bevel_start +
533 (
float(1.0) - l_coord *
cosf(bevel_start_A_angle_bisector)) *
534 sqr(coord_A_bevel_start) / spline_start_A_bevel_start;
537 r_gon_parameter += spline_start_A_bevel_start *
538 (
float(0.5) * l_coord *
cosf(bevel_start_A_angle_bisector) -
542 if (segment_divider_A_coord < segment_divider_A_angle_bisector) {
543 r_gon_parameter *= -
float(1.0);
545 if (normalize_r_gon_parameter) {
546 float normalize_based_on_l_angle_bisector =
547 l_angle_bisector *
tanf(bevel_start_A_angle_bisector) +
548 spline_start_A_bevel_start * (
float(0.5) * l_angle_bisector +
float(0.5)) +
549 r_gon_roundness * segment_divider_A_bevel_start;
550 float normalize_based_on_l_coord =
551 l_coord *
sinf(bevel_start_A_angle_bisector) +
552 spline_start_A_bevel_start *
553 (
float(0.5) * l_coord *
cosf(bevel_start_A_angle_bisector) +
float(0.5)) +
554 r_gon_roundness * segment_divider_A_bevel_start;
558 r_gon_parameter /=
mix(normalize_based_on_l_angle_bisector,
559 normalize_based_on_l_coord,
560 coord_A_bevel_start / segment_divider_A_bevel_start);
564 max_unit_parameter =
tanf(bevel_start_A_angle_bisector) + spline_start_A_bevel_start +
565 r_gon_roundness * segment_divider_A_bevel_start;
570 segment_id * segment_divider_A_next_segment_divider +
571 segment_divider_A_angle_bisector);
575 float inner_last_bevel_start_A_last_angle_bisector = last_angle_bisector_A_x_axis -
576 inner_last_bevel_start_A_x_axis;
578 if ((x_axis_A_coord >=
579 M_2PI_F - last_segment_divider_A_x_axis + inner_last_bevel_start_A_x_axis) &&
580 (x_axis_A_coord <
M_2PI_F - inner_last_bevel_start_A_x_axis))
584 float l_angle_bisector =
float(0.0);
585 float r_gon_parameter =
float(0.0);
586 float max_unit_parameter =
float(0.0);
588 float l_angle_bisector_R_l_last_angle_bisector =
cosf(segment_divider_A_angle_bisector) /
589 cosf(last_angle_bisector_A_x_axis);
590 float l_last_angle_bisector = l_coord *
591 cosf(last_angle_bisector_A_x_axis - segment_divider_A_coord);
593 l_angle_bisector = l_angle_bisector_R_l_last_angle_bisector * l_last_angle_bisector;
595 float spline_start_A_bevel_start = (
float(1.0) - r_gon_roundness) *
596 inner_last_bevel_start_A_x_axis;
599 r_gon_parameter = l_angle_bisector_R_l_last_angle_bisector * l_last_angle_bisector *
600 tanf(
fabsf(last_angle_bisector_A_x_axis - segment_divider_A_coord));
601 if (segment_divider_A_coord < last_angle_bisector_A_x_axis) {
602 r_gon_parameter *= -
float(1.0);
604 if (normalize_r_gon_parameter) {
605 float normalize_based_on_l_l_angle_bisector =
606 l_angle_bisector_R_l_last_angle_bisector *
607 (l_last_angle_bisector *
tanf(inner_last_bevel_start_A_last_angle_bisector) +
608 spline_start_A_bevel_start * (
float(0.5) * l_last_angle_bisector +
float(0.5)) +
609 r_gon_roundness * inner_last_bevel_start_A_x_axis);
611 r_gon_parameter /= normalize_based_on_l_l_angle_bisector;
615 max_unit_parameter =
tanf(inner_last_bevel_start_A_last_angle_bisector) +
616 l_angle_bisector_R_l_last_angle_bisector *
617 (spline_start_A_bevel_start *
618 ((
float(0.5) / l_angle_bisector_R_l_last_angle_bisector) +
620 r_gon_roundness * inner_last_bevel_start_A_x_axis);
625 segment_id * segment_divider_A_next_segment_divider +
626 last_angle_bisector_A_x_axis);
633 float nearest_segment_divider_MSA_coord =
atan2f(coord.
y, coord.
x);
634 if ((x_axis_A_coord >=
635 M_2PI_F - last_segment_divider_A_x_axis - x_axis_A_outer_last_bevel_start) &&
636 (x_axis_A_coord <
M_2PI_F - last_angle_bisector_A_x_axis))
638 nearest_segment_divider_MSA_coord += last_segment_divider_A_x_axis;
639 nearest_segment_divider_MSA_coord *= -
float(1.0);
641 float l_angle_bisector =
float(0.0);
642 float r_gon_parameter =
float(0.0);
643 float max_unit_parameter =
float(0.0);
644 float x_axis_A_angle_bisector =
float(0.0);
646 float l_coord_R_l_last_angle_bisector =
647 sinf(nearest_segment_divider_MSA_coord) * last_circle_center.
y +
648 cosf(nearest_segment_divider_MSA_coord) * last_circle_center.
x +
649 sqrtf(
sqr(
sinf(nearest_segment_divider_MSA_coord) * last_circle_center.
y +
650 cosf(nearest_segment_divider_MSA_coord) * last_circle_center.
x) +
651 sqr(l_last_circle_radius) -
sqr(last_circle_center.
x) -
sqr(last_circle_center.
y));
652 float l_angle_bisector_R_l_last_angle_bisector =
cosf(segment_divider_A_angle_bisector) /
653 cosf(last_angle_bisector_A_x_axis);
654 float l_last_angle_bisector = l_coord / l_coord_R_l_last_angle_bisector;
656 l_angle_bisector = l_angle_bisector_R_l_last_angle_bisector * l_last_angle_bisector;
658 if (nearest_segment_divider_MSA_coord <
float(0.0)) {
661 float spline_start_A_bevel_start = (
float(1.0) - r_gon_roundness) *
662 inner_last_bevel_start_A_x_axis;
665 float coord_A_bevel_start = inner_last_bevel_start_A_x_axis -
666 fabsf(nearest_segment_divider_MSA_coord);
667 r_gon_parameter = l_angle_bisector_R_l_last_angle_bisector * l_coord *
668 sinf(inner_last_bevel_start_A_last_angle_bisector);
670 if (coord_A_bevel_start < spline_start_A_bevel_start) {
672 l_angle_bisector_R_l_last_angle_bisector *
673 (l_coord *
cosf(inner_last_bevel_start_A_last_angle_bisector) *
674 coord_A_bevel_start +
676 (
float(1.0) - l_coord *
cosf(inner_last_bevel_start_A_last_angle_bisector)) *
677 sqr(coord_A_bevel_start) / spline_start_A_bevel_start);
680 r_gon_parameter += l_angle_bisector_R_l_last_angle_bisector *
681 (spline_start_A_bevel_start *
682 (
float(0.5) * l_coord *
683 cosf(inner_last_bevel_start_A_last_angle_bisector) -
685 coord_A_bevel_start);
687 if (segment_divider_A_coord < last_angle_bisector_A_x_axis) {
688 r_gon_parameter *= -
float(1.0);
690 if (normalize_r_gon_parameter) {
691 float normalize_based_on_l_l_angle_bisector =
692 l_last_angle_bisector *
tanf(inner_last_bevel_start_A_last_angle_bisector) +
693 spline_start_A_bevel_start * (
float(0.5) * l_last_angle_bisector +
float(0.5)) +
694 r_gon_roundness * inner_last_bevel_start_A_x_axis;
695 float normalize_based_on_l_coord =
696 l_coord *
sinf(inner_last_bevel_start_A_last_angle_bisector) +
697 spline_start_A_bevel_start *
698 (
float(0.5) * l_coord *
cosf(inner_last_bevel_start_A_last_angle_bisector) +
700 r_gon_roundness * inner_last_bevel_start_A_x_axis;
704 r_gon_parameter /= l_angle_bisector_R_l_last_angle_bisector *
705 mix(normalize_based_on_l_l_angle_bisector,
706 normalize_based_on_l_coord,
707 coord_A_bevel_start / inner_last_bevel_start_A_x_axis);
711 max_unit_parameter =
tanf(inner_last_bevel_start_A_last_angle_bisector) +
712 l_angle_bisector_R_l_last_angle_bisector *
713 (spline_start_A_bevel_start *
714 ((
float(0.5) / l_angle_bisector_R_l_last_angle_bisector) +
716 r_gon_roundness * inner_last_bevel_start_A_x_axis);
718 x_axis_A_angle_bisector = segment_id * segment_divider_A_next_segment_divider +
719 last_angle_bisector_A_x_axis;
724 float effective_roundness =
float(1.0) -
tanf(segment_divider_A_angle_bisector -
725 x_axis_A_outer_last_bevel_start) /
726 tanf(segment_divider_A_angle_bisector);
727 float spline_start_outer_last_bevel_start = (
float(1.0) - effective_roundness) *
728 x_axis_A_outer_last_bevel_start;
731 float coord_A_bevel_start = x_axis_A_outer_last_bevel_start -
732 fabsf(nearest_segment_divider_MSA_coord);
733 r_gon_parameter = l_coord *
sinf(outer_last_bevel_start_A_angle_bisector);
735 if (coord_A_bevel_start < spline_start_outer_last_bevel_start) {
736 r_gon_parameter += l_coord *
cosf(outer_last_bevel_start_A_angle_bisector) *
737 coord_A_bevel_start +
740 l_coord *
cosf(outer_last_bevel_start_A_angle_bisector)) *
741 sqr(coord_A_bevel_start) / spline_start_outer_last_bevel_start;
744 r_gon_parameter += spline_start_outer_last_bevel_start *
745 (
float(0.5) * l_coord *
746 cosf(outer_last_bevel_start_A_angle_bisector) -
750 if (segment_divider_A_coord < segment_divider_A_angle_bisector) {
751 r_gon_parameter *= -
float(1.0);
753 if (normalize_r_gon_parameter) {
754 float normalize_based_on_l_angle_bisector =
755 l_angle_bisector *
tanf(outer_last_bevel_start_A_angle_bisector) +
756 spline_start_outer_last_bevel_start *
757 (
float(0.5) * l_angle_bisector +
float(0.5)) +
758 effective_roundness * x_axis_A_outer_last_bevel_start;
759 float normalize_based_on_l_coord =
760 l_coord *
sinf(outer_last_bevel_start_A_angle_bisector) +
761 spline_start_outer_last_bevel_start *
762 (
float(0.5) * l_coord *
cosf(outer_last_bevel_start_A_angle_bisector) +
764 effective_roundness * x_axis_A_outer_last_bevel_start;
768 r_gon_parameter /=
mix(normalize_based_on_l_angle_bisector,
769 normalize_based_on_l_coord,
770 coord_A_bevel_start / x_axis_A_outer_last_bevel_start);
774 float bevel_start_A_angle_bisector = segment_divider_A_angle_bisector -
775 segment_divider_A_bevel_start;
776 float spline_start_A_bevel_start = (
float(1.0) - r_gon_roundness) *
777 segment_divider_A_bevel_start;
779 max_unit_parameter =
tanf(bevel_start_A_angle_bisector) + spline_start_A_bevel_start +
780 r_gon_roundness * segment_divider_A_bevel_start;
782 x_axis_A_angle_bisector = segment_id * segment_divider_A_next_segment_divider +
783 segment_divider_A_angle_bisector;
786 l_angle_bisector, r_gon_parameter, max_unit_parameter, x_axis_A_angle_bisector);
792 bool calculate_max_unit_parameter,
793 bool normalize_r_gon_parameter,
795 float r_gon_roundness,
800 (void)calculate_r_gon_parameter_field;
801 (void)calculate_max_unit_parameter;
807 if (
fractf(r_gon_sides) ==
float(0.0)) {
809 float segment_divider_A_angle_bisector =
M_PI_F / r_gon_sides;
810 float segment_divider_A_next_segment_divider =
float(2.0) * segment_divider_A_angle_bisector;
811 float segment_id =
floorf(x_axis_A_coord / segment_divider_A_next_segment_divider);
812 float segment_divider_A_coord = x_axis_A_coord -
813 segment_id * segment_divider_A_next_segment_divider;
815 if (r_gon_roundness ==
float(0.0)) {
818 float l_angle_bisector =
float(0.0);
819 float r_gon_parameter =
float(0.0);
820 float max_unit_parameter =
float(0.0);
822 l_angle_bisector = l_coord *
823 cosf(segment_divider_A_angle_bisector - segment_divider_A_coord);
826 r_gon_parameter = l_angle_bisector *
827 tanf(
fabsf(segment_divider_A_angle_bisector - segment_divider_A_coord));
828 if (segment_divider_A_coord < segment_divider_A_angle_bisector) {
829 r_gon_parameter *= -
float(1.0);
831 if (normalize_r_gon_parameter && (r_gon_sides !=
float(2.0))) {
832 r_gon_parameter /= l_angle_bisector *
tanf(segment_divider_A_angle_bisector);
836 max_unit_parameter = (r_gon_sides !=
float(2.0)) ?
tanf(segment_divider_A_angle_bisector) :
842 segment_id * segment_divider_A_next_segment_divider +
843 segment_divider_A_angle_bisector);
845 else if (r_gon_roundness ==
float(1.0)) {
848 float r_gon_parameter =
float(0.0);
850 r_gon_parameter =
fabsf(segment_divider_A_angle_bisector - segment_divider_A_coord);
851 if (segment_divider_A_coord < segment_divider_A_angle_bisector) {
852 r_gon_parameter *= -
float(1.0);
854 if (normalize_r_gon_parameter) {
855 r_gon_parameter /= segment_divider_A_angle_bisector;
860 segment_divider_A_angle_bisector,
861 segment_id * segment_divider_A_next_segment_divider +
862 segment_divider_A_angle_bisector);
865 float segment_divider_A_bevel_start = segment_divider_A_angle_bisector -
866 atanf((
float(1.0) - r_gon_roundness) *
867 tanf(segment_divider_A_angle_bisector));
868 float bevel_start_A_angle_bisector = segment_divider_A_angle_bisector -
869 segment_divider_A_bevel_start;
871 if ((segment_divider_A_coord >=
872 segment_divider_A_next_segment_divider - segment_divider_A_bevel_start) ||
873 (segment_divider_A_coord < segment_divider_A_bevel_start))
879 float nearest_segment_divider_SA_coord = segment_divider_A_coord -
880 float(segment_divider_A_coord >
881 segment_divider_A_angle_bisector) *
882 segment_divider_A_next_segment_divider;
883 float l_angle_bisector =
float(0.0);
884 float r_gon_parameter =
float(0.0);
885 float max_unit_parameter =
float(0.0);
887 float l_circle_center = (
float(1.0) - r_gon_roundness) /
888 cosf(segment_divider_A_angle_bisector);
889 float l_coord_R_l_bevel_start =
cosf(nearest_segment_divider_SA_coord) * l_circle_center +
892 sqr(r_gon_roundness) -
sqr(l_circle_center));
894 l_angle_bisector = l_coord / l_coord_R_l_bevel_start;
896 float spline_start_A_bevel_start = (
float(1.0) - r_gon_roundness) *
897 segment_divider_A_bevel_start;
900 float coord_A_bevel_start = segment_divider_A_bevel_start -
901 fabsf(nearest_segment_divider_SA_coord);
902 r_gon_parameter = l_coord *
sinf(bevel_start_A_angle_bisector);
904 if (coord_A_bevel_start < spline_start_A_bevel_start) {
905 r_gon_parameter += l_coord *
cosf(bevel_start_A_angle_bisector) * coord_A_bevel_start +
907 (
float(1.0) - l_coord *
cosf(bevel_start_A_angle_bisector)) *
908 sqr(coord_A_bevel_start) / spline_start_A_bevel_start;
911 r_gon_parameter += spline_start_A_bevel_start *
912 (
float(0.5) * l_coord *
cosf(bevel_start_A_angle_bisector) -
916 if (segment_divider_A_coord < segment_divider_A_angle_bisector) {
917 r_gon_parameter *= -
float(1.0);
919 if (normalize_r_gon_parameter) {
920 float normalize_based_on_l_angle_bisector =
921 l_angle_bisector *
tanf(bevel_start_A_angle_bisector) +
922 spline_start_A_bevel_start * (
float(0.5) * l_angle_bisector +
float(0.5)) +
923 r_gon_roundness * segment_divider_A_bevel_start;
924 float normalize_based_on_l_coord =
925 l_coord *
sinf(bevel_start_A_angle_bisector) +
926 spline_start_A_bevel_start *
927 (
float(0.5) * l_coord *
cosf(bevel_start_A_angle_bisector) +
float(0.5)) +
928 r_gon_roundness * segment_divider_A_bevel_start;
932 r_gon_parameter /=
mix(normalize_based_on_l_angle_bisector,
933 normalize_based_on_l_coord,
934 coord_A_bevel_start / segment_divider_A_bevel_start);
938 max_unit_parameter =
tanf(bevel_start_A_angle_bisector) + spline_start_A_bevel_start +
939 r_gon_roundness * segment_divider_A_bevel_start;
944 segment_id * segment_divider_A_next_segment_divider +
945 segment_divider_A_angle_bisector);
950 float l_angle_bisector =
float(0.0);
951 float r_gon_parameter =
float(0.0);
952 float max_unit_parameter =
float(0.0);
954 l_angle_bisector = l_coord *
955 cosf(segment_divider_A_angle_bisector - segment_divider_A_coord);
957 float spline_start_A_bevel_start = (
float(1.0) - r_gon_roundness) *
958 segment_divider_A_bevel_start;
961 r_gon_parameter = l_angle_bisector *
tanf(
fabsf(segment_divider_A_angle_bisector -
962 segment_divider_A_coord));
963 if (segment_divider_A_coord < segment_divider_A_angle_bisector) {
964 r_gon_parameter *= -
float(1.0);
966 if (normalize_r_gon_parameter) {
967 float normalize_based_on_l_angle_bisector =
968 l_angle_bisector *
tanf(bevel_start_A_angle_bisector) +
969 spline_start_A_bevel_start * (
float(0.5) * l_angle_bisector +
float(0.5)) +
970 r_gon_roundness * segment_divider_A_bevel_start;
972 r_gon_parameter /= normalize_based_on_l_angle_bisector;
976 max_unit_parameter =
tanf(bevel_start_A_angle_bisector) + spline_start_A_bevel_start +
977 r_gon_roundness * segment_divider_A_bevel_start;
982 segment_id * segment_divider_A_next_segment_divider +
983 segment_divider_A_angle_bisector);
988 if (r_gon_roundness ==
float(0.0)) {
990 float segment_divider_A_angle_bisector =
M_PI_F / r_gon_sides;
991 float segment_divider_A_next_segment_divider =
float(2.0) * segment_divider_A_angle_bisector;
992 float segment_id =
floorf(x_axis_A_coord / segment_divider_A_next_segment_divider);
993 float segment_divider_A_coord = x_axis_A_coord -
994 segment_id * segment_divider_A_next_segment_divider;
996 float last_angle_bisector_A_x_axis =
M_PI_F -
997 floorf(r_gon_sides) * segment_divider_A_angle_bisector;
998 float last_segment_divider_A_x_axis =
float(2.0) * last_angle_bisector_A_x_axis;
1000 if (x_axis_A_coord <
M_2PI_F - last_segment_divider_A_x_axis) {
1003 float l_angle_bisector =
float(0.0);
1004 float r_gon_parameter =
float(0.0);
1005 float max_unit_parameter =
float(0.0);
1007 l_angle_bisector = l_coord *
1008 cosf(segment_divider_A_angle_bisector - segment_divider_A_coord);
1010 r_gon_parameter = l_angle_bisector *
tanf(
fabsf(segment_divider_A_angle_bisector -
1011 segment_divider_A_coord));
1012 if (segment_divider_A_coord < segment_divider_A_angle_bisector) {
1013 r_gon_parameter *= -
float(1.0);
1015 if (normalize_r_gon_parameter) {
1016 r_gon_parameter /= l_angle_bisector *
tanf(segment_divider_A_angle_bisector);
1020 max_unit_parameter =
tanf(segment_divider_A_angle_bisector);
1025 segment_id * segment_divider_A_next_segment_divider +
1026 segment_divider_A_angle_bisector);
1031 float l_angle_bisector =
float(0.0);
1032 float r_gon_parameter =
float(0.0);
1033 float max_unit_parameter =
float(0.0);
1035 float l_angle_bisector_R_l_last_angle_bisector =
cosf(segment_divider_A_angle_bisector) /
1036 cosf(last_angle_bisector_A_x_axis);
1037 float l_last_angle_bisector = l_coord *
1038 cosf(last_angle_bisector_A_x_axis - segment_divider_A_coord);
1040 l_angle_bisector = l_angle_bisector_R_l_last_angle_bisector * l_last_angle_bisector;
1043 r_gon_parameter = l_angle_bisector_R_l_last_angle_bisector * l_last_angle_bisector *
1044 tanf(
fabsf(last_angle_bisector_A_x_axis - segment_divider_A_coord));
1045 if (segment_divider_A_coord < last_angle_bisector_A_x_axis) {
1046 r_gon_parameter *= -
float(1.0);
1048 if (normalize_r_gon_parameter) {
1049 r_gon_parameter /= l_angle_bisector_R_l_last_angle_bisector * l_last_angle_bisector *
1050 tanf(last_angle_bisector_A_x_axis);
1054 max_unit_parameter =
tanf(last_angle_bisector_A_x_axis);
1059 segment_id * segment_divider_A_next_segment_divider +
1060 last_angle_bisector_A_x_axis);
1063#ifdef ADAPT_TO_GEOMETRY_NODES
1064 else if (r_gon_roundness ==
float(1.0)) {
1065 out_variables = calculate_out_variables_full_roundness_irregular_circular(
1066 calculate_r_gon_parameter_field, normalize_r_gon_parameter, r_gon_sides, coord, l_coord);
1071 calculate_max_unit_parameter,
1072 normalize_r_gon_parameter,
1080 if ((coord.
x ==
float(0.0)) && (coord.
y ==
float(0.0))) {
1083 out_variables.
y =
float(0.0);
1086 if (normalize_r_gon_parameter) {
1088 out_variables.
y =
float(0.5) * out_variables.
y +
float(0.5);
1091 out_variables.
x -=
float(1.0);
1094 return out_variables;