More Heckbert's connections
johnm at wdi.disney.com
johnm at wdi.disney.com
Sat Feb 27 18:09:44 UTC 1999
This is a great candidate for translation into a C primitive.
-- John
Andres Valloud <sqrmax at cvtci.com.ar> wrote:
> Color rendering needs to know about the distance from one color to the other in
> the RGB space cube. I've been doing this by sending #red, #green and #blue to
> colors... etc... very slow. So I came up with this method in color that computes
> the distance squared from one color to an argument in the RGB space cube. It
> takes 16 microseconds and 691 nanoseconds to execute. I'm not able to speed this
> anymore in Smalltalk, so I think it can be useful. Measuring the method's
> execution time, I noticed something that a smallinteger assignment in Squeak's
> 2.3 VM takes about 90ns to execute (200 mmx). For instance, in the
> Color>>#distanceTo: method I built, an assignment of the kind
>
> someName _ rgb.
>
> takes 90ns. I'm not saying anything about this. In fact, I think it's
> pretty fast since it's near memory access time. But maybe it's not. Anyway,
> here's the method.
>
> Color>>#distanceTo:
>
> distanceTo: aColor
> "Answer the distance to aColor, ranging
> from 0.0 to 3.0 in the RGB cube. This is
> like || self - aColor ||^2. SqR! 2/26/1999 18:03"
>
> | sRGB aRGB blueSummand greenSummand redSummand |
>
> aRGB _ aColor privateRGB.
> redSummand _ (rgb bitAnd: 16r3FF) - (aRGB bitAnd: 16r3FF).
> sRGB _ rgb bitShift: -10. aRGB _ aRGB bitShift: -10.
> greenSummand _ (sRGB bitAnd: 16r3FF) - (aRGB bitAnd: 16r3FF).
> blueSummand _ (sRGB bitShift: -10) - (aRGB bitShift: -10).
> ^((redSummand * redSummand) + (greenSummand * greenSummand) +
> (blueSummand * blueSummand)) asFloat / 1046529.0
>
> Note that 1046529.0 is 1023.0 squared.
>
> Andres.
More information about the Squeak-dev
mailing list
|