1SkPoint Reference 2=== 3 4# <a name="Point"></a> Point 5 6## <a name="Overview"></a> Overview 7 8## <a name="Subtopics"></a> Subtopics 9 10| name | description | 11| --- | --- | 12| <a href="#Constructors">Constructors</a> | functions that construct <a href="SkPoint_Reference#SkPoint">SkPoint</a> | 13| <a href="#Member_Functions">Member Functions</a> | static functions and member methods | 14| <a href="#Members">Members</a> | member values | 15| <a href="#Operators">Operators</a> | operator overloading methods | 16 17# <a name="SkPoint"></a> Struct SkPoint 18 19## <a name="Constructors"></a> Constructors 20 21| name | description | 22| --- | --- | 23| <a href="#SkPoint_Make">Make</a> | constructs from <a href="undocumented#SkScalar">SkScalar</a> inputs | 24 25## <a name="Operators"></a> Operators 26 27| name | description | 28| --- | --- | 29| <a href="#SkPoint_notequal_operator">operator!=(const SkPoint& a, const SkPoint& b)</a> | returns true if <a href="#Point">Point</a> are unequal | 30| <a href="#SkPoint_multiply_operator">operator*(SkScalar scale) const</a> | returns <a href="#Point">Point</a> multiplied by scale | 31| <a href="#SkPoint_multiplyby_operator">operator*=(SkScalar scale)</a> | multiplies <a href="#Point">Point</a> by scale factor | 32| <a href="#SkPoint_add_operator">operator+(const SkPoint& a, const SkVector& b)</a> | returns <a href="#Point">Point</a> offset by <a href="SkPoint_Reference#Vector">Vector</a> | 33| <a href="#SkPoint_addto_operator">operator+=(const SkVector& v)</a> | adds <a href="SkPoint_Reference#Vector">Vector</a> to <a href="#Point">Point</a> | 34| <a href="#SkPoint_minus_operator">operator-() const</a> | reverses sign of <a href="#Point">Point</a> | 35| <a href="#SkPoint_subtract_operator">operator-(const SkPoint& a, const SkPoint& b)</a> | returns <a href="SkPoint_Reference#Vector">Vector</a> between <a href="#Point">Points</a> | 36| <a href="#SkPoint_subtractfrom_operator">operator-=(const SkVector& v)</a> | subtracts <a href="SkPoint_Reference#Vector">Vector</a> from <a href="#Point">Point</a> | 37| <a href="#SkPoint_equal_operator">operator==(const SkPoint& a, const SkPoint& b)</a> | returns true if <a href="#Point">Point</a> are equal | 38 39## <a name="Member_Functions"></a> Member Functions 40 41| name | description | 42| --- | --- | 43| <a href="#SkPoint_CrossProduct">CrossProduct</a> | returns cross product | 44| <a href="#SkPoint_Distance">Distance</a> | returns straight-line distance between points | 45| <a href="#SkPoint_DotProduct">DotProduct</a> | returns dot product | 46| <a href="#SkPoint_Length">Length</a> | returns straight-line distance to origin | 47| <a href="#SkPoint_Make">Make</a> | constructs from <a href="undocumented#SkScalar">SkScalar</a> inputs | 48| <a href="#SkPoint_Normalize">Normalize</a> | sets length to one, and returns prior length | 49| <a href="#SkPoint_Offset">Offset</a> | translates <a href="#Point">Point</a> array | 50| <a href="#SkPoint_cross">cross</a> | returns cross product | 51| <a href="#SkPoint_distanceToOrigin">distanceToOrigin</a> | returns straight-line distance to origin | 52| <a href="#SkPoint_dot">dot</a> | returns dot product | 53| <a href="#SkPoint_equals">equals</a> | returns true if <a href="#Point">Points</a> are equal | 54| <a href="#SkPoint_isFinite">isFinite</a> | returns true if no member is infinite or NaN | 55| <a href="#SkPoint_isZero">isZero</a> | returns true if both members equal zero | 56| <a href="#SkPoint_iset">iset</a> | sets to integer input | 57| <a href="#SkPoint_length">length</a> | returns straight-line distance to origin | 58| <a href="#SkPoint_negate">negate</a> | reverses the sign of both members | 59| <a href="#SkPoint_normalize">normalize</a> | sets length to one, preserving direction | 60| <a href="#SkPoint_offset">offset</a> | translates <a href="#Point">Point</a> | 61| <a href="#SkPoint_scale">scale</a> | multiplies <a href="#Point">Point</a> by scale factor | 62| <a href="#SkPoint_set">set</a> | sets to <a href="undocumented#SkScalar">SkScalar</a> input | 63| <a href="#SkPoint_setAbs">setAbs</a> | sets sign of both members to positive | 64| <a href="#SkPoint_setLength">setLength</a> | sets straight-line distance to origin | 65| <a href="#SkPoint_setNormalize">setNormalize</a> | sets length to one, in direction of (x, y) | 66| <a href="#SkPoint_x">x</a> | returns <a href="#SkPoint_fX">fX</a> | 67| <a href="#SkPoint_y">y</a> | returns <a href="#SkPoint_fY">fY</a> | 68 69## <a name="Members"></a> Members 70 71| name | description | 72| --- | --- | 73| <a href="#SkPoint_fX">fX</a> | x-axis value | 74| <a href="#SkPoint_fY">fY</a> | y-axis value | 75 76<a name="SkPoint_fX"> <code><strong>SkScalar fX</strong></code> </a> 77 78x-axis value used by both <a href="#Point">Point</a> and <a href="SkPoint_Reference#Vector">Vector</a>. May contain any value, including 79infinities and NaN. 80 81<a name="SkPoint_fY"> <code><strong>SkScalar fY</strong></code> </a> 82 83y-axis value used by both <a href="#Point">Point</a> and <a href="SkPoint_Reference#Vector">Vector</a>. May contain any value, including 84infinities and NaN. 85 86<a name="SkPoint_Make"></a> 87## Make 88 89<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 90static constexpr SkPoint Make(SkScalar x, SkScalar y) 91</pre> 92 93Sets <a href="#SkPoint_fX">fX</a> to x, <a href="#SkPoint_fY">fY</a> to y. Used both to set <a href="#Point">Point</a> and <a href="SkPoint_Reference#Vector">Vector</a>. 94 95### Parameters 96 97<table> <tr> <td><a name="SkPoint_Make_x"> <code><strong>x </strong></code> </a></td> <td> 98<a href="undocumented#SkScalar">SkScalar</a> x-axis value of constructed <a href="#Point">Point</a> or <a href="SkPoint_Reference#Vector">Vector</a></td> 99 </tr> <tr> <td><a name="SkPoint_Make_y"> <code><strong>y </strong></code> </a></td> <td> 100<a href="undocumented#SkScalar">SkScalar</a> y-axis value of constructed <a href="#Point">Point</a> or <a href="SkPoint_Reference#Vector">Vector</a></td> 101 </tr> 102</table> 103 104### Return Value 105 106<a href="#Point">Point</a> (x, y) 107 108### Example 109 110<div><fiddle-embed name="d266e70977847001f7c42f8a2513bee7"> 111 112#### Example Output 113 114~~~~ 115all equal 116~~~~ 117 118</fiddle-embed></div> 119 120### See Also 121 122<a href="#SkPoint_set">set</a> <a href="#SkPoint_iset">iset</a><sup><a href="#SkPoint_iset_2">[2]</a></sup> <a href="#SkIPoint_Make">SkIPoint::Make</a> 123 124--- 125 126<a name="SkPoint_x"></a> 127## x 128 129<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 130SkScalar x() const 131</pre> 132 133Returns x-axis value of <a href="#Point">Point</a> or <a href="SkPoint_Reference#Vector">Vector</a>. 134 135### Return Value 136 137<a href="#SkPoint_fX">fX</a> 138 139### Example 140 141<div><fiddle-embed name="9f3fe446b800ae1d940785d438634941"> 142 143#### Example Output 144 145~~~~ 146pt1.fX == pt1.x() 147~~~~ 148 149</fiddle-embed></div> 150 151### See Also 152 153<a href="#SkPoint_y">y</a> <a href="#SkIPoint_x">SkIPoint::x()</a> 154 155--- 156 157<a name="SkPoint_y"></a> 158## y 159 160<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 161SkScalar y() const 162</pre> 163 164Returns y-axis value of <a href="#Point">Point</a> or <a href="SkPoint_Reference#Vector">Vector</a>. 165 166### Return Value 167 168<a href="#SkPoint_fY">fY</a> 169 170### Example 171 172<div><fiddle-embed name="4c962850c2dbea4d2325df469400680e"> 173 174#### Example Output 175 176~~~~ 177pt1.fY == pt1.y() 178~~~~ 179 180</fiddle-embed></div> 181 182### See Also 183 184<a href="#SkPoint_x">x</a> <a href="#SkIPoint_y">SkIPoint::y()</a> 185 186--- 187 188<a name="SkPoint_isZero"></a> 189## isZero 190 191<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 192bool isZero() const 193</pre> 194 195Returns true if <a href="#SkPoint_fX">fX</a> and <a href="#SkPoint_fY">fY</a> are both zero. 196 197### Return Value 198 199true if <a href="#SkPoint_fX">fX</a> is zero and <a href="#SkPoint_fY">fY</a> is zero 200 201### Example 202 203<div><fiddle-embed name="81b9665110b88ef6bcbc20464aed7da1"> 204 205#### Example Output 206 207~~~~ 208pt.fX=+0 pt.fY=-0 209pt.isZero() == true 210~~~~ 211 212</fiddle-embed></div> 213 214### See Also 215 216<a href="#SkPoint_isFinite">isFinite</a> <a href="#SkIPoint_isZero">SkIPoint::isZero</a> 217 218--- 219 220<a name="SkPoint_set"></a> 221## set 222 223<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 224void set(SkScalar x, SkScalar y) 225</pre> 226 227Sets <a href="#SkPoint_fX">fX</a> to x and <a href="#SkPoint_fY">fY</a> to y. 228 229### Parameters 230 231<table> <tr> <td><a name="SkPoint_set_x"> <code><strong>x </strong></code> </a></td> <td> 232new value for <a href="#SkPoint_fX">fX</a></td> 233 </tr> <tr> <td><a name="SkPoint_set_y"> <code><strong>y </strong></code> </a></td> <td> 234new value for <a href="#SkPoint_fY">fY</a></td> 235 </tr> 236</table> 237 238### Example 239 240<div><fiddle-embed name="d08d1e7dafcad4342d1619fdbb2f5781"> 241 242#### Example Output 243 244~~~~ 245pt1 == pt2 246~~~~ 247 248</fiddle-embed></div> 249 250### See Also 251 252<a href="#SkPoint_iset">iset</a><sup><a href="#SkPoint_iset_2">[2]</a></sup> <a href="#SkPoint_Make">Make</a> 253 254--- 255 256<a name="SkPoint_iset"></a> 257## iset 258 259<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 260void iset(int32_t x, int32_t y) 261</pre> 262 263Sets <a href="#SkPoint_fX">fX</a> to x and <a href="#SkPoint_fY">fY</a> to y, promoting integers to <a href="undocumented#SkScalar">SkScalar</a> values. 264 265Assigning a large integer value directly to <a href="#SkPoint_fX">fX</a> or <a href="#SkPoint_fY">fY</a> may cause a compiler 266error, triggered by narrowing conversion of int to <a href="undocumented#SkScalar">SkScalar</a>. This safely 267casts x and y to avoid the error. 268 269### Parameters 270 271<table> <tr> <td><a name="SkPoint_iset_x"> <code><strong>x </strong></code> </a></td> <td> 272new value for <a href="#SkPoint_fX">fX</a></td> 273 </tr> <tr> <td><a name="SkPoint_iset_y"> <code><strong>y </strong></code> </a></td> <td> 274new value for <a href="#SkPoint_fY">fY</a></td> 275 </tr> 276</table> 277 278### Example 279 280<div><fiddle-embed name="0d9e8ed734981b5b113f22c7bfde5357"></fiddle-embed></div> 281 282### See Also 283 284<a href="#SkPoint_set">set</a> <a href="#SkPoint_Make">Make</a> <a href="#SkIPoint_set">SkIPoint::set</a> 285 286--- 287 288<a name="SkPoint_iset_2"></a> 289 290<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 291void iset(const SkIPoint& p) 292</pre> 293 294Sets <a href="#SkPoint_fX">fX</a> to <a href="#SkPoint_iset_2_p">p</a>.<a href="#SkPoint_fX">fX</a> and <a href="#SkPoint_fY">fY</a> to <a href="#SkPoint_iset_2_p">p</a>.<a href="#SkPoint_fY">fY</a>, promoting integers to <a href="undocumented#SkScalar">SkScalar</a> values. 295 296Assigning an <a href="SkIPoint_Reference#IPoint">IPoint</a> containing a large integer value directly to <a href="#SkPoint_fX">fX</a> or <a href="#SkPoint_fY">fY</a> may 297cause a compiler error, triggered by narrowing conversion of int to <a href="undocumented#SkScalar">SkScalar</a>. 298This safely casts <a href="#SkPoint_iset_2_p">p</a>.<a href="#SkPoint_fX">fX</a> and <a href="#SkPoint_iset_2_p">p</a>.<a href="#SkPoint_fY">fY</a> to avoid the error. 299 300### Parameters 301 302<table> <tr> <td><a name="SkPoint_iset_2_p"> <code><strong>p </strong></code> </a></td> <td> 303<a href="SkIPoint_Reference#IPoint">IPoint</a> members promoted to <a href="undocumented#SkScalar">SkScalar</a></td> 304 </tr> 305</table> 306 307### Example 308 309<div><fiddle-embed name="12b7164a769e232bb772f19c59600ee7"> 310 311#### Example Output 312 313~~~~ 314iPt: -2147483647, 2147483647 315fPt: -2.14748e+09, 2.14748e+09 316~~~~ 317 318</fiddle-embed></div> 319 320### See Also 321 322<a href="#SkPoint_set">set</a> <a href="#SkPoint_Make">Make</a> <a href="#SkIPoint_set">SkIPoint::set</a> 323 324--- 325 326<a name="SkPoint_setAbs"></a> 327## setAbs 328 329<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 330void setAbs(const SkPoint& pt) 331</pre> 332 333Sets <a href="#SkPoint_fX">fX</a> to absolute value of <a href="#SkPoint_setAbs_pt">pt</a>.<a href="#SkPoint_fX">fX</a>; and <a href="#SkPoint_fY">fY</a> to absolute value of <a href="#SkPoint_setAbs_pt">pt</a>.<a href="#SkPoint_fY">fY</a>. 334 335### Parameters 336 337<table> <tr> <td><a name="SkPoint_setAbs_pt"> <code><strong>pt </strong></code> </a></td> <td> 338members providing magnitude for <a href="#SkPoint_fX">fX</a> and <a href="#SkPoint_fY">fY</a></td> 339 </tr> 340</table> 341 342### Example 343 344<div><fiddle-embed name="7f70860e820b67a347cff03c00488426"> 345 346#### Example Output 347 348~~~~ 349pt: 0, -0 abs: 0, 0 350pt: -1, -2 abs: 1, 2 351pt: inf, -inf abs: inf, inf 352pt: nan, -nan abs: nan, nan 353~~~~ 354 355</fiddle-embed></div> 356 357### See Also 358 359<a href="#SkPoint_set">set</a> <a href="#SkPoint_Make">Make</a> <a href="#SkPoint_negate">negate</a> 360 361--- 362 363<a name="SkPoint_Offset"></a> 364## Offset 365 366<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 367static void Offset(SkPoint points[], int count, const SkVector& offset) 368</pre> 369 370Adds offset to each <a href="#Point">Point</a> in <a href="#SkPoint_Offset_points">points</a> array with <a href="#SkPoint_Offset_count">count</a> entries. 371 372### Parameters 373 374<table> <tr> <td><a name="SkPoint_Offset_points"> <code><strong>points </strong></code> </a></td> <td> 375<a href="#Point">Point</a> array</td> 376 </tr> <tr> <td><a name="SkPoint_Offset_count"> <code><strong>count </strong></code> </a></td> <td> 377entries in array</td> 378 </tr> <tr> <td><a name="SkPoint_Offset_offset"> <code><strong>offset </strong></code> </a></td> <td> 379<a href="SkPoint_Reference#Vector">Vector</a> added to <a href="#SkPoint_Offset_points">points</a></td> 380 </tr> 381</table> 382 383### Example 384 385<div><fiddle-embed name="f0f24726df78a5d797bcf311e694a0a3"></fiddle-embed></div> 386 387### See Also 388 389<a href="#SkPoint_offset">offset</a> <a href="#SkPoint_addto_operator">operator+=(const SkVector& v)</a> 390 391--- 392 393<a name="SkPoint_Offset_2"></a> 394 395<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 396static void Offset(SkPoint points[], int count, SkScalar dx, SkScalar dy) 397</pre> 398 399Adds offset (<a href="#SkPoint_Offset_2_dx">dx</a>, <a href="#SkPoint_Offset_2_dy">dy</a>) to each <a href="#Point">Point</a> in <a href="#SkPoint_Offset_2_points">points</a> array of length <a href="#SkPoint_Offset_2_count">count</a>. 400 401### Parameters 402 403<table> <tr> <td><a name="SkPoint_Offset_2_points"> <code><strong>points </strong></code> </a></td> <td> 404<a href="#Point">Point</a> array</td> 405 </tr> <tr> <td><a name="SkPoint_Offset_2_count"> <code><strong>count </strong></code> </a></td> <td> 406entries in array</td> 407 </tr> <tr> <td><a name="SkPoint_Offset_2_dx"> <code><strong>dx </strong></code> </a></td> <td> 408added to <a href="#SkPoint_fX">fX</a> in <a href="#SkPoint_Offset_2_points">points</a></td> 409 </tr> <tr> <td><a name="SkPoint_Offset_2_dy"> <code><strong>dy </strong></code> </a></td> <td> 410added to <a href="#SkPoint_fY">fY</a> in <a href="#SkPoint_Offset_2_points">points</a></td> 411 </tr> 412</table> 413 414### Example 415 416<div><fiddle-embed name="532849faa838de885b86d3ebffae3712"></fiddle-embed></div> 417 418### See Also 419 420<a href="#SkPoint_offset">offset</a> <a href="#SkPoint_addto_operator">operator+=(const SkVector& v)</a> 421 422--- 423 424<a name="SkPoint_offset"></a> 425## offset 426 427<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 428void offset(SkScalar dx, SkScalar dy) 429</pre> 430 431Adds offset (<a href="#SkPoint_offset_dx">dx</a>, <a href="#SkPoint_offset_dy">dy</a>) to <a href="#Point">Point</a>. 432 433### Parameters 434 435<table> <tr> <td><a name="SkPoint_offset_dx"> <code><strong>dx </strong></code> </a></td> <td> 436added to <a href="#SkPoint_fX">fX</a></td> 437 </tr> <tr> <td><a name="SkPoint_offset_dy"> <code><strong>dy </strong></code> </a></td> <td> 438added to <a href="#SkPoint_fY">fY</a></td> 439 </tr> 440</table> 441 442### Example 443 444<div><fiddle-embed name="02750ceaa874f956e6e6544ef6b858ee"></fiddle-embed></div> 445 446### See Also 447 448<a href="#SkPoint_Offset">Offset</a><sup><a href="#SkPoint_Offset_2">[2]</a></sup> <a href="#SkPoint_addto_operator">operator+=(const SkVector& v)</a> 449 450--- 451 452<a name="SkPoint_length"></a> 453## length 454 455<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 456SkScalar length() const 457</pre> 458 459Returns the Euclidean_Distance from origin, computed as: 460 461<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 462sqrt(fX * fX + fY * fY)</pre> 463 464. 465 466### Return Value 467 468straight-line distance to origin 469 470### Example 471 472<div><fiddle-embed name="8363ab179447ee4b827679e20d3d81eb"></fiddle-embed></div> 473 474### See Also 475 476<a href="#SkPoint_distanceToOrigin">distanceToOrigin</a> <a href="#SkPoint_Length">Length</a> <a href="#SkPoint_setLength">setLength</a><sup><a href="#SkPoint_setLength_2">[2]</a></sup> <a href="#SkPoint_Distance">Distance</a> 477 478--- 479 480<a name="SkPoint_distanceToOrigin"></a> 481## distanceToOrigin 482 483<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 484SkScalar distanceToOrigin() const 485</pre> 486 487Returns the Euclidean_Distance from origin, computed as: 488 489<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 490sqrt(fX * fX + fY * fY)</pre> 491 492. 493 494### Return Value 495 496straight-line distance to origin 497 498### Example 499 500<div><fiddle-embed name="812cf26d91b1cdcd2c6b9438a8172518"></fiddle-embed></div> 501 502### See Also 503 504<a href="#SkPoint_length">length</a> <a href="#SkPoint_Length">Length</a> <a href="#SkPoint_setLength">setLength</a><sup><a href="#SkPoint_setLength_2">[2]</a></sup> <a href="#SkPoint_Distance">Distance</a> 505 506--- 507 508<a name="SkPoint_normalize"></a> 509## normalize 510 511<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 512bool normalize() 513</pre> 514 515Scales (<a href="#SkPoint_fX">fX</a>, <a href="#SkPoint_fY">fY</a>) so that <a href="#SkPoint_length">length</a> returns one, while preserving ratio of <a href="#SkPoint_fX">fX</a> to <a href="#SkPoint_fY">fY</a>, 516if possible. If prior length is nearly zero, sets <a href="SkPoint_Reference#Vector">Vector</a> to (0, 0) and returns 517false; otherwise returns true. 518 519### Return Value 520 521true if former length is not zero or nearly zero 522 523### Example 524 525<div><fiddle-embed name="d84fce292d86c7d9ef37ae2d179c03c7"></fiddle-embed></div> 526 527### See Also 528 529<a href="#SkPoint_Normalize">Normalize</a> <a href="#SkPoint_setLength">setLength</a><sup><a href="#SkPoint_setLength_2">[2]</a></sup> <a href="#SkPoint_length">length</a> <a href="#SkPoint_Length">Length</a> 530 531--- 532 533<a name="SkPoint_setNormalize"></a> 534## setNormalize 535 536<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 537bool setNormalize(SkScalar x, SkScalar y) 538</pre> 539 540Sets <a href="SkPoint_Reference#Vector">Vector</a> to (x, y) scaled so <a href="#SkPoint_length">length</a> returns one, and so that 541(<a href="#SkPoint_fX">fX</a>, <a href="#SkPoint_fY">fY</a>) is proportional to (x, y). If (x, y) length is nearly zero, 542sets <a href="SkPoint_Reference#Vector">Vector</a> to (0, 0) and returns false; otherwise returns true. 543 544### Parameters 545 546<table> <tr> <td><a name="SkPoint_setNormalize_x"> <code><strong>x </strong></code> </a></td> <td> 547proportional value for <a href="#SkPoint_fX">fX</a></td> 548 </tr> <tr> <td><a name="SkPoint_setNormalize_y"> <code><strong>y </strong></code> </a></td> <td> 549proportional value for <a href="#SkPoint_fY">fY</a></td> 550 </tr> 551</table> 552 553### Return Value 554 555true if (x, y) length is not zero or nearly zero 556 557### Example 558 559<div><fiddle-embed name="3e4f147d143a388802484bf0d26534c2"></fiddle-embed></div> 560 561### See Also 562 563<a href="#SkPoint_normalize">normalize</a> <a href="#SkPoint_setLength">setLength</a><sup><a href="#SkPoint_setLength_2">[2]</a></sup> 564 565--- 566 567<a name="SkPoint_setLength"></a> 568## setLength 569 570<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 571bool setLength(SkScalar length) 572</pre> 573 574Scales <a href="SkPoint_Reference#Vector">Vector</a> so that <a href="#SkPoint_distanceToOrigin">distanceToOrigin</a> returns length, if possible. If former 575length is nearly zero, sets <a href="SkPoint_Reference#Vector">Vector</a> to (0, 0) and return false; otherwise returns 576true. 577 578### Parameters 579 580<table> <tr> <td><a name="SkPoint_setLength_length"> <code><strong>length </strong></code> </a></td> <td> 581straight-line distance to origin</td> 582 </tr> 583</table> 584 585### Return Value 586 587true if former length is not zero or nearly zero 588 589### Example 590 591<div><fiddle-embed name="cbe7db206ece825aa3b9b7c3256aeaf0"></fiddle-embed></div> 592 593### See Also 594 595<a href="#SkPoint_length">length</a> <a href="#SkPoint_Length">Length</a> <a href="#SkPoint_setNormalize">setNormalize</a> <a href="#SkPoint_setAbs">setAbs</a> 596 597--- 598 599<a name="SkPoint_setLength_2"></a> 600 601<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 602bool setLength(SkScalar x, SkScalar y, SkScalar length) 603</pre> 604 605Sets <a href="SkPoint_Reference#Vector">Vector</a> to (x, y) scaled to length, if possible. If former 606length is nearly zero, sets <a href="SkPoint_Reference#Vector">Vector</a> to (0, 0) and return false; otherwise returns 607true. 608 609### Parameters 610 611<table> <tr> <td><a name="SkPoint_setLength_2_x"> <code><strong>x </strong></code> </a></td> <td> 612proportional value for <a href="#SkPoint_fX">fX</a></td> 613 </tr> <tr> <td><a name="SkPoint_setLength_2_y"> <code><strong>y </strong></code> </a></td> <td> 614proportional value for <a href="#SkPoint_fY">fY</a></td> 615 </tr> <tr> <td><a name="SkPoint_setLength_2_length"> <code><strong>length </strong></code> </a></td> <td> 616straight-line distance to origin</td> 617 </tr> 618</table> 619 620### Return Value 621 622true if (x, y) length is not zero or nearly zero 623 624### Example 625 626<div><fiddle-embed name="3cc0662b6fbbee1fe3442a0acfece22c"></fiddle-embed></div> 627 628### See Also 629 630<a href="#SkPoint_length">length</a> <a href="#SkPoint_Length">Length</a> <a href="#SkPoint_setNormalize">setNormalize</a> <a href="#SkPoint_setAbs">setAbs</a> 631 632--- 633 634<a name="SkPoint_scale"></a> 635## scale 636 637<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 638void scale(SkScalar scale, SkPoint* dst) const 639</pre> 640 641Sets <a href="#SkPoint_scale_dst">dst</a> to <a href="#Point">Point</a> times scale. <a href="#SkPoint_scale_dst">dst</a> may be <a href="#Point">Point</a> to modify <a href="#Point">Point</a> in place. 642 643### Parameters 644 645<table> <tr> <td><a name="SkPoint_scale_scale"> <code><strong>scale </strong></code> </a></td> <td> 646factor to multiply <a href="#Point">Point</a> by</td> 647 </tr> <tr> <td><a name="SkPoint_scale_dst"> <code><strong>dst </strong></code> </a></td> <td> 648storage for scaled <a href="#Point">Point</a></td> 649 </tr> 650</table> 651 652### Example 653 654<div><fiddle-embed name="972e4e230806281adb928e068bcd8551"></fiddle-embed></div> 655 656### See Also 657 658<a href="#SkPoint_multiply_operator">operator*(SkScalar scale) const</a> <a href="#SkPoint_multiplyby_operator">operator*=(SkScalar scale)</a> <a href="#SkPoint_setLength">setLength</a><sup><a href="#SkPoint_setLength_2">[2]</a></sup> 659 660--- 661 662<a name="SkPoint_scale_2"></a> 663 664<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 665void scale(SkScalar value) 666</pre> 667 668Scales <a href="#Point">Point</a> in place by scale. 669 670### Parameters 671 672<table> <tr> <td><a name="SkPoint_scale_2_value"> <code><strong>value </strong></code> </a></td> <td> 673factor to multiply <a href="#Point">Point</a> by</td> 674 </tr> 675</table> 676 677### Example 678 679<div><fiddle-embed name="1060a4f27d8ef29519e6ac006ce90f2b"></fiddle-embed></div> 680 681### See Also 682 683<a href="#SkPoint_multiply_operator">operator*(SkScalar scale) const</a> <a href="#SkPoint_multiplyby_operator">operator*=(SkScalar scale)</a> <a href="#SkPoint_setLength">setLength</a><sup><a href="#SkPoint_setLength_2">[2]</a></sup> 684 685--- 686 687<a name="SkPoint_negate"></a> 688## negate 689 690<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 691void negate() 692</pre> 693 694Changes the sign of <a href="#SkPoint_fX">fX</a> and <a href="#SkPoint_fY">fY</a>. 695 696### Example 697 698<div><fiddle-embed name="312c0c8065ab5d0adfda80cccf2d11e6"> 699 700#### Example Output 701 702~~~~ 703pt: 0, -0 negate: -0, 0 704pt: -1, -2 negate: 1, 2 705pt: inf, -inf negate: -inf, inf 706pt: nan, -nan negate: -nan, nan 707~~~~ 708 709</fiddle-embed></div> 710 711### See Also 712 713<a href="#SkPoint_minus_operator">operator-() const</a> <a href="#SkPoint_setAbs">setAbs</a> 714 715--- 716 717<a name="SkPoint_minus_operator"></a> 718## operator- 719 720<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 721SkPoint operator-() _const 722</pre> 723 724Returns <a href="#Point">Point</a> changing the signs of <a href="#SkPoint_fX">fX</a> and <a href="#SkPoint_fY">fY</a>. 725 726### Return Value 727 728<a href="#Point">Point</a> as (-<a href="#SkPoint_fX">fX</a>, -<a href="#SkPoint_fY">fY</a>) 729 730### Example 731 732<div><fiddle-embed name="9baf247cfcd8272c0ddf6ce93f676b37"> 733 734#### Example Output 735 736~~~~ 737pt: 0, -0 negate: -0, 0 738pt: -1, -2 negate: 1, 2 739pt: inf, -inf negate: -inf, inf 740pt: nan, -nan negate: -nan, nan 741~~~~ 742 743</fiddle-embed></div> 744 745### See Also 746 747<a href="#SkPoint_negate">negate</a> <a href="#SkPoint_subtract_operator">operator-(const SkPoint& a, const SkPoint& b)</a> <a href="#SkPoint_subtractfrom_operator">operator-=(const SkVector& v)</a> <a href="#SkIPoint_minus_operator">SkIPoint::operator-() const</a> 748 749--- 750 751<a name="SkPoint_addto_operator"></a> 752## operator+= 753 754<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 755void operator+=(const SkVector& v) 756</pre> 757 758Adds <a href="SkPoint_Reference#Vector">Vector</a> <a href="#SkPoint_addto_operator_v">v</a> to <a href="#Point">Point</a>. Sets <a href="#Point">Point</a> to: 759(<a href="#SkPoint_fX">fX</a> + <a href="#SkPoint_addto_operator_v">v</a>.<a href="#SkPoint_fX">fX</a>, <a href="#SkPoint_fY">fY</a> + <a href="#SkPoint_addto_operator_v">v</a>.<a href="#SkPoint_fY">fY</a>). 760 761### Parameters 762 763<table> <tr> <td><a name="SkPoint_addto_operator_v"> <code><strong>v </strong></code> </a></td> <td> 764<a href="SkPoint_Reference#Vector">Vector</a> to add</td> 765 </tr> 766</table> 767 768### Example 769 770<div><fiddle-embed name="8b4e79109e2381345258cb744881b20c"></fiddle-embed></div> 771 772### See Also 773 774<a href="#SkPoint_offset">offset</a> <a href="#SkPoint_add_operator">operator+(const SkPoint& a, const SkVector& b)</a> <a href="#SkIPoint_addto_operator">SkIPoint::operator+=(const SkIVector& v)</a> 775 776--- 777 778<a name="SkPoint_subtractfrom_operator"></a> 779## operator-= 780 781<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 782void operator-=(const SkVector& v) 783</pre> 784 785Subtracts <a href="SkPoint_Reference#Vector">Vector</a> <a href="#SkPoint_subtractfrom_operator_v">v</a> from <a href="#Point">Point</a>. Sets <a href="#Point">Point</a> to: 786(<a href="#SkPoint_fX">fX</a> - <a href="#SkPoint_subtractfrom_operator_v">v</a>.<a href="#SkPoint_fX">fX</a>, <a href="#SkPoint_fY">fY</a> - <a href="#SkPoint_subtractfrom_operator_v">v</a>.<a href="#SkPoint_fY">fY</a>). 787 788### Parameters 789 790<table> <tr> <td><a name="SkPoint_subtractfrom_operator_v"> <code><strong>v </strong></code> </a></td> <td> 791<a href="SkPoint_Reference#Vector">Vector</a> to subtract</td> 792 </tr> 793</table> 794 795### Example 796 797<div><fiddle-embed name="86c0399704d8dff4091bf87b8d87d40b"></fiddle-embed></div> 798 799### See Also 800 801<a href="#SkPoint_offset">offset</a> <a href="#SkPoint_subtract_operator">operator-(const SkPoint& a, const SkPoint& b)</a> <a href="#SkIPoint_subtractfrom_operator">SkIPoint::operator-=(const SkIVector& v)</a> 802 803--- 804 805<a name="SkPoint_multiply_operator"></a> 806## operator* 807 808<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 809SkPoint operator*(SkScalar scale) _const 810</pre> 811 812Returns <a href="#Point">Point</a> multiplied by scale. 813 814### Parameters 815 816<table> <tr> <td><a name="SkPoint_multiply_operator_scale"> <code><strong>scale </strong></code> </a></td> <td> 817<a href="#Scalar">Scalar</a> to multiply by</td> 818 </tr> 819</table> 820 821### Return Value 822 823<a href="#Point">Point</a> as (<a href="#SkPoint_fX">fX</a> * scale, <a href="#SkPoint_fY">fY</a> * scale) 824 825### Example 826 827<div><fiddle-embed name="35b3bc675779de043706ae4817ee950c"></fiddle-embed></div> 828 829### See Also 830 831<a href="#SkPoint_multiplyby_operator">operator*=(SkScalar scale)</a> <a href="#SkPoint_scale">scale</a><sup><a href="#SkPoint_scale_2">[2]</a></sup> <a href="#SkPoint_setLength">setLength</a><sup><a href="#SkPoint_setLength_2">[2]</a></sup> <a href="#SkPoint_setNormalize">setNormalize</a> 832 833--- 834 835<a name="SkPoint_multiplyby_operator"></a> 836## operator*= 837 838<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 839SkPoint& operator*=(SkScalar scale) 840</pre> 841 842Multiplies <a href="#Point">Point</a> by scale. Sets <a href="#Point">Point</a> to: 843(<a href="#SkPoint_fX">fX</a> * scale, <a href="#SkPoint_fY">fY</a> * scale) 844 845### Parameters 846 847<table> <tr> <td><a name="SkPoint_multiplyby_operator_scale"> <code><strong>scale </strong></code> </a></td> <td> 848<a href="#Scalar">Scalar</a> to multiply by</td> 849 </tr> 850</table> 851 852### Return Value 853 854reference to <a href="#Point">Point</a> 855 856### Example 857 858<div><fiddle-embed name="3ce3db36235d80dbac4d39504cf756da"></fiddle-embed></div> 859 860### See Also 861 862<a href="#SkPoint_multiply_operator">operator*(SkScalar scale) const</a> <a href="#SkPoint_scale">scale</a><sup><a href="#SkPoint_scale_2">[2]</a></sup> <a href="#SkPoint_setLength">setLength</a><sup><a href="#SkPoint_setLength_2">[2]</a></sup> <a href="#SkPoint_setNormalize">setNormalize</a> 863 864--- 865 866<a name="SkPoint_isFinite"></a> 867## isFinite 868 869<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 870bool isFinite() const 871</pre> 872 873Returns true if both <a href="#SkPoint_fX">fX</a> and <a href="#SkPoint_fY">fY</a> are measurable values. 874 875### Return Value 876 877true for values other than infinities and NaN 878 879### Example 880 881<div><fiddle-embed name="937cc166cc0e220f33fb82501141d0b3"> 882 883#### Example Output 884 885~~~~ 886pt: 0, -0 finite: true 887pt: -1, -2 finite: true 888pt: inf, 1 finite: false 889pt: nan, -1 finite: false 890~~~~ 891 892</fiddle-embed></div> 893 894### See Also 895 896<a href="#SkRect_isFinite">SkRect::isFinite</a> <a href="#SkPath_isFinite">SkPath::isFinite</a> 897 898--- 899 900<a name="SkPoint_equals"></a> 901## equals 902 903<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 904bool equals(SkScalar x, SkScalar y) const 905</pre> 906 907Returns true if <a href="#Point">Point</a> is equivalent to <a href="#Point">Point</a> constructed from (x, y). 908 909### Parameters 910 911<table> <tr> <td><a name="SkPoint_equals_x"> <code><strong>x </strong></code> </a></td> <td> 912value compared with <a href="#SkPoint_fX">fX</a></td> 913 </tr> <tr> <td><a name="SkPoint_equals_y"> <code><strong>y </strong></code> </a></td> <td> 914value compared with <a href="#SkPoint_fY">fY</a></td> 915 </tr> 916</table> 917 918### Return Value 919 920true if <a href="#Point">Point</a> equals (x, y) 921 922### Example 923 924<div><fiddle-embed name="4cecb878c8b66beffda051f26c00f817"> 925 926#### Example Output 927 928~~~~ 929pt: 0, -0 == pt 930pt: -1, -2 == pt 931pt: inf, 1 == pt 932pt: nan, -1 != pt 933~~~~ 934 935</fiddle-embed></div> 936 937### See Also 938 939<a href="#SkPoint_equal_operator">operator==(const SkPoint& a, const SkPoint& b)</a> 940 941--- 942 943<a name="SkPoint_equal_operator"></a> 944## operator== 945 946<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 947bool operator==(const SkPoint& a, const SkPoint& b) 948</pre> 949 950Returns true if <a href="#SkPoint_equal_operator_a">a</a> is equivalent to <a href="#SkPoint_equal_operator_b">b</a>. 951 952### Parameters 953 954<table> <tr> <td><a name="SkPoint_equal_operator_a"> <code><strong>a </strong></code> </a></td> <td> 955<a href="#Point">Point</a> to compare</td> 956 </tr> <tr> <td><a name="SkPoint_equal_operator_b"> <code><strong>b </strong></code> </a></td> <td> 957<a href="#Point">Point</a> to compare</td> 958 </tr> 959</table> 960 961### Return Value 962 963true if <a href="#SkPoint_equal_operator_a">a</a>.<a href="#SkPoint_fX">fX</a> == <a href="#SkPoint_equal_operator_b">b</a>.<a href="#SkPoint_fX">fX</a> and <a href="#SkPoint_equal_operator_a">a</a>.<a href="#SkPoint_fY">fY</a> == <a href="#SkPoint_equal_operator_b">b</a>.<a href="#SkPoint_fY">fY</a> 964 965### Example 966 967<div><fiddle-embed name="741f793334a48a35dadf4310d7ea52cb"> 968 969#### Example Output 970 971~~~~ 972pt: 0, -0 == pt 973pt: -1, -2 == pt 974pt: inf, 1 == pt 975pt: nan, -1 != pt 976~~~~ 977 978</fiddle-embed></div> 979 980### See Also 981 982<a href="#SkPoint_equals">equals</a> <a href="#SkPoint_notequal_operator">operator!=(const SkPoint& a, const SkPoint& b)</a> 983 984--- 985 986<a name="SkPoint_notequal_operator"></a> 987## operator!= 988 989<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 990bool operator!=(const SkPoint& a, const SkPoint& b) 991</pre> 992 993Returns true if <a href="#SkPoint_notequal_operator_a">a</a> is not equivalent to <a href="#SkPoint_notequal_operator_b">b</a>. 994 995### Parameters 996 997<table> <tr> <td><a name="SkPoint_notequal_operator_a"> <code><strong>a </strong></code> </a></td> <td> 998<a href="#Point">Point</a> to compare</td> 999 </tr> <tr> <td><a name="SkPoint_notequal_operator_b"> <code><strong>b </strong></code> </a></td> <td> 1000<a href="#Point">Point</a> to compare</td> 1001 </tr> 1002</table> 1003 1004### Return Value 1005 1006true if <a href="#SkPoint_notequal_operator_a">a</a>.<a href="#SkPoint_fX">fX</a> != <a href="#SkPoint_notequal_operator_b">b</a>.<a href="#SkPoint_fX">fX</a> or <a href="#SkPoint_notequal_operator_a">a</a>.<a href="#SkPoint_fY">fY</a> != <a href="#SkPoint_notequal_operator_b">b</a>.<a href="#SkPoint_fY">fY</a> 1007 1008### Example 1009 1010<div><fiddle-embed name="8fe8572685eaa617f25a5a6767a874dc"> 1011 1012#### Example Output 1013 1014~~~~ 1015pt: 0, -0 == pt 1016pt: -1, -2 == pt 1017pt: inf, 1 == pt 1018pt: nan, -1 != pt 1019~~~~ 1020 1021</fiddle-embed></div> 1022 1023### See Also 1024 1025<a href="#SkPoint_equal_operator">operator==(const SkPoint& a, const SkPoint& b)</a> <a href="#SkPoint_equals">equals</a> 1026 1027--- 1028 1029<a name="SkPoint_subtract_operator"></a> 1030## operator- 1031 1032<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 1033SkVector operator-(const SkPoint& a, const SkPoint& b) 1034</pre> 1035 1036Returns <a href="SkPoint_Reference#Vector">Vector</a> from <a href="#SkPoint_subtract_operator_b">b</a> to <a href="#SkPoint_subtract_operator_a">a</a>, computed as(<a href="#SkPoint_subtract_operator_a">a</a>.<a href="#SkPoint_fX">fX</a> - <a href="#SkPoint_subtract_operator_b">b</a>.<a href="#SkPoint_fX">fX</a>, <a href="#SkPoint_subtract_operator_a">a</a>.<a href="#SkPoint_fY">fY</a> - <a href="#SkPoint_subtract_operator_b">b</a>.<a href="#SkPoint_fY">fY</a>). 1037 1038Can also be used to subtract <a href="SkPoint_Reference#Vector">Vector</a> from <a href="#Point">Point</a>, returning <a href="#Point">Point</a>. 1039Can also be used to subtract <a href="SkPoint_Reference#Vector">Vector</a> from <a href="SkPoint_Reference#Vector">Vector</a>, returning <a href="SkPoint_Reference#Vector">Vector</a>. 1040 1041### Parameters 1042 1043<table> <tr> <td><a name="SkPoint_subtract_operator_a"> <code><strong>a </strong></code> </a></td> <td> 1044<a href="#Point">Point</a> to subtract from</td> 1045 </tr> <tr> <td><a name="SkPoint_subtract_operator_b"> <code><strong>b </strong></code> </a></td> <td> 1046<a href="#Point">Point</a> to subtract</td> 1047 </tr> 1048</table> 1049 1050### Return Value 1051 1052<a href="SkPoint_Reference#Vector">Vector</a> from <a href="#SkPoint_subtract_operator_b">b</a> to <a href="#SkPoint_subtract_operator_a">a</a> 1053 1054### Example 1055 1056<div><fiddle-embed name="b6c4943ecd0b2dccf9d220b8944009e0"></fiddle-embed></div> 1057 1058### See Also 1059 1060<a href="#SkPoint_subtractfrom_operator">operator-=(const SkVector& v)</a> <a href="#SkPoint_offset">offset</a> 1061 1062--- 1063 1064<a name="SkPoint_add_operator"></a> 1065## operator+ 1066 1067<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 1068SkPoint operator+(const SkPoint& a, const SkVector& b) 1069</pre> 1070 1071Returns <a href="#Point">Point</a> resulting from <a href="#Point">Point</a> <a href="#SkPoint_add_operator_a">a</a> offset by <a href="SkPoint_Reference#Vector">Vector</a> <a href="#SkPoint_add_operator_b">b</a>, computed as: 1072(<a href="#SkPoint_add_operator_a">a</a>.<a href="#SkPoint_fX">fX</a> + <a href="#SkPoint_add_operator_b">b</a>.<a href="#SkPoint_fX">fX</a>, <a href="#SkPoint_add_operator_a">a</a>.<a href="#SkPoint_fY">fY</a> + <a href="#SkPoint_add_operator_b">b</a>.<a href="#SkPoint_fY">fY</a>). 1073 1074Can also be used to offset <a href="#Point">Point</a> <a href="#SkPoint_add_operator_b">b</a> by <a href="SkPoint_Reference#Vector">Vector</a> <a href="#SkPoint_add_operator_a">a</a>, returning <a href="#Point">Point</a>. 1075Can also be used to add <a href="SkPoint_Reference#Vector">Vector</a> to <a href="SkPoint_Reference#Vector">Vector</a>, returning <a href="SkPoint_Reference#Vector">Vector</a>. 1076 1077### Parameters 1078 1079<table> <tr> <td><a name="SkPoint_add_operator_a"> <code><strong>a </strong></code> </a></td> <td> 1080<a href="#Point">Point</a> or <a href="SkPoint_Reference#Vector">Vector</a> to add to</td> 1081 </tr> <tr> <td><a name="SkPoint_add_operator_b"> <code><strong>b </strong></code> </a></td> <td> 1082<a href="#Point">Point</a> or <a href="SkPoint_Reference#Vector">Vector</a> to add</td> 1083 </tr> 1084</table> 1085 1086### Return Value 1087 1088<a href="#Point">Point</a> equal to <a href="#SkPoint_add_operator_a">a</a> offset by <a href="#SkPoint_add_operator_b">b</a> 1089 1090### Example 1091 1092<div><fiddle-embed name="911a84253dfec4dabf94dbe3c71766f0"></fiddle-embed></div> 1093 1094### See Also 1095 1096<a href="#SkPoint_addto_operator">operator+=(const SkVector& v)</a> <a href="#SkPoint_offset">offset</a> 1097 1098--- 1099 1100<a name="SkPoint_Length"></a> 1101## Length 1102 1103<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 1104static SkScalar Length(SkScalar x, SkScalar y) 1105</pre> 1106 1107Returns the Euclidean_Distance from origin, computed as: 1108 1109<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 1110sqrt(x * x + y * y)</pre> 1111 1112. 1113 1114### Parameters 1115 1116<table> <tr> <td><a name="SkPoint_Length_x"> <code><strong>x </strong></code> </a></td> <td> 1117component of length</td> 1118 </tr> <tr> <td><a name="SkPoint_Length_y"> <code><strong>y </strong></code> </a></td> <td> 1119component of length</td> 1120 </tr> 1121</table> 1122 1123### Return Value 1124 1125straight-line distance to origin 1126 1127### Example 1128 1129<div><fiddle-embed name="c98773d8b4509969d78cb8121e4b77f6"></fiddle-embed></div> 1130 1131### See Also 1132 1133<a href="#SkPoint_length">length</a> <a href="#SkPoint_Distance">Distance</a> <a href="#SkPoint_setLength">setLength</a><sup><a href="#SkPoint_setLength_2">[2]</a></sup> 1134 1135--- 1136 1137<a name="SkPoint_Normalize"></a> 1138## Normalize 1139 1140<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 1141static SkScalar Normalize(SkVector* vec) 1142</pre> 1143 1144Scales (<a href="#SkPoint_Normalize_vec">vec</a>-><a href="#SkPoint_fX">fX</a>, <a href="#SkPoint_Normalize_vec">vec</a>-><a href="#SkPoint_fY">fY</a>) so that <a href="#SkPoint_length">length</a> returns one, while preserving ratio of <a href="#SkPoint_Normalize_vec">vec</a>-><a href="#SkPoint_fX">fX</a> to <a href="#SkPoint_Normalize_vec">vec</a>-><a href="#SkPoint_fY">fY</a>, 1145if possible. If original length is nearly zero, sets <a href="#SkPoint_Normalize_vec">vec</a> to (0, 0) and returns zero; 1146otherwise, returns length of <a href="#SkPoint_Normalize_vec">vec</a> before <a href="#SkPoint_Normalize_vec">vec</a> is scaled. 1147 1148Returned prior length may be <a href="undocumented#SK_ScalarInfinity">SK ScalarInfinity</a> if it can not be represented by <a href="undocumented#SkScalar">SkScalar</a>. 1149 1150Note that <a href="#SkPoint_normalize">normalize</a> is faster if prior length is not required. 1151 1152### Parameters 1153 1154<table> <tr> <td><a name="SkPoint_Normalize_vec"> <code><strong>vec </strong></code> </a></td> <td> 1155normalized to unit length</td> 1156 </tr> 1157</table> 1158 1159### Return Value 1160 1161original <a href="#SkPoint_Normalize_vec">vec</a> length 1162 1163### Example 1164 1165<div><fiddle-embed name="60a08f3ce75374fc815384616d114df7"></fiddle-embed></div> 1166 1167### See Also 1168 1169<a href="#SkPoint_normalize">normalize</a> <a href="#SkPoint_setLength">setLength</a><sup><a href="#SkPoint_setLength_2">[2]</a></sup> <a href="#SkPoint_Length">Length</a> 1170 1171--- 1172 1173<a name="SkPoint_Distance"></a> 1174## Distance 1175 1176<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 1177static SkScalar Distance(const SkPoint& a, const SkPoint& b) 1178</pre> 1179 1180Returns the Euclidean_Distance between <a href="#SkPoint_Distance_a">a</a> and <a href="#SkPoint_Distance_b">b</a>. 1181 1182### Parameters 1183 1184<table> <tr> <td><a name="SkPoint_Distance_a"> <code><strong>a </strong></code> </a></td> <td> 1185line end point</td> 1186 </tr> <tr> <td><a name="SkPoint_Distance_b"> <code><strong>b </strong></code> </a></td> <td> 1187line end point</td> 1188 </tr> 1189</table> 1190 1191### Return Value 1192 1193straight-line distance from <a href="#SkPoint_Distance_a">a</a> to <a href="#SkPoint_Distance_b">b</a> 1194 1195### Example 1196 1197<div><fiddle-embed name="9e0a2de2eb94dba4521d733e73f2bda5"></fiddle-embed></div> 1198 1199### See Also 1200 1201<a href="#SkPoint_length">length</a> <a href="#SkPoint_setLength">setLength</a><sup><a href="#SkPoint_setLength_2">[2]</a></sup> 1202 1203--- 1204 1205<a name="SkPoint_DotProduct"></a> 1206## DotProduct 1207 1208<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 1209static SkScalar DotProduct(const SkVector& a, const SkVector& b) 1210</pre> 1211 1212Returns the dot product of <a href="SkPoint_Reference#Vector">Vector</a> <a href="#SkPoint_DotProduct_a">a</a> and <a href="SkPoint_Reference#Vector">Vector</a> <a href="#SkPoint_DotProduct_b">b</a>. 1213 1214### Parameters 1215 1216<table> <tr> <td><a name="SkPoint_DotProduct_a"> <code><strong>a </strong></code> </a></td> <td> 1217left side of dot product</td> 1218 </tr> <tr> <td><a name="SkPoint_DotProduct_b"> <code><strong>b </strong></code> </a></td> <td> 1219right side of dot product</td> 1220 </tr> 1221</table> 1222 1223### Return Value 1224 1225product of input magnitudes and cosine of the angle between them 1226 1227### Example 1228 1229<div><fiddle-embed name="496db0131a003162faba7d7f98b30340"></fiddle-embed></div> 1230 1231### See Also 1232 1233<a href="#SkPoint_dot">dot</a> <a href="#SkPoint_CrossProduct">CrossProduct</a> 1234 1235--- 1236 1237<a name="SkPoint_CrossProduct"></a> 1238## CrossProduct 1239 1240<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 1241static SkScalar CrossProduct(const SkVector& a, const SkVector& b) 1242</pre> 1243 1244Returns the cross product of <a href="SkPoint_Reference#Vector">Vector</a> <a href="#SkPoint_CrossProduct_a">a</a> and <a href="SkPoint_Reference#Vector">Vector</a> <a href="#SkPoint_CrossProduct_b">b</a>. 1245 1246<a href="#SkPoint_CrossProduct_a">a</a> and <a href="#SkPoint_CrossProduct_b">b</a> form three-dimensional vectors with z equal to zero. The cross product 1247is <a href="#SkPoint_CrossProduct_a">a</a> three-dimensional vector with x and y equal to zero. The cross product z 1248term equals the returned value. 1249 1250### Parameters 1251 1252<table> <tr> <td><a name="SkPoint_CrossProduct_a"> <code><strong>a </strong></code> </a></td> <td> 1253left side of cross product</td> 1254 </tr> <tr> <td><a name="SkPoint_CrossProduct_b"> <code><strong>b </strong></code> </a></td> <td> 1255right side of cross product</td> 1256 </tr> 1257</table> 1258 1259### Return Value 1260 1261area spanned by <a href="#Vector">Vectors</a> signed by angle direction 1262 1263### Example 1264 1265<div><fiddle-embed name="8b8a4cd8a29d22bb9c5e63b70357bd65"></fiddle-embed></div> 1266 1267### See Also 1268 1269<a href="#SkPoint_cross">cross</a> <a href="#SkPoint_DotProduct">DotProduct</a> 1270 1271--- 1272 1273<a name="SkPoint_cross"></a> 1274## cross 1275 1276<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 1277SkScalar cross(const SkVector& vec) const 1278</pre> 1279 1280Returns the cross product of <a href="SkPoint_Reference#Vector">Vector</a> and <a href="#SkPoint_cross_vec">vec</a>. 1281 1282<a href="SkPoint_Reference#Vector">Vector</a> and <a href="#SkPoint_cross_vec">vec</a> form three-dimensional vectors with z equal to zero. The 1283cross product is a three-dimensional vector with x and y equal to zero. 1284The cross product z term equals the returned value. 1285 1286### Parameters 1287 1288<table> <tr> <td><a name="SkPoint_cross_vec"> <code><strong>vec </strong></code> </a></td> <td> 1289right side of cross product</td> 1290 </tr> 1291</table> 1292 1293### Return Value 1294 1295area spanned by <a href="#Vector">Vectors</a> signed by angle direction 1296 1297### Example 1298 1299<div><fiddle-embed name="0bc7b3997357e499817278b78bdfbf1d"></fiddle-embed></div> 1300 1301### See Also 1302 1303<a href="#SkPoint_CrossProduct">CrossProduct</a> <a href="#SkPoint_dot">dot</a> 1304 1305--- 1306 1307<a name="SkPoint_dot"></a> 1308## dot 1309 1310<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 1311SkScalar dot(const SkVector& vec) const 1312</pre> 1313 1314Returns the dot product of <a href="SkPoint_Reference#Vector">Vector</a> and <a href="SkPoint_Reference#Vector">Vector</a> <a href="#SkPoint_dot_vec">vec</a>. 1315 1316### Parameters 1317 1318<table> <tr> <td><a name="SkPoint_dot_vec"> <code><strong>vec </strong></code> </a></td> <td> 1319right side of dot product</td> 1320 </tr> 1321</table> 1322 1323### Return Value 1324 1325product of input magnitudes and cosine of the angle between them 1326 1327### Example 1328 1329<div><fiddle-embed name="56d01ccfedd71d3c504b09afa2875d38"></fiddle-embed></div> 1330 1331### See Also 1332 1333<a href="#SkPoint_DotProduct">DotProduct</a> <a href="#SkPoint_cross">cross</a> 1334 1335--- 1336 1337# <a name="Vector"></a> Vector 1338