graph LR A[B-spline] --> B[Degree k] A --> C[Knot Sequence] A --> D[Control Points] B --> E[Local Support] C --> F[Smoothness Cสฒ] D --> G[Convex Combination] style A fill:#fff3e0,stroke:#e65100,stroke-width:3px style B fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style C fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style D fill:#f3e5f5,stroke:#7b1fa2,stroke-width:3px style E fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style F fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style G fill:#f3e5f5,stroke:#7b1fa2,stroke-width:3px
graph TD A[Control Points Condition] --> B["c_{i+1} - c_i โฅ c_i - c_{i-1}"] B --> C[Convex Curve โ ] D[Violated Condition] --> E[Non-Convex Curve โ] style A fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style B fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style C fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style D fill:#ffcdd2,stroke:#c62828,stroke-width:3px style E fill:#ffcdd2,stroke:#c62828,stroke-width:3px
graph LR A[Data Points] --> B[Select Basis] B --> C[Formulate QP] C --> D[Solve] D --> E[Fitted Curve] style A fill:#fff3e0,stroke:#e65100,stroke-width:3px style B fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style C fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style D fill:#f3e5f5,stroke:#7b1fa2,stroke-width:3px style E fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px
graph LR A[Knot Placement] --> B[Few Knots] A --> C[Many Knots] B --> D[Underfitting] C --> E[Overfitting] D --> F[High Bias] E --> G[High Variance] style A fill:#fff3e0,stroke:#e65100,stroke-width:3px style B fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style C fill:#ffcdd2,stroke:#c62828,stroke-width:3px style D fill:#ffcdd2,stroke:#c62828,stroke-width:3px style E fill:#ffcdd2,stroke:#c62828,stroke-width:3px style F fill:#ffcdd2,stroke:#c62828,stroke-width:3px style G fill:#ffcdd2,stroke:#c62828,stroke-width:3px