Difference between revisions of "Dev:Linking to Blines - Equations"
m (switched lines) |
(→Main equations: "Zelgadis, you wrong!" :D) |
||
Line 40: | Line 40: | ||
For x: | For x: | ||
* <math>\Delta x^{t1} = \Delta x^{t2} = (1-u)^2 \Delta x^{t2}_1 + 2u(1-u) ((x_2 + \Delta x^{t1}_2) - (x_1 + \Delta x^{t2}_1)) + u^2 \Delta x^{t1}_2 = </math> <math>= -2u(1-u)x_1 + (1-u^2)\Delta x^{t2}_1 + u(2-u)\Delta x^{t1}_2 + u(1-u)x_2</math> | * <math>\Delta x^{t1} = \Delta x^{t2} = (1-u)^2 \Delta x^{t2}_1 + 2u(1-u) ((x_2 + \Delta x^{t1}_2) - (x_1 + \Delta x^{t2}_1)) + u^2 \Delta x^{t1}_2 = </math> <math>= -2u(1-u)x_1 + (1-u^2)\Delta x^{t2}_1 + u(2-u)\Delta x^{t1}_2 + u(1-u)x_2</math> | ||
+ | |||
+ | === Zelgadis, you wrong! === | ||
+ | |||
+ | O'kay I understand what equations above could be wrong. But no one will argue what equations for bline point and tangents generally have form: | ||
+ | |||
+ | * <math>(x,y) = c_1(u) (x_1,y_1) + c_2(u) (x^{t2}_1,y^{t2}_1) + c_3(u) (x^{t1}_2,y^{t1}_2) + c_4(u) (x_2,y_2)</math> | ||
+ | * <math>\Delta x^{t1} = \Delta x^{t2} = c_5(u) (x_1,y_1) + c_6(u) (\Delta x^{t2}_1, \Delta y^{t2}_1) + c_7 (\Delta x^{t1}_2, \Delta y^{t1}_2) + c_8(u) (x_2,y_2)</math> | ||
+ | |||
+ | where <math>c_i(u)</math> - some function from 'u' argument | ||
+ | |||
+ | So I will use this notation further. | ||
== One spline == | == One spline == |
Revision as of 17:23, 9 March 2008
Contents
Main equations
- Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle (x_1,y_1), (x_2,y_2)} - vertices, defining bline segment
- Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle (x,y) } - current bline point
- Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle (x^{t2}_1,y^{t2}_1), (x^{t1}_2,y^{t1}_2)} - tangent points defining bline segment
- Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle (x^{t1},y^{t1}), (x^{t2},y^{t2})} - coordinates of yellow (t1) and red (t2) tangents (absolute)
- u - Amount of current segment, [0,1]
- Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle (x,y) = (1-u)^3 (x_1,y_1) + 3 u(1-u)^2 (x^{t2}_1,y^{t2}_1) + 3 u^2 (1-u) (x^{t1}_2,y^{t1}_2) + u^3 (x_2,y_2)} - bline point
Relative tangents
O'kay, I know, the Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle (x^{t1},y^{t1}), (x^{t2},y^{t2})} defining absolute position of tangents, but in synfig we have their coordinates relative to vertex. Moreover, coordinates of yellow tangent are inverted.
Let's say:
- Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle (\Delta x^{t1},\Delta y^{t1})} - relative coordinates of yellow tangent
- Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle (\Delta x^{t2},\Delta y^{t2})} - relative coordinates of red tangent
Then:
- Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle (x^{t1},y^{t1}) = (x,y) - (\Delta x^{t1},\Delta y^{t1})}
- Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle (x^{t2},y^{t2}) = (x,y) + (\Delta x^{t2},\Delta y^{t2})}
Make substitution:
- Bline point: Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle (x,y) = (1-(3u^2-2u^3)) (x_1,y_1) + 3u(1-u)^2 (\Delta x ^{t2}_1,\Delta y^{t2}_1) - 3u^2(1-u) (\Delta x^{t1}_2, \Delta y^{t1}_2) + (3u^2-2u^3) (x_2,y_2)}
Tangent coordinates
<dooglus> look at etl/_calculus.h <dooglus> class derivative<hermite<T> > <dooglus> T a = func[0], b = func[1], c = func[2], d = func[3]; <dooglus> typename hermite<T>::argument_type y(1-x); <dooglus> return ((b-a)*y*y + (c-b)*x*y*2 + (d-c)*x*x) * 3;
- Can't understand, why *3? --Zelgadis 05:31, 8 March 2008 (EST)
For x:
- Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle \Delta x^{t1} = \Delta x^{t2} = (1-u)^2 \Delta x^{t2}_1 + 2u(1-u) ((x_2 + \Delta x^{t1}_2) - (x_1 + \Delta x^{t2}_1)) + u^2 \Delta x^{t1}_2 = } Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle = -2u(1-u)x_1 + (1-u^2)\Delta x^{t2}_1 + u(2-u)\Delta x^{t1}_2 + u(1-u)x_2}
Zelgadis, you wrong!
O'kay I understand what equations above could be wrong. But no one will argue what equations for bline point and tangents generally have form:
- Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle (x,y) = c_1(u) (x_1,y_1) + c_2(u) (x^{t2}_1,y^{t2}_1) + c_3(u) (x^{t1}_2,y^{t1}_2) + c_4(u) (x_2,y_2)}
- Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle \Delta x^{t1} = \Delta x^{t2} = c_5(u) (x_1,y_1) + c_6(u) (\Delta x^{t2}_1, \Delta y^{t2}_1) + c_7 (\Delta x^{t1}_2, \Delta y^{t1}_2) + c_8(u) (x_2,y_2)}
where Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle c_i(u)} - some function from 'u' argument
So I will use this notation further.
One spline
Case 1: Bline A. A2 linked to A with tangent.
For x coordinates we have following system of equations:
- Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle x_{A1} = c_1}
- Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle x^{t2}_{A1} = c_2}
- Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle \Delta x^{t1}_{A2} = -2u(1-u)x_{A1} + (1-u^2)\Delta x^{t2}_{A1} + u(2-u)\Delta x^{t1}_{A2} + u(1-u)x_{A2}}
- Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle x_{A2} = (1-(3u^2-2u^3)) x_{A1} + 3u(1-u)^2 \Delta x ^{t2}_{A1} - 3u^2(1-u) \Delta x^{t1}_{A2} + (3u^2-2u^3) x_{A2}}
Transform:
- Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle x_{A1} = c_1}
- Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle x^{t2}_{A1} = c_2 }
- Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle -2u(1-u)x_{A1} + (1-u^2)\Delta x^{t2}_{A1} + (u(2-u)-1)\Delta x^{t1}_{A2} + u(1-u)x_{A2} = 0}
- Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle (1-(3u^2-2u^3)) x_{A1} + 3u(1-u)^2 \Delta x ^{t2}_{A1} - 3u^2(1-u) \Delta x^{t1}_{A2} + (3u^2-2u^3-1) x_{A2} = 0}
So, we must solve the 4x4 matrix equation: Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle ( \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 &0 \\ (-2u(1-u) & (1-u^2) & u(2-u) & u(1-u) \\ (1-(3u^2-2u^3)) & 3u(1-u)^2 & -3u^2(1-u) & (3u^2-2u^3) \end{pmatrix} -\begin{pmatrix} 0&0&0&0 \\ 0&0&0&0\\ 0&0&1&0 \\ 0&0&0&1\end{pmatrix}) \cdot \begin{pmatrix} x_{A1} \\ x^{t2}_{A1} \\ x^{t1}_{A2} \\ x_{A2} \end{pmatrix} = \begin{pmatrix} c_1 \\ c_2 \\ 0 \\ 0 \end{pmatrix}}
dooglus, can you check how this formula works in code? Something like:
- Create bline with 2 points - A1,A2
- Select point A2, right click on bline -> "Link to bline"
- Place (not link!) at the position calculated by this formula. If we'll have A2 on bline after that then it's ok for now, if not - something wrong.
I know we need a general formula but if this won't work then I definitely not right.
Case 2: Bline A. A2 linked to A without tangent.
The 4th line just replaced with:
- Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle \Delta x^{t1}_{A2} = c_3}
Two splines
If we got circular reference with two blines, then we must solve equation with matrix 8x8.
Conclusion
Maybe formulas are not correct, but I think you've got the idea: For N Bline segments in loop we have 4N equations. If vertex is linked then we got appropriate equation, depending on what is linked. If vertex is not linked - just assigning constants.