# BlendCrv with G4 continuity produces a curve that is only G3

**URL:** <https://discourse.mcneel.com/t/blendcrv-with-g4-continuity-produces-a-curve-that-is-only-g3/222098>\
**Category:** Rhino for Windows\
**Tags:** windows, python, ai, continuity, gcon\
**Created:** [August 24, 2026, 7:13pm UTC](https://discourse.mcneel.com/t/blendcrv-with-g4-continuity-produces-a-curve-that-is-only-g3/222098 "2026-08-24T19:13:14Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Teo](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/teo/32/769361_2.png) [@Teo](https://discourse.mcneel.com/u/Teo)\
**Post date:** [August 24, 2026, 7:13pm UTC](https://discourse.mcneel.com/t/blendcrv-with-g4-continuity-produces-a-curve-that-is-only-g3/222098/1 "2026-08-24T19:13:14Z")

</div>

Tested in Rhino 7.38, 8.33 and 9.0.26230 beta, Windows x64. Same result in all three.

## What happens

`BlendCrv` with Continuity set to G4 on both ends returns a degree-9 curve that satisfies G0, G1, G2 and G3 to machine precision, but misses the fourth-order condition. `d²κ/ds²` differs across the joint by 32 % to 104 % depending on the input geometry.

The same command with G1, G2 or G3 is exact every time. Only G4 fails.

## Reproduction

1. Two degree-5 control-point curves with a gap between them, roughly uniform parameterisation.
2. `BlendCrv`, `Continuity_1 = G4`, `Continuity_2 = G4`, accept. Bulge handles untouched.
3. Evaluate the arc-length derivatives on both sides of each joint.

Attached script does steps 1 and 3 and runs unmodified in Rhino 7, 8 and 9.

## Measurement

Planar pair, degree 5, Rhino 9, start joint. Since G3 holds and the curves are planar, G4 reduces exactly to matching `κ''`.

```auto
             input curve blend difference
kappa 1.748251955e-04 1.748251955e-04 0.0000 %
kappa' -4.987658938e-10 -4.987658936e-10 0.0000 %
tau 0.000000000e+00 -0.000000000e+00 0.0000 %
kappa'' -2.632070539e-11 -1.602999262e-11 39.0974 %

```

Across seven test pairs the G4 deviation ranges from 0.050 to 1.001. A G3 blend on the same curves gives 8e-13 to 1e-9.

In absolute terms the miss is small: on a 2.5 m blend, moving a single control point by 0.055 mm would satisfy G4 exactly.

## Ruled out

Document tolerance (0.01 → 0.0001 gives results identical to the last digit, which also rules out a solver stopping at a tolerance), model scale (the same shape at 1:100 gives identical relative deviations), and the narrower reading of G4 as “curvature acceleration only” (that is exactly what the table above measures).

## Possible lead

The deviation grows with how far the input parameterisation is from uniform. At `max|C'| / min|C'| ≈ 1.1` the miss is 5–33 %; at 37 and 61 it is total. That is what one would expect if the fourth-order term assumed near-uniform parameterisation rather than applying the exact chain rule. Inference from measurements only.

## Question

Is this expected — a deliberate trade-off for blend shape — or should the fourth-order constraint be exact? The docs describe G4 as “curvature acceleration equal in three dimensions”, which is the quantity measured above.

Separately: with a strongly non-uniformly parameterised input, G4 `BlendCrv` produced a 45 m blend across a 2.5 m gap.

Python script: [GCon4.py](https://discourse.mcneel.com/uploads/short-url/zIZpvJvRtSxbw7t78Jb6U7Fx36J.py) (31.5 KB)

---

<div class="post-metadata">

**Author:** ![JimCarruthers](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/jimcarruthers/32/504725_2.png) [@JimCarruthers](https://discourse.mcneel.com/u/JimCarruthers)\
**Post date:** [August 24, 2026, 7:38pm UTC](https://discourse.mcneel.com/t/blendcrv-with-g4-continuity-produces-a-curve-that-is-only-g3/222098/2 "2026-08-24T19:38:04Z")

</div>

Nobody’s gonna read that AI stuff. These automated dubious “bug reports” are murdering huge chunks of open-source code because no one wants to deal with the deluge.

---

<div class="post-metadata">

**Author:** ![dale](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/dale/32/685184_2.png) [@dale](https://discourse.mcneel.com/u/dale)\
**Post date:** [August 24, 2026, 7:49pm UTC](https://discourse.mcneel.com/t/blendcrv-with-g4-continuity-produces-a-curve-that-is-only-g3/222098/3 "2026-08-24T19:49:10Z")

</div>

Hi @Teo,

I am looking at this.

Thanks,

– Dale

---

<div class="post-metadata">

**Author:** ![dn.aur](https://avatars.discourse-cdn.com/v4/letter/d/d2c977/32.png) [@dn.aur](https://discourse.mcneel.com/u/dn.aur)\
**Post date:** [August 24, 2026, 7:49pm UTC](https://discourse.mcneel.com/t/blendcrv-with-g4-continuity-produces-a-curve-that-is-only-g3/222098/4 "2026-08-24T19:49:37Z")

</div>

disclaimer: i just skimmed over your code, but could not really make sense of it.

direct your LLM towards:  
• “Bell-Polynomial”,  
• the works of [Veltkamp](https://onlinelibrary.wiley.com/doi/abs/10.1111/1467-8659.1120093)  
• setup a system of Beziér shape functions and evaluate them at the start and end  
• setup a linear system of equations and solve for each end. the system is actually two block matrices and can be solved independently via forward/backward substituion as they are triangular/anti-triangular.

---

<div class="post-metadata">

**Author:** ![davidcockey](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/davidcockey/32/732604_2.png) [@davidcockey](https://discourse.mcneel.com/u/davidcockey)\
**Post date:** [August 24, 2026, 7:54pm UTC](https://discourse.mcneel.com/t/blendcrv-with-g4-continuity-produces-a-curve-that-is-only-g3/222098/5 "2026-08-24T19:54:49Z")

</div>

> [@Teo](#):
>
> In absolute terms the miss is small: on a 2.5 m blend, moving a single control point by 0.055 mm would satisfy G4 exactly.

What is the practical relevance of this? When is G4 continuity relevant?

What manufacturing method ofor arbitrary shaped curves/surfaces has accuracy better than 0.05 mm over a length of 2.5 m?

Is Jim correct that this is AI generated?

---

<div class="post-metadata">

**Author:** ![Teo](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/teo/32/769361_2.png) [@Teo](https://discourse.mcneel.com/u/Teo)\
**Post date:** [August 24, 2026, 8:18pm UTC](https://discourse.mcneel.com/t/blendcrv-with-g4-continuity-produces-a-curve-that-is-only-g3/222098/6 "2026-08-24T20:18:42Z")

</div>

Hi everyone, I’ve been working on a Python script—assisted by AI—to test continuity between curves, as I noticed that the BlendCrv command allows for continuity up to G4, whereas Rhino’s GCon command only detects up to G2.  
Through testing and cross-verification, I concluded that the G4 setting does not actually produce G4 continuity, while G1, G2 and G3 come out exact every time.

@dn.aur it does use Bell polynomials, Faà di Bruno. Thanks for the Veltkamp link.

@davidcockey you are probably right that it does not matter in practice. Nobody machines to 0.05 mm over 2.5 m.  
I did not report it because it causes me problems. I reported it because the command offers G4 and I wanted to know if it really gives G4.

---

<div class="post-metadata">

**Author:** ![dale](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/dale/32/685184_2.png) [@dale](https://discourse.mcneel.com/u/dale)\
**Post date:** [August 24, 2026, 8:33pm UTC](https://discourse.mcneel.com/t/blendcrv-with-g4-continuity-produces-a-curve-that-is-only-g3/222098/7 "2026-08-24T20:33:44Z")

</div>

Hi @Teo,

I’ve logged an issue so developer can look into this.

> **[GCon should test for G4/G4 : RH-98013](https://mcneel.myjetbrains.com/youtrack/issue/RH-98013)**
>
> https://discourse.mcneel.com/t/blendcrv-with-g4-continuity-produces-a-curve-that-is-only-g3/222098 Rhino's "BlendCrv" allows for G3 and even G4 continuity. image.png However, the "GCon" command tops out a G2.…

– Dale

---

<div class="post-metadata">

**Author:** ![brian](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/brian/32/504171_2.png) [@brian](https://discourse.mcneel.com/u/brian)\
**Post date:** [September 8, 2026, 10:45pm UTC](https://discourse.mcneel.com/t/blendcrv-with-g4-continuity-produces-a-curve-that-is-only-g3/222098/8 "2026-09-08T22:45:51Z")

</div>

[RH-98013](https://mcneel.myjetbrains.com/youtrack/issue/RH-98013) is fixed in Rhino [BETA](https://discourse.mcneel.com/t/welcome-to-serengeti/9612)
