@@ -110,11 +110,17 @@ static void computeSharkfin(IList<double> mfX, IList<double> mfY, IList<double>
110
110
111
111
for ( int i = 0 ; i < n ; i ++ ) {
112
112
var XYZ = mfX [ i ] + mfY [ i ] + mfZ [ i ] ;
113
- Sharkfin [ i ] = new xyYPoint { x = mfX [ i ] / XYZ , y = mfY [ i ] / XYZ } ;
113
+
114
+ if ( Math . Abs ( XYZ ) < double . Epsilon ) {
115
+ Sharkfin [ i ] = new xyYPoint { x = 0.0 , y = 0.0 } ;
116
+ } else {
117
+ Sharkfin [ i ] = new xyYPoint { x = mfX [ i ] / XYZ , y = mfY [ i ] / XYZ } ;
118
+ }
114
119
}
115
120
116
121
// Used to speedup the convex hull algorithm
117
122
SortedSharkfin = ( xyYPoint [ ] ) Sharkfin . Clone ( ) ;
123
+
118
124
Array . Sort ( SortedSharkfin , new xyYPointComparer ( ) ) ;
119
125
}
120
126
@@ -140,15 +146,23 @@ public CIExyY (double x, double y, double Y, AConvertibleColor dataSource=null)
140
146
/**
141
147
* <inheritdoc />
142
148
*/
143
- public override bool IsInsideColorSpace ( )
149
+ public override bool IsInsideColorSpace ( bool highPrecision = false )
144
150
{
145
151
// Fast checks
146
152
if ( y > 1.0 - x || y < ( x - 0.25 ) * 0.5 || y < 0.4 - x * 4 || y >= 0.85 )
147
153
return false ;
148
154
149
- xyYPoint [ ] points = new xyYPoint [ SortedSharkfin5Nm . Length + 1 ] ;
150
- Array . Copy ( SortedSharkfin5Nm , 0 , points , 0 , SortedSharkfin5Nm . Length ) ;
151
- points [ SortedSharkfin5Nm . Length ] = new xyYPoint { x = x , y = y } ;
155
+ xyYPoint [ ] points ;
156
+
157
+ if ( highPrecision ) {
158
+ points = new xyYPoint [ SortedSharkfin1Nm . Length + 1 ] ;
159
+ Array . Copy ( SortedSharkfin1Nm , 0 , points , 0 , SortedSharkfin1Nm . Length ) ;
160
+ points [ SortedSharkfin1Nm . Length ] = new xyYPoint { x = x , y = y } ;
161
+ } else {
162
+ points = new xyYPoint [ SortedSharkfin5Nm . Length + 1 ] ;
163
+ Array . Copy ( SortedSharkfin5Nm , 0 , points , 0 , SortedSharkfin5Nm . Length ) ;
164
+ points [ SortedSharkfin5Nm . Length ] = new xyYPoint { x = x , y = y } ;
165
+ }
152
166
153
167
xyYPoint [ ] convexHull = findConvexHull ( points ) ;
154
168
@@ -191,7 +205,7 @@ public override bool Equals(Object obj)
191
205
if ( xyYObj == this ) {
192
206
return true ;
193
207
}
194
- if ( xyYObj == null || GetHashCode ( ) != obj . GetHashCode ( ) ) {
208
+ if ( xyYObj == null ) {
195
209
return false ;
196
210
}
197
211
0 commit comments