- From: Oriol Brufau via GitHub <sysbot+gh@w3.org>
- Date: Thu, 12 Nov 2020 15:57:56 +0000
- To: public-css-archive@w3.org
Loirooriol has just created a new issue for https://github.com/w3c/csswg-drafts:
== [css-values] Interpolation with degenerate <ratio> ==
In #4953 we resolved that the interpolation between two ratios `ratio1` and `ratio2` at distance `p` would be
```
interpolate(ratio1, ratio2, p) := e^(log(ratio1)*(1-p) + log(ratio2)*p) = ratio1^(1-p) * ratio2^p
```
This is usually a continuous function, and the boundary conditions hold:
```
interpolate(ratio1, ratio2, 0) = ratio1^1 * ratio2^0 = ratio1
interpolate(ratio1, ratio2, 1) = ratio1^0 * ratio2^1 = ratio2
```
But this doesn't work well if at least one of the ratios is degenerate (`0/1`, `1/0` or `0/0`):
```
interpolate(0/1, ratio2, 1) = 0^0 * ratio2 = NaN = 0/0
interpolate(1/0, ratio2, 1) = ∞^0 * ratio2 = NaN = 0/0
interpolate(0/0, ratio2, p) = NaN * ratio2^p = NaN = 0/0
```
even if `ratio2` is not `0/0`.
(I'm saying `0^0` and `∞^0` are NaN because they are undefined in math, though in CSS/JS they produce `1`, huh. So maybe they are not degenerate after all?)
So at least, in order to comply with https://drafts.csswg.org/css-values/#interpolation, we would have to define
```
interpolate(ratio1, ratio2, p) :=
┌
│ ratio1, if p=0
:= ┤ ratio2, if p=1
│ ratio1^(1-p) * ratio2^p, otherwise
└
```
However, the range of `p` is actually `(−∞, ∞)` because of timing functions. For example, when interpolating from `0/1` to `1/1`, the above would produce `0` when `p=0→1`, `1` for `p=1`, `∞` when `p>1`, and `1` when `p=1` again. Not sure if this is great, might be better to clamp for degenerate cases:
```
interpolate(ratio1, ratio2, p) :=
┌
│ ratio1, if p≤0 and ratio2 ∈ {0/1, 1/0, 0/0}
:= ┤ ratio2, if p≥1 and ratio1 ∈ {0/1, 1/0, 0/0}
│ ratio1^(1-p) * ratio2^p, otherwise
└
```
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/5722 using your GitHub account
--
Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Thursday, 12 November 2020 15:57:57 UTC