321 bool calculate_max_unit_parameter,
322 bool normalize_r_gon_parameter,
324 float r_gon_roundness,
330 (void)calculate_r_gon_parameter_field;
331 (void)calculate_max_unit_parameter;
335 float segment_divider_A_angle_bisector =
M_PI_F / r_gon_sides;
336 float segment_divider_A_next_segment_divider =
float(2.0) * segment_divider_A_angle_bisector;
337 float segment_id =
floorf(x_axis_A_coord / segment_divider_A_next_segment_divider);
338 float segment_divider_A_coord = x_axis_A_coord -
339 segment_id * segment_divider_A_next_segment_divider;
340 float segment_divider_A_bevel_start = segment_divider_A_angle_bisector -
341 atanf((
float(1.0) - r_gon_roundness) *
342 tanf(segment_divider_A_angle_bisector));
344 float last_angle_bisector_A_x_axis =
M_PI_F -
345 floorf(r_gon_sides) * segment_divider_A_angle_bisector;
346 float last_segment_divider_A_x_axis =
float(2.0) * last_angle_bisector_A_x_axis;
347 float inner_last_bevel_start_A_x_axis = last_angle_bisector_A_x_axis -
348 atanf((
float(1.0) - r_gon_roundness) *
349 tanf(last_angle_bisector_A_x_axis));
350 float l_last_circle_radius = r_gon_roundness *
tanf(last_angle_bisector_A_x_axis) /
351 tanf(
float(0.5) * (segment_divider_A_angle_bisector +
352 last_angle_bisector_A_x_axis));
354 (
cosf(inner_last_bevel_start_A_x_axis) /
355 cosf(last_angle_bisector_A_x_axis - inner_last_bevel_start_A_x_axis)) -
356 l_last_circle_radius *
cosf(last_angle_bisector_A_x_axis),
357 l_last_circle_radius *
sinf(last_angle_bisector_A_x_axis) -
358 (
sinf(inner_last_bevel_start_A_x_axis) /
359 cosf(last_angle_bisector_A_x_axis - inner_last_bevel_start_A_x_axis)));
360 float2 outer_last_bevel_start = last_circle_center +
361 l_last_circle_radius *
363 sinf(segment_divider_A_angle_bisector));
364 float x_axis_A_outer_last_bevel_start =
atanf(outer_last_bevel_start.
y /
365 outer_last_bevel_start.
x);
366 float outer_last_bevel_start_A_angle_bisector = segment_divider_A_angle_bisector -
367 x_axis_A_outer_last_bevel_start;
369 if ((x_axis_A_coord >= x_axis_A_outer_last_bevel_start) &&
370 (x_axis_A_coord <
M_2PI_F - last_segment_divider_A_x_axis - x_axis_A_outer_last_bevel_start))
372 float bevel_start_A_angle_bisector = segment_divider_A_angle_bisector -
373 segment_divider_A_bevel_start;
375 if (((segment_divider_A_coord >= segment_divider_A_bevel_start) &&
376 (segment_divider_A_coord <
377 segment_divider_A_next_segment_divider - segment_divider_A_bevel_start)) ||
379 M_2PI_F - last_segment_divider_A_x_axis - segment_divider_A_bevel_start) ||
380 (x_axis_A_coord < segment_divider_A_bevel_start))
384 float l_angle_bisector =
float(0.0);
385 float r_gon_parameter =
float(0.0);
386 float max_unit_parameter =
float(0.0);
388 l_angle_bisector = l_coord *
389 cosf(segment_divider_A_angle_bisector - segment_divider_A_coord);
391 float spline_start_A_bevel_start = (
float(1.0) - r_gon_roundness) *
392 segment_divider_A_bevel_start;
394 if ((x_axis_A_coord >=
395 M_2PI_F - last_segment_divider_A_x_axis - segment_divider_A_angle_bisector) ||
396 (x_axis_A_coord < segment_divider_A_angle_bisector))
400 float effective_roundness =
float(1.0) -
tanf(segment_divider_A_angle_bisector -
401 x_axis_A_outer_last_bevel_start) /
402 tanf(segment_divider_A_angle_bisector);
403 float spline_start_outer_last_bevel_start = (
float(1.0) - effective_roundness) *
404 x_axis_A_outer_last_bevel_start;
407 r_gon_parameter = l_angle_bisector *
tanf(
fabsf(segment_divider_A_angle_bisector -
408 segment_divider_A_coord));
409 if (segment_divider_A_coord < segment_divider_A_angle_bisector) {
410 r_gon_parameter *= -
float(1.0);
412 if (normalize_r_gon_parameter) {
413 float normalize_based_on_l_angle_bisector =
414 l_angle_bisector *
tanf(outer_last_bevel_start_A_angle_bisector) +
415 spline_start_outer_last_bevel_start *
416 (
float(0.5) * l_angle_bisector +
float(0.5)) +
417 effective_roundness * x_axis_A_outer_last_bevel_start;
419 r_gon_parameter /= normalize_based_on_l_angle_bisector;
426 float spline_start_A_bevel_start = (
float(1.0) - r_gon_roundness) *
427 segment_divider_A_bevel_start;
430 r_gon_parameter = l_angle_bisector *
tanf(
fabsf(segment_divider_A_angle_bisector -
431 segment_divider_A_coord));
432 if (segment_divider_A_coord < segment_divider_A_angle_bisector) {
433 r_gon_parameter *= -
float(1.0);
435 if (normalize_r_gon_parameter) {
436 float normalize_based_on_l_angle_bisector =
437 l_angle_bisector *
tanf(bevel_start_A_angle_bisector) +
438 spline_start_A_bevel_start * (
float(0.5) * l_angle_bisector +
float(0.5)) +
439 r_gon_roundness * segment_divider_A_bevel_start;
441 r_gon_parameter /= normalize_based_on_l_angle_bisector;
447 r_gon_parameter = l_angle_bisector *
448 tanf(
fabsf(segment_divider_A_angle_bisector - segment_divider_A_coord));
449 if (segment_divider_A_coord < segment_divider_A_angle_bisector) {
450 r_gon_parameter *= -
float(1.0);
453 if (normalize_r_gon_parameter) {
454 if ((x_axis_A_coord >=
455 M_2PI_F - last_segment_divider_A_x_axis - segment_divider_A_angle_bisector) ||
456 (x_axis_A_coord < segment_divider_A_angle_bisector))
460 float effective_roundness =
float(1.0) -
tanf(segment_divider_A_angle_bisector -
461 x_axis_A_outer_last_bevel_start) /
462 tanf(segment_divider_A_angle_bisector);
463 float spline_start_outer_last_bevel_start = (
float(1.0) - effective_roundness) *
464 x_axis_A_outer_last_bevel_start;
466 float normalize_based_on_l_angle_bisector =
467 l_angle_bisector *
tanf(outer_last_bevel_start_A_angle_bisector) +
468 spline_start_outer_last_bevel_start *
469 (
float(0.5) * l_angle_bisector +
float(0.5)) +
470 effective_roundness * x_axis_A_outer_last_bevel_start;
472 r_gon_parameter /= normalize_based_on_l_angle_bisector;
477 float spline_start_A_bevel_start = (
float(1.0) - r_gon_roundness) *
478 segment_divider_A_bevel_start;
480 float normalize_based_on_l_angle_bisector =
481 l_angle_bisector *
tanf(bevel_start_A_angle_bisector) +
482 spline_start_A_bevel_start * (
float(0.5) * l_angle_bisector +
float(0.5)) +
483 r_gon_roundness * segment_divider_A_bevel_start;
485 r_gon_parameter /= normalize_based_on_l_angle_bisector;
490 max_unit_parameter =
tanf(bevel_start_A_angle_bisector) + spline_start_A_bevel_start +
491 r_gon_roundness * segment_divider_A_bevel_start;
496 segment_id * segment_divider_A_next_segment_divider +
497 segment_divider_A_angle_bisector);
504 float nearest_segment_divider_SA_coord = segment_divider_A_coord -
505 float(segment_divider_A_coord >
506 segment_divider_A_angle_bisector) *
507 segment_divider_A_next_segment_divider;
508 float l_angle_bisector =
float(0.0);
509 float r_gon_parameter =
float(0.0);
510 float max_unit_parameter =
float(0.0);
512 float l_circle_center = (
float(1.0) - r_gon_roundness) /
513 cosf(segment_divider_A_angle_bisector);
514 float l_coord_R_l_bevel_start =
cosf(nearest_segment_divider_SA_coord) * l_circle_center +
517 sqr(r_gon_roundness) -
sqr(l_circle_center));
519 l_angle_bisector = l_coord / l_coord_R_l_bevel_start;
521 float spline_start_A_bevel_start = (
float(1.0) - r_gon_roundness) *
522 segment_divider_A_bevel_start;
525 float coord_A_bevel_start = segment_divider_A_bevel_start -
526 fabsf(nearest_segment_divider_SA_coord);
527 r_gon_parameter = l_coord *
sinf(bevel_start_A_angle_bisector);
529 if (coord_A_bevel_start < spline_start_A_bevel_start) {
530 r_gon_parameter += l_coord *
cosf(bevel_start_A_angle_bisector) * coord_A_bevel_start +
532 (
float(1.0) - l_coord *
cosf(bevel_start_A_angle_bisector)) *
533 sqr(coord_A_bevel_start) / spline_start_A_bevel_start;
536 r_gon_parameter += spline_start_A_bevel_start *
537 (
float(0.5) * l_coord *
cosf(bevel_start_A_angle_bisector) -
541 if (segment_divider_A_coord < segment_divider_A_angle_bisector) {
542 r_gon_parameter *= -
float(1.0);
544 if (normalize_r_gon_parameter) {
545 float normalize_based_on_l_angle_bisector =
546 l_angle_bisector *
tanf(bevel_start_A_angle_bisector) +
547 spline_start_A_bevel_start * (
float(0.5) * l_angle_bisector +
float(0.5)) +
548 r_gon_roundness * segment_divider_A_bevel_start;
549 float normalize_based_on_l_coord =
550 l_coord *
sinf(bevel_start_A_angle_bisector) +
551 spline_start_A_bevel_start *
552 (
float(0.5) * l_coord *
cosf(bevel_start_A_angle_bisector) +
float(0.5)) +
553 r_gon_roundness * segment_divider_A_bevel_start;
557 r_gon_parameter /=
mix(normalize_based_on_l_angle_bisector,
558 normalize_based_on_l_coord,
559 coord_A_bevel_start / segment_divider_A_bevel_start);
563 max_unit_parameter =
tanf(bevel_start_A_angle_bisector) + spline_start_A_bevel_start +
564 r_gon_roundness * segment_divider_A_bevel_start;
569 segment_id * segment_divider_A_next_segment_divider +
570 segment_divider_A_angle_bisector);
574 float inner_last_bevel_start_A_last_angle_bisector = last_angle_bisector_A_x_axis -
575 inner_last_bevel_start_A_x_axis;
577 if ((x_axis_A_coord >=
578 M_2PI_F - last_segment_divider_A_x_axis + inner_last_bevel_start_A_x_axis) &&
579 (x_axis_A_coord <
M_2PI_F - inner_last_bevel_start_A_x_axis))
583 float l_angle_bisector =
float(0.0);
584 float r_gon_parameter =
float(0.0);
585 float max_unit_parameter =
float(0.0);
587 float l_angle_bisector_R_l_last_angle_bisector =
cosf(segment_divider_A_angle_bisector) /
588 cosf(last_angle_bisector_A_x_axis);
589 float l_last_angle_bisector = l_coord *
590 cosf(last_angle_bisector_A_x_axis - segment_divider_A_coord);
592 l_angle_bisector = l_angle_bisector_R_l_last_angle_bisector * l_last_angle_bisector;
594 float spline_start_A_bevel_start = (
float(1.0) - r_gon_roundness) *
595 inner_last_bevel_start_A_x_axis;
598 r_gon_parameter = l_angle_bisector_R_l_last_angle_bisector * l_last_angle_bisector *
599 tanf(
fabsf(last_angle_bisector_A_x_axis - segment_divider_A_coord));
600 if (segment_divider_A_coord < last_angle_bisector_A_x_axis) {
601 r_gon_parameter *= -
float(1.0);
603 if (normalize_r_gon_parameter) {
604 float normalize_based_on_l_l_angle_bisector =
605 l_angle_bisector_R_l_last_angle_bisector *
606 (l_last_angle_bisector *
tanf(inner_last_bevel_start_A_last_angle_bisector) +
607 spline_start_A_bevel_start * (
float(0.5) * l_last_angle_bisector +
float(0.5)) +
608 r_gon_roundness * inner_last_bevel_start_A_x_axis);
610 r_gon_parameter /= normalize_based_on_l_l_angle_bisector;
614 max_unit_parameter =
tanf(inner_last_bevel_start_A_last_angle_bisector) +
615 l_angle_bisector_R_l_last_angle_bisector *
616 (spline_start_A_bevel_start *
617 ((
float(0.5) / l_angle_bisector_R_l_last_angle_bisector) +
619 r_gon_roundness * inner_last_bevel_start_A_x_axis);
624 segment_id * segment_divider_A_next_segment_divider +
625 last_angle_bisector_A_x_axis);
632 float nearest_segment_divider_MSA_coord =
atan2f(coord.
y, coord.
x);
633 if ((x_axis_A_coord >=
634 M_2PI_F - last_segment_divider_A_x_axis - x_axis_A_outer_last_bevel_start) &&
635 (x_axis_A_coord <
M_2PI_F - last_angle_bisector_A_x_axis))
637 nearest_segment_divider_MSA_coord += last_segment_divider_A_x_axis;
638 nearest_segment_divider_MSA_coord *= -
float(1.0);
640 float l_angle_bisector =
float(0.0);
641 float r_gon_parameter =
float(0.0);
642 float max_unit_parameter =
float(0.0);
643 float x_axis_A_angle_bisector =
float(0.0);
645 float l_coord_R_l_last_angle_bisector =
646 sinf(nearest_segment_divider_MSA_coord) * last_circle_center.
y +
647 cosf(nearest_segment_divider_MSA_coord) * last_circle_center.
x +
648 sqrtf(
sqr(
sinf(nearest_segment_divider_MSA_coord) * last_circle_center.
y +
649 cosf(nearest_segment_divider_MSA_coord) * last_circle_center.
x) +
650 sqr(l_last_circle_radius) -
sqr(last_circle_center.
x) -
sqr(last_circle_center.
y));
651 float l_angle_bisector_R_l_last_angle_bisector =
cosf(segment_divider_A_angle_bisector) /
652 cosf(last_angle_bisector_A_x_axis);
653 float l_last_angle_bisector = l_coord / l_coord_R_l_last_angle_bisector;
655 l_angle_bisector = l_angle_bisector_R_l_last_angle_bisector * l_last_angle_bisector;
657 if (nearest_segment_divider_MSA_coord <
float(0.0)) {
660 float spline_start_A_bevel_start = (
float(1.0) - r_gon_roundness) *
661 inner_last_bevel_start_A_x_axis;
664 float coord_A_bevel_start = inner_last_bevel_start_A_x_axis -
665 fabsf(nearest_segment_divider_MSA_coord);
666 r_gon_parameter = l_angle_bisector_R_l_last_angle_bisector * l_coord *
667 sinf(inner_last_bevel_start_A_last_angle_bisector);
669 if (coord_A_bevel_start < spline_start_A_bevel_start) {
671 l_angle_bisector_R_l_last_angle_bisector *
672 (l_coord *
cosf(inner_last_bevel_start_A_last_angle_bisector) *
673 coord_A_bevel_start +
675 (
float(1.0) - l_coord *
cosf(inner_last_bevel_start_A_last_angle_bisector)) *
676 sqr(coord_A_bevel_start) / spline_start_A_bevel_start);
679 r_gon_parameter += l_angle_bisector_R_l_last_angle_bisector *
680 (spline_start_A_bevel_start *
681 (
float(0.5) * l_coord *
682 cosf(inner_last_bevel_start_A_last_angle_bisector) -
684 coord_A_bevel_start);
686 if (segment_divider_A_coord < last_angle_bisector_A_x_axis) {
687 r_gon_parameter *= -
float(1.0);
689 if (normalize_r_gon_parameter) {
690 float normalize_based_on_l_l_angle_bisector =
691 l_last_angle_bisector *
tanf(inner_last_bevel_start_A_last_angle_bisector) +
692 spline_start_A_bevel_start * (
float(0.5) * l_last_angle_bisector +
float(0.5)) +
693 r_gon_roundness * inner_last_bevel_start_A_x_axis;
694 float normalize_based_on_l_coord =
695 l_coord *
sinf(inner_last_bevel_start_A_last_angle_bisector) +
696 spline_start_A_bevel_start *
697 (
float(0.5) * l_coord *
cosf(inner_last_bevel_start_A_last_angle_bisector) +
699 r_gon_roundness * inner_last_bevel_start_A_x_axis;
703 r_gon_parameter /= l_angle_bisector_R_l_last_angle_bisector *
704 mix(normalize_based_on_l_l_angle_bisector,
705 normalize_based_on_l_coord,
706 coord_A_bevel_start / inner_last_bevel_start_A_x_axis);
710 max_unit_parameter =
tanf(inner_last_bevel_start_A_last_angle_bisector) +
711 l_angle_bisector_R_l_last_angle_bisector *
712 (spline_start_A_bevel_start *
713 ((
float(0.5) / l_angle_bisector_R_l_last_angle_bisector) +
715 r_gon_roundness * inner_last_bevel_start_A_x_axis);
717 x_axis_A_angle_bisector = segment_id * segment_divider_A_next_segment_divider +
718 last_angle_bisector_A_x_axis;
723 float effective_roundness =
float(1.0) -
tanf(segment_divider_A_angle_bisector -
724 x_axis_A_outer_last_bevel_start) /
725 tanf(segment_divider_A_angle_bisector);
726 float spline_start_outer_last_bevel_start = (
float(1.0) - effective_roundness) *
727 x_axis_A_outer_last_bevel_start;
730 float coord_A_bevel_start = x_axis_A_outer_last_bevel_start -
731 fabsf(nearest_segment_divider_MSA_coord);
732 r_gon_parameter = l_coord *
sinf(outer_last_bevel_start_A_angle_bisector);
734 if (coord_A_bevel_start < spline_start_outer_last_bevel_start) {
735 r_gon_parameter += l_coord *
cosf(outer_last_bevel_start_A_angle_bisector) *
736 coord_A_bevel_start +
739 l_coord *
cosf(outer_last_bevel_start_A_angle_bisector)) *
740 sqr(coord_A_bevel_start) / spline_start_outer_last_bevel_start;
743 r_gon_parameter += spline_start_outer_last_bevel_start *
744 (
float(0.5) * l_coord *
745 cosf(outer_last_bevel_start_A_angle_bisector) -
749 if (segment_divider_A_coord < segment_divider_A_angle_bisector) {
750 r_gon_parameter *= -
float(1.0);
752 if (normalize_r_gon_parameter) {
753 float normalize_based_on_l_angle_bisector =
754 l_angle_bisector *
tanf(outer_last_bevel_start_A_angle_bisector) +
755 spline_start_outer_last_bevel_start *
756 (
float(0.5) * l_angle_bisector +
float(0.5)) +
757 effective_roundness * x_axis_A_outer_last_bevel_start;
758 float normalize_based_on_l_coord =
759 l_coord *
sinf(outer_last_bevel_start_A_angle_bisector) +
760 spline_start_outer_last_bevel_start *
761 (
float(0.5) * l_coord *
cosf(outer_last_bevel_start_A_angle_bisector) +
763 effective_roundness * x_axis_A_outer_last_bevel_start;
767 r_gon_parameter /=
mix(normalize_based_on_l_angle_bisector,
768 normalize_based_on_l_coord,
769 coord_A_bevel_start / x_axis_A_outer_last_bevel_start);
773 float bevel_start_A_angle_bisector = segment_divider_A_angle_bisector -
774 segment_divider_A_bevel_start;
775 float spline_start_A_bevel_start = (
float(1.0) - r_gon_roundness) *
776 segment_divider_A_bevel_start;
778 max_unit_parameter =
tanf(bevel_start_A_angle_bisector) + spline_start_A_bevel_start +
779 r_gon_roundness * segment_divider_A_bevel_start;
781 x_axis_A_angle_bisector = segment_id * segment_divider_A_next_segment_divider +
782 segment_divider_A_angle_bisector;
785 l_angle_bisector, r_gon_parameter, max_unit_parameter, x_axis_A_angle_bisector);
791 bool calculate_max_unit_parameter,
792 bool normalize_r_gon_parameter,
794 float r_gon_roundness,
799 (void)calculate_r_gon_parameter_field;
800 (void)calculate_max_unit_parameter;
806 if (
fractf(r_gon_sides) ==
float(0.0)) {
808 float segment_divider_A_angle_bisector =
M_PI_F / r_gon_sides;
809 float segment_divider_A_next_segment_divider =
float(2.0) * segment_divider_A_angle_bisector;
810 float segment_id =
floorf(x_axis_A_coord / segment_divider_A_next_segment_divider);
811 float segment_divider_A_coord = x_axis_A_coord -
812 segment_id * segment_divider_A_next_segment_divider;
814 if (r_gon_roundness ==
float(0.0)) {
817 float l_angle_bisector =
float(0.0);
818 float r_gon_parameter =
float(0.0);
819 float max_unit_parameter =
float(0.0);
821 l_angle_bisector = l_coord *
822 cosf(segment_divider_A_angle_bisector - segment_divider_A_coord);
825 r_gon_parameter = l_angle_bisector *
826 tanf(
fabsf(segment_divider_A_angle_bisector - segment_divider_A_coord));
827 if (segment_divider_A_coord < segment_divider_A_angle_bisector) {
828 r_gon_parameter *= -
float(1.0);
830 if (normalize_r_gon_parameter && (r_gon_sides !=
float(2.0))) {
831 r_gon_parameter /= l_angle_bisector *
tanf(segment_divider_A_angle_bisector);
835 max_unit_parameter = (r_gon_sides !=
float(2.0)) ?
tanf(segment_divider_A_angle_bisector) :
841 segment_id * segment_divider_A_next_segment_divider +
842 segment_divider_A_angle_bisector);
844 else if (r_gon_roundness ==
float(1.0)) {
847 float r_gon_parameter =
float(0.0);
849 r_gon_parameter =
fabsf(segment_divider_A_angle_bisector - segment_divider_A_coord);
850 if (segment_divider_A_coord < segment_divider_A_angle_bisector) {
851 r_gon_parameter *= -
float(1.0);
853 if (normalize_r_gon_parameter) {
854 r_gon_parameter /= segment_divider_A_angle_bisector;
859 segment_divider_A_angle_bisector,
860 segment_id * segment_divider_A_next_segment_divider +
861 segment_divider_A_angle_bisector);
864 float segment_divider_A_bevel_start = segment_divider_A_angle_bisector -
865 atanf((
float(1.0) - r_gon_roundness) *
866 tanf(segment_divider_A_angle_bisector));
867 float bevel_start_A_angle_bisector = segment_divider_A_angle_bisector -
868 segment_divider_A_bevel_start;
870 if ((segment_divider_A_coord >=
871 segment_divider_A_next_segment_divider - segment_divider_A_bevel_start) ||
872 (segment_divider_A_coord < segment_divider_A_bevel_start))
878 float nearest_segment_divider_SA_coord = segment_divider_A_coord -
879 float(segment_divider_A_coord >
880 segment_divider_A_angle_bisector) *
881 segment_divider_A_next_segment_divider;
882 float l_angle_bisector =
float(0.0);
883 float r_gon_parameter =
float(0.0);
884 float max_unit_parameter =
float(0.0);
886 float l_circle_center = (
float(1.0) - r_gon_roundness) /
887 cosf(segment_divider_A_angle_bisector);
888 float l_coord_R_l_bevel_start =
cosf(nearest_segment_divider_SA_coord) * l_circle_center +
891 sqr(r_gon_roundness) -
sqr(l_circle_center));
893 l_angle_bisector = l_coord / l_coord_R_l_bevel_start;
895 float spline_start_A_bevel_start = (
float(1.0) - r_gon_roundness) *
896 segment_divider_A_bevel_start;
899 float coord_A_bevel_start = segment_divider_A_bevel_start -
900 fabsf(nearest_segment_divider_SA_coord);
901 r_gon_parameter = l_coord *
sinf(bevel_start_A_angle_bisector);
903 if (coord_A_bevel_start < spline_start_A_bevel_start) {
904 r_gon_parameter += l_coord *
cosf(bevel_start_A_angle_bisector) * coord_A_bevel_start +
906 (
float(1.0) - l_coord *
cosf(bevel_start_A_angle_bisector)) *
907 sqr(coord_A_bevel_start) / spline_start_A_bevel_start;
910 r_gon_parameter += spline_start_A_bevel_start *
911 (
float(0.5) * l_coord *
cosf(bevel_start_A_angle_bisector) -
915 if (segment_divider_A_coord < segment_divider_A_angle_bisector) {
916 r_gon_parameter *= -
float(1.0);
918 if (normalize_r_gon_parameter) {
919 float normalize_based_on_l_angle_bisector =
920 l_angle_bisector *
tanf(bevel_start_A_angle_bisector) +
921 spline_start_A_bevel_start * (
float(0.5) * l_angle_bisector +
float(0.5)) +
922 r_gon_roundness * segment_divider_A_bevel_start;
923 float normalize_based_on_l_coord =
924 l_coord *
sinf(bevel_start_A_angle_bisector) +
925 spline_start_A_bevel_start *
926 (
float(0.5) * l_coord *
cosf(bevel_start_A_angle_bisector) +
float(0.5)) +
927 r_gon_roundness * segment_divider_A_bevel_start;
931 r_gon_parameter /=
mix(normalize_based_on_l_angle_bisector,
932 normalize_based_on_l_coord,
933 coord_A_bevel_start / segment_divider_A_bevel_start);
937 max_unit_parameter =
tanf(bevel_start_A_angle_bisector) + spline_start_A_bevel_start +
938 r_gon_roundness * segment_divider_A_bevel_start;
943 segment_id * segment_divider_A_next_segment_divider +
944 segment_divider_A_angle_bisector);
949 float l_angle_bisector =
float(0.0);
950 float r_gon_parameter =
float(0.0);
951 float max_unit_parameter =
float(0.0);
953 l_angle_bisector = l_coord *
954 cosf(segment_divider_A_angle_bisector - segment_divider_A_coord);
956 float spline_start_A_bevel_start = (
float(1.0) - r_gon_roundness) *
957 segment_divider_A_bevel_start;
960 r_gon_parameter = l_angle_bisector *
tanf(
fabsf(segment_divider_A_angle_bisector -
961 segment_divider_A_coord));
962 if (segment_divider_A_coord < segment_divider_A_angle_bisector) {
963 r_gon_parameter *= -
float(1.0);
965 if (normalize_r_gon_parameter) {
966 float normalize_based_on_l_angle_bisector =
967 l_angle_bisector *
tanf(bevel_start_A_angle_bisector) +
968 spline_start_A_bevel_start * (
float(0.5) * l_angle_bisector +
float(0.5)) +
969 r_gon_roundness * segment_divider_A_bevel_start;
971 r_gon_parameter /= normalize_based_on_l_angle_bisector;
975 max_unit_parameter =
tanf(bevel_start_A_angle_bisector) + spline_start_A_bevel_start +
976 r_gon_roundness * segment_divider_A_bevel_start;
981 segment_id * segment_divider_A_next_segment_divider +
982 segment_divider_A_angle_bisector);
987 if (r_gon_roundness ==
float(0.0)) {
989 float segment_divider_A_angle_bisector =
M_PI_F / r_gon_sides;
990 float segment_divider_A_next_segment_divider =
float(2.0) * segment_divider_A_angle_bisector;
991 float segment_id =
floorf(x_axis_A_coord / segment_divider_A_next_segment_divider);
992 float segment_divider_A_coord = x_axis_A_coord -
993 segment_id * segment_divider_A_next_segment_divider;
995 float last_angle_bisector_A_x_axis =
M_PI_F -
996 floorf(r_gon_sides) * segment_divider_A_angle_bisector;
997 float last_segment_divider_A_x_axis =
float(2.0) * last_angle_bisector_A_x_axis;
999 if (x_axis_A_coord <
M_2PI_F - last_segment_divider_A_x_axis) {
1002 float l_angle_bisector =
float(0.0);
1003 float r_gon_parameter =
float(0.0);
1004 float max_unit_parameter =
float(0.0);
1006 l_angle_bisector = l_coord *
1007 cosf(segment_divider_A_angle_bisector - segment_divider_A_coord);
1009 r_gon_parameter = l_angle_bisector *
tanf(
fabsf(segment_divider_A_angle_bisector -
1010 segment_divider_A_coord));
1011 if (segment_divider_A_coord < segment_divider_A_angle_bisector) {
1012 r_gon_parameter *= -
float(1.0);
1014 if (normalize_r_gon_parameter) {
1015 r_gon_parameter /= l_angle_bisector *
tanf(segment_divider_A_angle_bisector);
1019 max_unit_parameter =
tanf(segment_divider_A_angle_bisector);
1024 segment_id * segment_divider_A_next_segment_divider +
1025 segment_divider_A_angle_bisector);
1030 float l_angle_bisector =
float(0.0);
1031 float r_gon_parameter =
float(0.0);
1032 float max_unit_parameter =
float(0.0);
1034 float l_angle_bisector_R_l_last_angle_bisector =
cosf(segment_divider_A_angle_bisector) /
1035 cosf(last_angle_bisector_A_x_axis);
1036 float l_last_angle_bisector = l_coord *
1037 cosf(last_angle_bisector_A_x_axis - segment_divider_A_coord);
1039 l_angle_bisector = l_angle_bisector_R_l_last_angle_bisector * l_last_angle_bisector;
1042 r_gon_parameter = l_angle_bisector_R_l_last_angle_bisector * l_last_angle_bisector *
1043 tanf(
fabsf(last_angle_bisector_A_x_axis - segment_divider_A_coord));
1044 if (segment_divider_A_coord < last_angle_bisector_A_x_axis) {
1045 r_gon_parameter *= -
float(1.0);
1047 if (normalize_r_gon_parameter) {
1048 r_gon_parameter /= l_angle_bisector_R_l_last_angle_bisector * l_last_angle_bisector *
1049 tanf(last_angle_bisector_A_x_axis);
1053 max_unit_parameter =
tanf(last_angle_bisector_A_x_axis);
1058 segment_id * segment_divider_A_next_segment_divider +
1059 last_angle_bisector_A_x_axis);
1062#ifdef ADAPT_TO_GEOMETRY_NODES
1063 else if (r_gon_roundness ==
float(1.0)) {
1064 out_variables = calculate_out_variables_full_roundness_irregular_circular(
1065 calculate_r_gon_parameter_field, normalize_r_gon_parameter, r_gon_sides, coord, l_coord);
1070 calculate_max_unit_parameter,
1071 normalize_r_gon_parameter,
1079 if ((coord.
x ==
float(0.0)) && (coord.
y ==
float(0.0))) {
1082 out_variables.
y =
float(0.0);
1085 if (normalize_r_gon_parameter) {
1087 out_variables.
y =
float(0.5) * out_variables.
y +
float(0.5);
1090 out_variables.
x -=
float(1.0);
1093 return out_variables;