This is an automated email from the ASF dual-hosted git repository. jiayu pushed a commit to branch branch-1.8.1 in repository https://gitbox.apache.org/repos/asf/sedona.git
commit f299498e73afb1ecc103c91cacc15d89a9a5df5a Author: Jia Yu <[email protected]> AuthorDate: Fri Mar 6 22:18:53 2026 -0700 [DOCS] Add SVG visuals for raster affine transformation functions (Phase 13) (#2697) --- docs/api/sql/Raster-Accessors/RS_GeoReference.md | 2 + .../sql/Raster-Accessors/RS_RasterToWorldCoordX.md | 2 + .../sql/Raster-Accessors/RS_RasterToWorldCoordY.md | 2 + docs/api/sql/Raster-Accessors/RS_Rotation.md | 2 + docs/api/sql/Raster-Accessors/RS_ScaleX.md | 2 + docs/api/sql/Raster-Accessors/RS_ScaleY.md | 2 + docs/api/sql/Raster-Accessors/RS_SkewX.md | 2 + docs/api/sql/Raster-Accessors/RS_SkewY.md | 2 + docs/api/sql/Raster-Accessors/RS_UpperLeftX.md | 2 + docs/api/sql/Raster-Accessors/RS_UpperLeftY.md | 2 + .../sql/Raster-Accessors/RS_WorldToRasterCoordX.md | 6 +- .../sql/Raster-Accessors/RS_WorldToRasterCoordY.md | 2 + .../api/sql/Raster-Operators/RS_SetGeoReference.md | 2 + docs/api/sql/Raster-affine-transformation.md | 2 + docs/image/RS_GeoReference/RS_GeoReference.svg | 12 + .../RS_RasterToWorldCoordX.svg | 11 + .../RS_RasterToWorldCoordY.svg | 11 + docs/image/RS_Rotation/RS_Rotation.svg | 11 + docs/image/RS_ScaleX/RS_ScaleX.svg | 14 + docs/image/RS_ScaleY/RS_ScaleY.svg | 14 + .../RS_SetGeoReference/RS_SetGeoReference.svg | 284 +++++++++++++++++++++ docs/image/RS_SkewX/RS_SkewX.svg | 30 +++ docs/image/RS_SkewY/RS_SkewY.svg | 30 +++ docs/image/RS_UpperLeftX/RS_UpperLeftX.svg | 12 + docs/image/RS_UpperLeftY/RS_UpperLeftY.svg | 12 + .../RS_WorldToRasterCoordX.svg | 12 + .../RS_WorldToRasterCoordY.svg | 13 + .../Raster_Affine_Transformation.svg | 20 ++ 28 files changed, 516 insertions(+), 2 deletions(-) diff --git a/docs/api/sql/Raster-Accessors/RS_GeoReference.md b/docs/api/sql/Raster-Accessors/RS_GeoReference.md index bc289b689b..1fdea026c8 100644 --- a/docs/api/sql/Raster-Accessors/RS_GeoReference.md +++ b/docs/api/sql/Raster-Accessors/RS_GeoReference.md @@ -46,6 +46,8 @@ For more information about ScaleX, ScaleY, SkewX, SkewY, please refer to the [Af The `sample()` function is only there to reduce the data sent to `collect()`, you may also use `filter()` if that's appropriate. + + Format: `RS_GeoReference(raster: Raster, format: String = "GDAL")` Return type: `String` diff --git a/docs/api/sql/Raster-Accessors/RS_RasterToWorldCoordX.md b/docs/api/sql/Raster-Accessors/RS_RasterToWorldCoordX.md index a6efc4cd6d..4c718e6ba0 100644 --- a/docs/api/sql/Raster-Accessors/RS_RasterToWorldCoordX.md +++ b/docs/api/sql/Raster-Accessors/RS_RasterToWorldCoordX.md @@ -21,6 +21,8 @@ Introduction: Returns the upper left X coordinate of the given row and column of the given raster geometric units of the geo-referenced raster. If any out of bounds values are given, the X coordinate of the assumed point considering existing raster pixel size and skew values will be returned. + + Format: `RS_RasterToWorldCoordX(raster: Raster, colX: Integer, rowY: Integer)` Return type: `Double` diff --git a/docs/api/sql/Raster-Accessors/RS_RasterToWorldCoordY.md b/docs/api/sql/Raster-Accessors/RS_RasterToWorldCoordY.md index 3ffc4fb874..47483fcfc3 100644 --- a/docs/api/sql/Raster-Accessors/RS_RasterToWorldCoordY.md +++ b/docs/api/sql/Raster-Accessors/RS_RasterToWorldCoordY.md @@ -21,6 +21,8 @@ Introduction: Returns the upper left Y coordinate of the given row and column of the given raster geometric units of the geo-referenced raster. If any out of bounds values are given, the Y coordinate of the assumed point considering existing raster pixel size and skew values will be returned. + + Format: `RS_RasterToWorldCoordY(raster: Raster, colX: Integer, rowY: Integer)` Return type: `Double` diff --git a/docs/api/sql/Raster-Accessors/RS_Rotation.md b/docs/api/sql/Raster-Accessors/RS_Rotation.md index f6d46d2484..fee0ba5442 100644 --- a/docs/api/sql/Raster-Accessors/RS_Rotation.md +++ b/docs/api/sql/Raster-Accessors/RS_Rotation.md @@ -21,6 +21,8 @@ Introduction: Returns the uniform rotation of the raster in radian. + + Format: `RS_Rotation(raster: Raster)` Return type: `Double` diff --git a/docs/api/sql/Raster-Accessors/RS_ScaleX.md b/docs/api/sql/Raster-Accessors/RS_ScaleX.md index 1526037903..5eedfb0105 100644 --- a/docs/api/sql/Raster-Accessors/RS_ScaleX.md +++ b/docs/api/sql/Raster-Accessors/RS_ScaleX.md @@ -29,6 +29,8 @@ Introduction: Returns the pixel width of the raster in CRS units. For more information about ScaleX, ScaleY, SkewX, SkewY, please refer to the [Affine Transformations](../Raster-affine-transformation.md) section. + + Format: `RS_ScaleX(raster: Raster)` Return type: `Double` diff --git a/docs/api/sql/Raster-Accessors/RS_ScaleY.md b/docs/api/sql/Raster-Accessors/RS_ScaleY.md index c7db3b03b3..66df1f7117 100644 --- a/docs/api/sql/Raster-Accessors/RS_ScaleY.md +++ b/docs/api/sql/Raster-Accessors/RS_ScaleY.md @@ -29,6 +29,8 @@ Introduction: Returns the pixel height of the raster in CRS units. For more information about ScaleX, ScaleY, SkewX, SkewY, please refer to the [Affine Transformations](../Raster-affine-transformation.md) section. + + Format: `RS_ScaleY(raster: Raster)` Return type: `Double` diff --git a/docs/api/sql/Raster-Accessors/RS_SkewX.md b/docs/api/sql/Raster-Accessors/RS_SkewX.md index 6449a453b3..fb5524fb50 100644 --- a/docs/api/sql/Raster-Accessors/RS_SkewX.md +++ b/docs/api/sql/Raster-Accessors/RS_SkewX.md @@ -21,6 +21,8 @@ Introduction: Returns the X skew or rotation parameter. + + Format: `RS_SkewX(raster: Raster)` Return type: `Double` diff --git a/docs/api/sql/Raster-Accessors/RS_SkewY.md b/docs/api/sql/Raster-Accessors/RS_SkewY.md index dc93548820..142718903f 100644 --- a/docs/api/sql/Raster-Accessors/RS_SkewY.md +++ b/docs/api/sql/Raster-Accessors/RS_SkewY.md @@ -21,6 +21,8 @@ Introduction: Returns the Y skew or rotation parameter. + + Format: `RS_SkewY(raster: Raster)` Return type: `Double` diff --git a/docs/api/sql/Raster-Accessors/RS_UpperLeftX.md b/docs/api/sql/Raster-Accessors/RS_UpperLeftX.md index 273782de4d..35796777da 100644 --- a/docs/api/sql/Raster-Accessors/RS_UpperLeftX.md +++ b/docs/api/sql/Raster-Accessors/RS_UpperLeftX.md @@ -21,6 +21,8 @@ Introduction: Returns the X coordinate of the upper-left corner of the raster. + + Format: `RS_UpperLeftX(raster: Raster)` Return type: `Double` diff --git a/docs/api/sql/Raster-Accessors/RS_UpperLeftY.md b/docs/api/sql/Raster-Accessors/RS_UpperLeftY.md index 9f963ebe07..2c836f1f41 100644 --- a/docs/api/sql/Raster-Accessors/RS_UpperLeftY.md +++ b/docs/api/sql/Raster-Accessors/RS_UpperLeftY.md @@ -21,6 +21,8 @@ Introduction: Returns the Y coordinate of the upper-left corner of the raster. + + Format: `RS_UpperLeftY(raster: Raster)` Return type: `Double` diff --git a/docs/api/sql/Raster-Accessors/RS_WorldToRasterCoordX.md b/docs/api/sql/Raster-Accessors/RS_WorldToRasterCoordX.md index 10840dc4aa..e575c015b1 100644 --- a/docs/api/sql/Raster-Accessors/RS_WorldToRasterCoordX.md +++ b/docs/api/sql/Raster-Accessors/RS_WorldToRasterCoordX.md @@ -21,11 +21,13 @@ Introduction: Returns the X coordinate of the grid coordinate of the given world coordinates as an integer. + + Format: -`RS_WorldToRasterCoord(raster: Raster, point: Geometry)` +`RS_WorldToRasterCoordX(raster: Raster, point: Geometry)` -`RS_WorldToRasterCoord(raster: Raster, x: Double, y: Double)` +`RS_WorldToRasterCoordX(raster: Raster, x: Double, y: Double)` Return type: `Integer` diff --git a/docs/api/sql/Raster-Accessors/RS_WorldToRasterCoordY.md b/docs/api/sql/Raster-Accessors/RS_WorldToRasterCoordY.md index 69fa2f22fe..2aa488d9c2 100644 --- a/docs/api/sql/Raster-Accessors/RS_WorldToRasterCoordY.md +++ b/docs/api/sql/Raster-Accessors/RS_WorldToRasterCoordY.md @@ -21,6 +21,8 @@ Introduction: Returns the Y coordinate of the grid coordinate of the given world coordinates as an integer. + + Format: `RS_WorldToRasterCoordY(raster: Raster, point: Geometry)` diff --git a/docs/api/sql/Raster-Operators/RS_SetGeoReference.md b/docs/api/sql/Raster-Operators/RS_SetGeoReference.md index ba01020958..ad61c91bd3 100644 --- a/docs/api/sql/Raster-Operators/RS_SetGeoReference.md +++ b/docs/api/sql/Raster-Operators/RS_SetGeoReference.md @@ -24,6 +24,8 @@ Default format is `GDAL`. If all 6 parameters are not provided then will return For more information about ScaleX, ScaleY, SkewX, SkewY, please refer to the [Affine Transformations](../Raster-affine-transformation.md) section. + + Format: ``` diff --git a/docs/api/sql/Raster-affine-transformation.md b/docs/api/sql/Raster-affine-transformation.md index bb6d79c244..a15b56fe8d 100644 --- a/docs/api/sql/Raster-affine-transformation.md +++ b/docs/api/sql/Raster-affine-transformation.md @@ -19,6 +19,8 @@ This page explains the basic concepts of Affine Transformation in Sedona Raster. + + ## Affine Transformations Affine transformations are a fundamental concept in computer graphics, geometry, and image processing that involve manipulating an object in a way that preserves lines and parallelism (but not necessarily distances and angles). These transformations are linear transformations followed by a translation, which means they can translate, scale, rotate, and shear objects without altering the relative arrangement of points, lines, or planes. diff --git a/docs/image/RS_GeoReference/RS_GeoReference.svg b/docs/image/RS_GeoReference/RS_GeoReference.svg new file mode 100644 index 0000000000..d28500c204 --- /dev/null +++ b/docs/image/RS_GeoReference/RS_GeoReference.svg @@ -0,0 +1,12 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="780" height="420" viewBox="0 0 780 420" font-family="Arial, Helvetica, sans-serif"> +<rect width="780" height="420" fill="white"/> +<text x="390" y="28" text-anchor="middle" font-size="17" fill="#333" font-weight="bold" font-style="normal">RS_GeoReference</text><text x="390" y="48" text-anchor="middle" font-size="12" fill="#666" font-weight="normal" font-style="normal">Returns georeference metadata as a string (GDAL or ESRI format)</text><polygon points="60.0,90.0 300.0,114.0 330.0,279.0 90.0,255.0" fill="#E3F2FD" stroke="#1565C0" stroke-width="1.5" opacity="1.0"/> +<line x1="120.0" y1="96.0" x2="150.0" y2="261.0" stroke="#1565C0" stroke-width="0.8" opacity="0.4"/> +<line x1="180.0" y1="102.0" x2="210.0" y2="267.0" stroke="#1565C0" stroke-width="0.8" opacity="0.4"/> +<line x1="240.0" y1="108.0" x2="270.0" y2="273.0" stroke="#1565C0" stroke-width="0.8" opacity="0.4"/> +<line x1="70.0" y1="145.0" x2="310.0" y2="169.0" stroke="#1565C0" stroke-width="0.8" opacity="0.4"/> +<line x1="80.0" y1="200.0" x2="320.0" y2="224.0" stroke="#1565C0" stroke-width="0.8" opacity="0.4"/><circle cx="60" cy="90" r="4" fill="#FF8F00"/><text x="55" y="80" text-anchor="end" font-size="10" fill="#FF8F00" font-weight="bold" font-style="normal">Origin</text><line x1="60" y1="75" x2="120" y2="75" stroke="#1565C0" stroke-width="1.5"/> +<polygon points="120,75 115.8,77.7 115.8,72.3" fill="#1565C0"/> +<polygon points="60,75 64.2,72.3 64.2,77.7" fill="#1565C0"/><text x="90.0" y="67" text-anchor="middle" font-size="10" fill="#1565C0" font-weight="bold" font-style="normal">ScaleX</text><line x1="45" y1="90" x2="45" y2="145" stroke="#1565C0" stroke-width="1.5"/> +<polygon points="45,145 42.3,140.8 47.7,140.8" fill="#1565C0"/> +<polygon points="45,90 47.7,94.2 42.3,94.2" fill="#1565C0"/><text x="40" y="117.5" text-anchor="end" font-size="10" fill="#1565C0" font-weight="bold" font-style="normal">ScaleY</text><text x="470" y="85" text-anchor="middle" font-size="13" fill="#333" font-weight="bold" font-style="normal">GDAL Format (default)</text><rect x="380" y="95" width="195" height="160" fill="#F5F5F5" stroke="#666" stroke-width="1" rx="4"/><text x="395" y="117" text-anchor="start" font-size="13" fill="#1565C0" f [...] \ No newline at end of file diff --git a/docs/image/RS_RasterToWorldCoordX/RS_RasterToWorldCoordX.svg b/docs/image/RS_RasterToWorldCoordX/RS_RasterToWorldCoordX.svg new file mode 100644 index 0000000000..fc36d32f8d --- /dev/null +++ b/docs/image/RS_RasterToWorldCoordX/RS_RasterToWorldCoordX.svg @@ -0,0 +1,11 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="620" height="360" viewBox="0 0 620 360" font-family="Arial, Helvetica, sans-serif"> +<rect width="620" height="360" fill="white"/> +<text x="310" y="28" text-anchor="middle" font-size="17" fill="#333" font-weight="bold" font-style="normal">RS_RasterToWorldCoordX</text><text x="310" y="48" text-anchor="middle" font-size="12" fill="#666" font-weight="normal" font-style="normal">Returns the world X coordinate for a given grid column and row</text><rect x="60" y="80" width="275" height="180" fill="#E3F2FD" stroke="#1565C0" stroke-width="1.5"/> +<line x1="115" y1="80" x2="115" y2="260" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="170" y1="80" x2="170" y2="260" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="225" y1="80" x2="225" y2="260" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="280" y1="80" x2="280" y2="260" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="60" y1="125" x2="335" y2="125" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="60" y1="170" x2="335" y2="170" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="60" y1="215" x2="335" y2="215" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/><text x="87.5" y="74" text-anchor="middle" font-size="11" fill="#333" font-weight="bold" font-style="normal">1</text><text x="142.5" y="74" text-anchor="middle" font-size="11" fill="#333" font-weight="bold" font-style="normal">2</text><text x="197.5" y="74" text-anchor="middle" font-size="11" fill="#333" font-weight="bold" font-style="normal">3</text><text x="252.5" y="74" text-anchor="middle" fon [...] +<polygon points="390,150 383.0,153.9 383.5,145.3" fill="#333"/><rect x="400" y="110" width="200" height="100" fill="#F5F5F5" stroke="#666" stroke-width="1" rx="6"/><text x="500" y="135" text-anchor="middle" font-size="12" fill="#333" font-weight="bold" font-style="normal">World Coordinate</text><text x="500" y="162" text-anchor="middle" font-size="16" fill="#D32F2F" font-weight="bold" font-style="normal">X = -113</text><text x="500" y="185" text-anchor="middle" font-size="10" fill="#666" [...] \ No newline at end of file diff --git a/docs/image/RS_RasterToWorldCoordY/RS_RasterToWorldCoordY.svg b/docs/image/RS_RasterToWorldCoordY/RS_RasterToWorldCoordY.svg new file mode 100644 index 0000000000..cefa8fa58b --- /dev/null +++ b/docs/image/RS_RasterToWorldCoordY/RS_RasterToWorldCoordY.svg @@ -0,0 +1,11 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="620" height="360" viewBox="0 0 620 360" font-family="Arial, Helvetica, sans-serif"> +<rect width="620" height="360" fill="white"/> +<text x="310" y="28" text-anchor="middle" font-size="17" fill="#333" font-weight="bold" font-style="normal">RS_RasterToWorldCoordY</text><text x="310" y="48" text-anchor="middle" font-size="12" fill="#666" font-weight="normal" font-style="normal">Returns the world Y coordinate for a given grid column and row</text><rect x="60" y="80" width="275" height="180" fill="#E3F2FD" stroke="#1565C0" stroke-width="1.5"/> +<line x1="115" y1="80" x2="115" y2="260" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="170" y1="80" x2="170" y2="260" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="225" y1="80" x2="225" y2="260" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="280" y1="80" x2="280" y2="260" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="60" y1="125" x2="335" y2="125" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="60" y1="170" x2="335" y2="170" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="60" y1="215" x2="335" y2="215" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/><text x="87.5" y="74" text-anchor="middle" font-size="11" fill="#333" font-weight="bold" font-style="normal">1</text><text x="142.5" y="74" text-anchor="middle" font-size="11" fill="#333" font-weight="bold" font-style="normal">2</text><text x="197.5" y="74" text-anchor="middle" font-size="11" fill="#333" font-weight="bold" font-style="normal">3</text><text x="252.5" y="74" text-anchor="middle" fon [...] +<polygon points="390,150 388.0,157.8 382.1,151.5" fill="#333"/><rect x="400" y="110" width="200" height="100" fill="#F5F5F5" stroke="#666" stroke-width="1" rx="6"/><text x="500" y="135" text-anchor="middle" font-size="12" fill="#333" font-weight="bold" font-style="normal">World Coordinate</text><text x="500" y="162" text-anchor="middle" font-size="16" fill="#D32F2F" font-weight="bold" font-style="normal">Y = 34</text><text x="500" y="185" text-anchor="middle" font-size="10" fill="#666" f [...] \ No newline at end of file diff --git a/docs/image/RS_Rotation/RS_Rotation.svg b/docs/image/RS_Rotation/RS_Rotation.svg new file mode 100644 index 0000000000..b337a085de --- /dev/null +++ b/docs/image/RS_Rotation/RS_Rotation.svg @@ -0,0 +1,11 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="620" height="380" viewBox="0 0 620 380" font-family="Arial, Helvetica, sans-serif"> +<rect width="620" height="380" fill="white"/> +<text x="310" y="28" text-anchor="middle" font-size="17" fill="#333" font-weight="bold" font-style="normal">RS_Rotation</text><text x="310" y="48" text-anchor="middle" font-size="12" fill="#666" font-weight="normal" font-style="normal">Returns the uniform rotation of the raster in radians</text><line x1="200" y1="300" x2="550" y2="300" stroke="#333" stroke-width="1.5"/> +<polygon points="550,300 543.2,304.3 543.2,295.7" fill="#333"/><line x1="200" y1="300" x2="200" y2="65" stroke="#333" stroke-width="1.5"/> +<polygon points="200,65 204.3,71.8 195.7,71.8" fill="#333"/><text x="555" y="305" text-anchor="middle" font-size="13" fill="#333" font-weight="bold" font-style="normal">X</text><text x="188" y="60" text-anchor="middle" font-size="13" fill="#333" font-weight="bold" font-style="normal">Y</text><polygon points="230.0,240.0 429.4,147.0 499.1,296.6 299.7,389.5" fill="#E3F2FD" stroke="#1565C0" stroke-width="1.5" opacity="1.0"/> +<line x1="279.8" y1="216.8" x2="349.6" y2="366.3" stroke="#1565C0" stroke-width="0.8" opacity="0.4"/> +<line x1="329.7" y1="193.5" x2="399.4" y2="343.1" stroke="#1565C0" stroke-width="0.8" opacity="0.4"/> +<line x1="379.5" y1="170.3" x2="449.3" y2="319.8" stroke="#1565C0" stroke-width="0.8" opacity="0.4"/> +<line x1="253.2" y1="289.8" x2="452.6" y2="196.9" stroke="#1565C0" stroke-width="0.8" opacity="0.4"/> +<line x1="276.5" y1="339.7" x2="475.9" y2="246.7" stroke="#1565C0" stroke-width="0.8" opacity="0.4"/><circle cx="230" cy="240" r="5" fill="#FF8F00" stroke="white" stroke-width="1.5"/><path d="M 290.0 240.0 A 60 60 0 0 1 284.4 265.4" fill="none" stroke="#D32F2F" stroke-width="2"/><line x1="286.378467222199" y1="263.357095704442" x2="284.378467222199" y2="265.357095704442" stroke="#D32F2F" stroke-width="0.5"/> +<polygon points="284.378467222199,265.357095704442 285.7,259.5 290.2,264.0" fill="#D32F2F"/><line x1="230" y1="240" x2="310" y2="240" stroke="#666" stroke-width="1.2" stroke-dasharray="5,3"/><text x="306.1510885553548" y="256.882289887172" text-anchor="middle" font-size="16" fill="#D32F2F" font-weight="bold" font-style="italic">θ</text><rect x="380" y="100" width="200" height="65" fill="#F5F5F5" stroke="#666" stroke-width="1" rx="6"/><text x="480" y="122" text-anchor="middle" font-size=" [...] \ No newline at end of file diff --git a/docs/image/RS_ScaleX/RS_ScaleX.svg b/docs/image/RS_ScaleX/RS_ScaleX.svg new file mode 100644 index 0000000000..3558b8c9ea --- /dev/null +++ b/docs/image/RS_ScaleX/RS_ScaleX.svg @@ -0,0 +1,14 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="580" height="320" viewBox="0 0 580 320" font-family="Arial, Helvetica, sans-serif"> +<rect width="580" height="320" fill="white"/> +<text x="290" y="28" text-anchor="middle" font-size="17" fill="#333" font-weight="bold" font-style="normal">RS_ScaleX</text><text x="290" y="48" text-anchor="middle" font-size="12" fill="#666" font-weight="normal" font-style="normal">Returns the pixel width of the raster in CRS units</text><rect x="90" y="80" width="350" height="200" fill="#E3F2FD" stroke="#1565C0" stroke-width="1.5"/> +<line x1="160" y1="80" x2="160" y2="280" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="230" y1="80" x2="230" y2="280" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="300" y1="80" x2="300" y2="280" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="370" y1="80" x2="370" y2="280" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="90" y1="130" x2="440" y2="130" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="90" y1="180" x2="440" y2="180" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="90" y1="230" x2="440" y2="230" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/><line x1="90" y1="300" x2="160" y2="300" stroke="#D32F2F" stroke-width="2.2"/> +<polygon points="160,300 154.1,303.8 154.1,296.2" fill="#D32F2F"/> +<polygon points="90,300 95.9,296.2 95.9,303.8" fill="#D32F2F"/><text x="125.0" y="322" text-anchor="middle" font-size="12" fill="#D32F2F" font-weight="bold" font-style="normal">ScaleX = pixel width</text><text x="125.0" y="340" text-anchor="middle" font-size="10" fill="#666" font-weight="normal" font-style="normal">(in CRS units, e.g., degrees or meters)</text><line x1="90" y1="355" x2="440" y2="355" stroke="#1565C0" stroke-width="1.5"/> +<polygon points="440,355 434.1,358.8 434.1,351.2" fill="#1565C0"/> +<polygon points="90,355 95.9,351.2 95.9,358.8" fill="#1565C0"/><text x="265.0" y="373" text-anchor="middle" font-size="11" fill="#1565C0" font-weight="normal" font-style="normal">Width × ScaleX = 5 × ScaleX</text><line x1="90" y1="80" x2="90" y2="295" stroke="#D32F2F" stroke-width="1" stroke-dasharray="3,3"/><line x1="160" y1="80" x2="160" y2="295" stroke="#D32F2F" stroke-width="1" stroke-dasharray="3,3"/><text x="125.0" y="109.0" text-anchor="middle" font-size="10" fill="#1565C0" font-w [...] \ No newline at end of file diff --git a/docs/image/RS_ScaleY/RS_ScaleY.svg b/docs/image/RS_ScaleY/RS_ScaleY.svg new file mode 100644 index 0000000000..2c8d83731d --- /dev/null +++ b/docs/image/RS_ScaleY/RS_ScaleY.svg @@ -0,0 +1,14 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="580" height="340" viewBox="0 0 580 340" font-family="Arial, Helvetica, sans-serif"> +<rect width="580" height="340" fill="white"/> +<text x="290" y="28" text-anchor="middle" font-size="17" fill="#333" font-weight="bold" font-style="normal">RS_ScaleY</text><text x="290" y="48" text-anchor="middle" font-size="12" fill="#666" font-weight="normal" font-style="normal">Returns the pixel height of the raster in CRS units</text><rect x="140" y="75" width="240" height="225" fill="#E3F2FD" stroke="#1565C0" stroke-width="1.5"/> +<line x1="200" y1="75" x2="200" y2="300" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="260" y1="75" x2="260" y2="300" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="320" y1="75" x2="320" y2="300" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="140" y1="120" x2="380" y2="120" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="140" y1="165" x2="380" y2="165" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="140" y1="210" x2="380" y2="210" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="140" y1="255" x2="380" y2="255" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/><line x1="400" y1="75" x2="400" y2="120" stroke="#D32F2F" stroke-width="2.2"/> +<polygon points="400,120 396.2,114.1 403.8,114.1" fill="#D32F2F"/> +<polygon points="400,75 403.8,80.9 396.2,80.9" fill="#D32F2F"/><text x="410" y="101.5" text-anchor="start" font-size="12" fill="#D32F2F" font-weight="bold" font-style="normal">ScaleY</text><line x1="380" y1="75" x2="395" y2="75" stroke="#D32F2F" stroke-width="1" stroke-dasharray="3,3"/><line x1="380" y1="120" x2="395" y2="120" stroke="#D32F2F" stroke-width="1" stroke-dasharray="3,3"/><line x1="480" y1="75" x2="480" y2="300" stroke="#1565C0" stroke-width="1.5"/> +<polygon points="480,300 476.2,294.1 483.8,294.1" fill="#1565C0"/> +<polygon points="480,75 483.8,80.9 476.2,80.9" fill="#1565C0"/><text x="490" y="191.5" text-anchor="start" font-size="11" fill="#1565C0" font-weight="normal" font-style="normal">5 × ScaleY</text><text x="170.0" y="101.5" text-anchor="middle" font-size="10" fill="#1565C0" font-weight="bold" font-style="normal">row 1</text><text x="170.0" y="146.5" text-anchor="middle" font-size="10" fill="#1565C0" font-weight="bold" font-style="normal">row 2</text><text x="170.0" y="191.5" text-anchor="mi [...] \ No newline at end of file diff --git a/docs/image/RS_SetGeoReference/RS_SetGeoReference.svg b/docs/image/RS_SetGeoReference/RS_SetGeoReference.svg new file mode 100644 index 0000000000..3ea9201802 --- /dev/null +++ b/docs/image/RS_SetGeoReference/RS_SetGeoReference.svg @@ -0,0 +1,284 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="700" height="440" viewBox="0 0 700 440" font-family="Arial, Helvetica, sans-serif"> +<rect width="700" height="440" fill="white"/> +<text x="350" y="28" text-anchor="middle" font-size="17" fill="#333" font-weight="bold">RS_SetGeoReference</text> +<text x="350" y="48" text-anchor="middle" font-size="12" fill="#666">Sets the georeference metadata of a raster</text> +<text x="350" y="72" text-anchor="middle" font-size="13" fill="#333" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="1;1;0;0;0;0;0;0;0;0;0;0;0;0;1"/> + Original Georeference +</text> +<text x="350" y="72" text-anchor="middle" font-size="13" fill="#1565C0" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;1;1;0;0;0;0;0;0;0;0;0;0;0"/> + Step 1: ScaleX → 3 +</text> +<text x="350" y="72" text-anchor="middle" font-size="13" fill="#1565C0" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;1;1;0;0;0;0;0;0;0;0;0"/> + Step 2: ScaleY → 2 +</text> +<text x="350" y="72" text-anchor="middle" font-size="13" fill="#00796B" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;1;1;0;0;0;0;0;0;0"/> + Step 3: SkewX → 1.5 +</text> +<text x="350" y="72" text-anchor="middle" font-size="13" fill="#00796B" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;0;0;1;1;0;0;0;0;0"/> + Step 4: SkewY → 1.5 +</text> +<text x="350" y="72" text-anchor="middle" font-size="13" fill="#FF8F00" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;0;0;0;0;1;1;0;0;0"/> + Step 5: UpperLeftX → 22 +</text> +<text x="350" y="72" text-anchor="middle" font-size="13" fill="#FF8F00" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;0;0;0;0;0;0;1;1;0"/> + Step 6: UpperLeftY → 3 +</text> +<line x1="120" y1="345" x2="560" y2="345" stroke="#BBB" stroke-width="1"/> +<polygon points="560,345 554,348 554,342" fill="#BBB"/> +<text x="566" y="349" font-size="10" fill="#999" font-weight="bold">X</text> +<line x1="120" y1="345" x2="120" y2="70" stroke="#BBB" stroke-width="1"/> +<polygon points="120,70 124,76 116,76" fill="#BBB"/> +<text x="113" y="66" font-size="10" fill="#999" font-weight="bold">Y</text> +<path fill="#E3F2FD" stroke="#1565C0" stroke-width="2"> + <animate attributeName="d" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="M 200,100 L 350,100 L 350,250 L 200,250 Z;M 200,100 L 350,100 L 350,250 L 200,250 Z;M 200,100 L 380,100 L 380,250 L 200,250 Z;M 200,100 L 380,100 L 380,250 L 200,250 Z;M 200,100 L 380,100 L 380,274 L 200,274 Z;M 200,100 L 380,100 L 380,274 L 200,274 Z;M 200,100 L 380,100 L 410,274 L 230,274 Z;M 200,10 [...] +</path> +<path fill="none" stroke="#1565C0" stroke-width="0.8" opacity="0.5"> + <animate attributeName="d" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="M 250,100 L 250,250;M 250,100 L 250,250;M 260,100 L 260,250;M 260,100 L 260,250;M 260,100 L 260,274;M 260,100 L 260,274;M 260,100 L 290,274;M 260,100 L 290,274;M 260,108 L 290,282;M 260,108 L 290,282;M 275,108 L 305,282;M 275,108 L 305,282;M 275,113 L 305,287;M 275,113 L 305,287;M 250,100 L 250,250"/> +</path> +<path fill="none" stroke="#1565C0" stroke-width="0.8" opacity="0.5"> + <animate attributeName="d" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="M 300,100 L 300,250;M 300,100 L 300,250;M 320,100 L 320,250;M 320,100 L 320,250;M 320,100 L 320,274;M 320,100 L 320,274;M 320,100 L 350,274;M 320,100 L 350,274;M 320,116 L 350,290;M 320,116 L 350,290;M 335,116 L 365,290;M 335,116 L 365,290;M 335,121 L 365,295;M 335,121 L 365,295;M 300,100 L 300,250"/> +</path> +<path fill="none" stroke="#1565C0" stroke-width="0.8" opacity="0.5"> + <animate attributeName="d" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="M 200,150 L 350,150;M 200,150 L 350,150;M 200,150 L 380,150;M 200,150 L 380,150;M 200,158 L 380,158;M 200,158 L 380,158;M 210,158 L 390,158;M 210,158 L 390,158;M 210,158 L 390,182;M 210,158 L 390,182;M 225,158 L 405,182;M 225,158 L 405,182;M 225,163 L 405,187;M 225,163 L 405,187;M 200,150 L 350,150"/> +</path> +<path fill="none" stroke="#1565C0" stroke-width="0.8" opacity="0.5"> + <animate attributeName="d" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="M 200,200 L 350,200;M 200,200 L 350,200;M 200,200 L 380,200;M 200,200 L 380,200;M 200,216 L 380,216;M 200,216 L 380,216;M 220,216 L 400,216;M 220,216 L 400,216;M 220,216 L 400,240;M 220,216 L 400,240;M 235,216 L 415,240;M 235,216 L 415,240;M 235,221 L 415,245;M 235,221 L 415,245;M 200,200 L 350,200"/> +</path> +<text font-size="13" fill="#1565C0" font-weight="bold" text-anchor="middle"> + <animate attributeName="x" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="225.0;225.0;230.0;230.0;230.0;230.0;235.0;235.0;235.0;235.0;250.0;250.0;250.0;250.0;225.0"/> + <animate attributeName="y" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="125.0;125.0;125.0;125.0;129.0;129.0;129.0;129.0;133.0;133.0;133.0;133.0;138.0;138.0;125.0"/> + 42 +</text> +<text font-size="13" fill="#1565C0" font-weight="bold" text-anchor="middle"> + <animate attributeName="x" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="275.0;275.0;290.0;290.0;290.0;290.0;295.0;295.0;295.0;295.0;310.0;310.0;310.0;310.0;275.0"/> + <animate attributeName="y" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="125.0;125.0;125.0;125.0;129.0;129.0;129.0;129.0;141.0;141.0;141.0;141.0;146.0;146.0;125.0"/> + 87 +</text> +<text font-size="13" fill="#1565C0" font-weight="bold" text-anchor="middle"> + <animate attributeName="x" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="325.0;325.0;350.0;350.0;350.0;350.0;355.0;355.0;355.0;355.0;370.0;370.0;370.0;370.0;325.0"/> + <animate attributeName="y" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="125.0;125.0;125.0;125.0;129.0;129.0;129.0;129.0;149.0;149.0;149.0;149.0;154.0;154.0;125.0"/> + 15 +</text> +<text font-size="13" fill="#1565C0" font-weight="bold" text-anchor="middle"> + <animate attributeName="x" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="225.0;225.0;230.0;230.0;230.0;230.0;245.0;245.0;245.0;245.0;260.0;260.0;260.0;260.0;225.0"/> + <animate attributeName="y" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="175.0;175.0;175.0;175.0;187.0;187.0;187.0;187.0;191.0;191.0;191.0;191.0;196.0;196.0;175.0"/> + 63 +</text> +<text font-size="13" fill="#1565C0" font-weight="bold" text-anchor="middle"> + <animate attributeName="x" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="275.0;275.0;290.0;290.0;290.0;290.0;305.0;305.0;305.0;305.0;320.0;320.0;320.0;320.0;275.0"/> + <animate attributeName="y" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="175.0;175.0;175.0;175.0;187.0;187.0;187.0;187.0;199.0;199.0;199.0;199.0;204.0;204.0;175.0"/> + 29 +</text> +<text font-size="13" fill="#1565C0" font-weight="bold" text-anchor="middle"> + <animate attributeName="x" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="325.0;325.0;350.0;350.0;350.0;350.0;365.0;365.0;365.0;365.0;380.0;380.0;380.0;380.0;325.0"/> + <animate attributeName="y" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="175.0;175.0;175.0;175.0;187.0;187.0;187.0;187.0;207.0;207.0;207.0;207.0;212.0;212.0;175.0"/> + 51 +</text> +<text font-size="13" fill="#1565C0" font-weight="bold" text-anchor="middle"> + <animate attributeName="x" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="225.0;225.0;230.0;230.0;230.0;230.0;255.0;255.0;255.0;255.0;270.0;270.0;270.0;270.0;225.0"/> + <animate attributeName="y" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="225.0;225.0;225.0;225.0;245.0;245.0;245.0;245.0;249.0;249.0;249.0;249.0;254.0;254.0;225.0"/> + 8 +</text> +<text font-size="13" fill="#1565C0" font-weight="bold" text-anchor="middle"> + <animate attributeName="x" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="275.0;275.0;290.0;290.0;290.0;290.0;315.0;315.0;315.0;315.0;330.0;330.0;330.0;330.0;275.0"/> + <animate attributeName="y" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="225.0;225.0;225.0;225.0;245.0;245.0;245.0;245.0;257.0;257.0;257.0;257.0;262.0;262.0;225.0"/> + 94 +</text> +<text font-size="13" fill="#1565C0" font-weight="bold" text-anchor="middle"> + <animate attributeName="x" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="325.0;325.0;350.0;350.0;350.0;350.0;375.0;375.0;375.0;375.0;390.0;390.0;390.0;390.0;325.0"/> + <animate attributeName="y" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="225.0;225.0;225.0;225.0;245.0;245.0;245.0;245.0;265.0;265.0;265.0;265.0;270.0;270.0;225.0"/> + 36 +</text> +<circle r="5" fill="#FF8F00" stroke="white" stroke-width="1.5"> + <animate attributeName="cx" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="200;200;200;200;200;200;200;200;200;200;215;215;215;215;200"/> + <animate attributeName="cy" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="100;100;100;100;100;100;100;100;100;100;100;100;105;105;100"/> +</circle> +<text font-size="10" fill="#FF8F00" font-weight="bold"> + <animate attributeName="x" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="207;207;207;207;207;207;207;207;207;207;222;222;222;222;207"/> + <animate attributeName="y" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="93;93;93;93;93;93;93;93;93;93;93;93;98;98;93"/> + Origin +</text> +<rect x="130" y="370" width="440" height="60" fill="#FAFAFA" stroke="#E0E0E0" stroke-width="1" rx="6"/> +<text x="145" y="388" font-size="10" fill="#1565C0" font-weight="bold">ScaleX=</text> +<text x="188.5" y="388" font-size="11" fill="#1565C0" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="1;1;0;0;0;0;0;0;0;0;0;0;0;0;1"/> + 1 +</text> +<text x="188.5" y="388" font-size="11" fill="#D32F2F" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;1;1;0;0;0;0;0;0;0;0;0;0;0"/> + 3 +</text> +<text x="188.5" y="388" font-size="11" fill="#1565C0" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;1;1;0;0;0;0;0;0;0;0;0"/> + 3 +</text> +<text x="188.5" y="388" font-size="11" fill="#1565C0" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;1;1;0;0;0;0;0;0;0"/> + 3 +</text> +<text x="188.5" y="388" font-size="11" fill="#1565C0" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;0;0;1;1;0;0;0;0;0"/> + 3 +</text> +<text x="188.5" y="388" font-size="11" fill="#1565C0" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;0;0;0;0;1;1;0;0;0"/> + 3 +</text> +<text x="188.5" y="388" font-size="11" fill="#1565C0" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;0;0;0;0;0;0;1;1;0"/> + 3 +</text> +<text x="255" y="388" font-size="10" fill="#1565C0" font-weight="bold">ScaleY=</text> +<text x="298.5" y="388" font-size="11" fill="#1565C0" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="1;1;0;0;0;0;0;0;0;0;0;0;0;0;1"/> + -1 +</text> +<text x="298.5" y="388" font-size="11" fill="#1565C0" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;1;1;0;0;0;0;0;0;0;0;0;0;0"/> + -1 +</text> +<text x="298.5" y="388" font-size="11" fill="#D32F2F" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;1;1;0;0;0;0;0;0;0;0;0"/> + 2 +</text> +<text x="298.5" y="388" font-size="11" fill="#1565C0" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;1;1;0;0;0;0;0;0;0"/> + 2 +</text> +<text x="298.5" y="388" font-size="11" fill="#1565C0" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;0;0;1;1;0;0;0;0;0"/> + 2 +</text> +<text x="298.5" y="388" font-size="11" fill="#1565C0" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;0;0;0;0;1;1;0;0;0"/> + 2 +</text> +<text x="298.5" y="388" font-size="11" fill="#1565C0" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;0;0;0;0;0;0;1;1;0"/> + 2 +</text> +<text x="145" y="410" font-size="10" fill="#00796B" font-weight="bold">SkewX=</text> +<text x="183.0" y="410" font-size="11" fill="#00796B" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="1;1;0;0;0;0;0;0;0;0;0;0;0;0;1"/> + 0 +</text> +<text x="183.0" y="410" font-size="11" fill="#00796B" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;1;1;0;0;0;0;0;0;0;0;0;0;0"/> + 0 +</text> +<text x="183.0" y="410" font-size="11" fill="#00796B" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;1;1;0;0;0;0;0;0;0;0;0"/> + 0 +</text> +<text x="183.0" y="410" font-size="11" fill="#D32F2F" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;1;1;0;0;0;0;0;0;0"/> + 1.5 +</text> +<text x="183.0" y="410" font-size="11" fill="#00796B" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;0;0;1;1;0;0;0;0;0"/> + 1.5 +</text> +<text x="183.0" y="410" font-size="11" fill="#00796B" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;0;0;0;0;1;1;0;0;0"/> + 1.5 +</text> +<text x="183.0" y="410" font-size="11" fill="#00796B" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;0;0;0;0;0;0;1;1;0"/> + 1.5 +</text> +<text x="255" y="410" font-size="10" fill="#00796B" font-weight="bold">SkewY=</text> +<text x="293.0" y="410" font-size="11" fill="#00796B" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="1;1;0;0;0;0;0;0;0;0;0;0;0;0;1"/> + 0 +</text> +<text x="293.0" y="410" font-size="11" fill="#00796B" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;1;1;0;0;0;0;0;0;0;0;0;0;0"/> + 0 +</text> +<text x="293.0" y="410" font-size="11" fill="#00796B" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;1;1;0;0;0;0;0;0;0;0;0"/> + 0 +</text> +<text x="293.0" y="410" font-size="11" fill="#00796B" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;1;1;0;0;0;0;0;0;0"/> + 0 +</text> +<text x="293.0" y="410" font-size="11" fill="#D32F2F" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;0;0;1;1;0;0;0;0;0"/> + 1.5 +</text> +<text x="293.0" y="410" font-size="11" fill="#00796B" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;0;0;0;0;1;1;0;0;0"/> + 1.5 +</text> +<text x="293.0" y="410" font-size="11" fill="#00796B" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;0;0;0;0;0;0;1;1;0"/> + 1.5 +</text> +<text x="370" y="388" font-size="10" fill="#FF8F00" font-weight="bold">OriginX=</text> +<text x="419.0" y="388" font-size="11" fill="#FF8F00" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="1;1;0;0;0;0;0;0;0;0;0;0;0;0;1"/> + 0 +</text> +<text x="419.0" y="388" font-size="11" fill="#FF8F00" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;1;1;0;0;0;0;0;0;0;0;0;0;0"/> + 0 +</text> +<text x="419.0" y="388" font-size="11" fill="#FF8F00" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;1;1;0;0;0;0;0;0;0;0;0"/> + 0 +</text> +<text x="419.0" y="388" font-size="11" fill="#FF8F00" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;1;1;0;0;0;0;0;0;0"/> + 0 +</text> +<text x="419.0" y="388" font-size="11" fill="#FF8F00" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;0;0;1;1;0;0;0;0;0"/> + 0 +</text> +<text x="419.0" y="388" font-size="11" fill="#D32F2F" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;0;0;0;0;1;1;0;0;0"/> + 22 +</text> +<text x="419.0" y="388" font-size="11" fill="#FF8F00" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;0;0;0;0;0;0;1;1;0"/> + 22 +</text> +<text x="370" y="410" font-size="10" fill="#FF8F00" font-weight="bold">OriginY=</text> +<text x="419.0" y="410" font-size="11" fill="#FF8F00" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="1;1;0;0;0;0;0;0;0;0;0;0;0;0;1"/> + 0 +</text> +<text x="419.0" y="410" font-size="11" fill="#FF8F00" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;1;1;0;0;0;0;0;0;0;0;0;0;0"/> + 0 +</text> +<text x="419.0" y="410" font-size="11" fill="#FF8F00" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;1;1;0;0;0;0;0;0;0;0;0"/> + 0 +</text> +<text x="419.0" y="410" font-size="11" fill="#FF8F00" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;1;1;0;0;0;0;0;0;0"/> + 0 +</text> +<text x="419.0" y="410" font-size="11" fill="#FF8F00" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;0;0;1;1;0;0;0;0;0"/> + 0 +</text> +<text x="419.0" y="410" font-size="11" fill="#FF8F00" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;0;0;0;0;1;1;0;0;0"/> + 0 +</text> +<text x="419.0" y="410" font-size="11" fill="#D32F2F" font-weight="bold"> + <animate attributeName="opacity" dur="18.2s" repeatCount="indefinite" keyTimes="0.0000;0.0659;0.1429;0.2088;0.2857;0.3516;0.4286;0.4945;0.5714;0.6374;0.7143;0.7802;0.8571;0.9231;1.0000" values="0;0;0;0;0;0;0;0;0;0;0;0;1;1;0"/> + 3 +</text> +<text x="350" y="340" text-anchor="middle" font-size="11" fill="#666" font-style="italic">Same pixel values (42, 87, 15…) — only spatial mapping changes</text> +</svg> \ No newline at end of file diff --git a/docs/image/RS_SkewX/RS_SkewX.svg b/docs/image/RS_SkewX/RS_SkewX.svg new file mode 100644 index 0000000000..ac933c3bd7 --- /dev/null +++ b/docs/image/RS_SkewX/RS_SkewX.svg @@ -0,0 +1,30 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="700" height="370" viewBox="0 0 700 370" font-family="Arial, Helvetica, sans-serif"> +<rect width="700" height="370" fill="white"/> +<text x="350" y="28" text-anchor="middle" font-size="17" fill="#333" font-weight="bold">RS_SkewX</text> +<text x="350" y="48" text-anchor="middle" font-size="12" fill="#666">X skew: horizontal shift per row</text> +<text x="160" y="80" text-anchor="middle" font-size="13" fill="#333" font-weight="bold">SkewX = 0 (no skew)</text> +<rect x="70" y="90" width="180" height="180" fill="#E3F2FD" stroke="#1565C0" stroke-width="1.5"/> +<line x1="130" y1="90" x2="130" y2="270" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="190" y1="90" x2="190" y2="270" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="70" y1="150" x2="250" y2="150" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="70" y1="210" x2="250" y2="210" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="70" y1="90" x2="70" y2="280" stroke="#666" stroke-width="0.8" stroke-dasharray="3,3"/> +<text x="360" y="180" text-anchor="middle" font-size="28" fill="#333" font-weight="bold">→</text> +<text x="527" y="80" text-anchor="middle" font-size="13" fill="#333" font-weight="bold">SkewX = 0.5</text> +<polygon points="410,90 590,90 644,270 464,270" fill="#E3F2FD" stroke="#1565C0" stroke-width="1.5"/> +<line x1="470" y1="90" x2="524" y2="270" stroke="#1565C0" stroke-width="0.8" opacity="0.4"/> +<line x1="530" y1="90" x2="584" y2="270" stroke="#1565C0" stroke-width="0.8" opacity="0.4"/> +<line x1="428" y1="150" x2="608" y2="150" stroke="#1565C0" stroke-width="0.8" opacity="0.4"/> +<line x1="446" y1="210" x2="626" y2="210" stroke="#1565C0" stroke-width="0.8" opacity="0.4"/> +<line x1="410" y1="90" x2="410" y2="280" stroke="#666" stroke-width="0.8" stroke-dasharray="3,3"/> +<line x1="410" y1="150" x2="425" y2="150" stroke="#D32F2F" stroke-width="1.5"/> +<polygon points="428,150 423,147 423,153" fill="#D32F2F"/> +<text x="419" y="144" text-anchor="middle" font-size="9" fill="#D32F2F" font-weight="bold">SkewX</text> +<line x1="410" y1="210" x2="443" y2="210" stroke="#D32F2F" stroke-width="1.5"/> +<polygon points="446,210 441,207 441,213" fill="#D32F2F"/> +<text x="428" y="204" text-anchor="middle" font-size="9" fill="#D32F2F" font-weight="bold">2×SkewX</text> +<line x1="410" y1="270" x2="461" y2="270" stroke="#D32F2F" stroke-width="1.5"/> +<polygon points="464,270 459,267 459,273" fill="#D32F2F"/> +<text x="437" y="264" text-anchor="middle" font-size="9" fill="#D32F2F" font-weight="bold">3×SkewX</text> +<text x="350" y="352" text-anchor="middle" font-size="11" fill="#666" font-style="italic">Row r is shifted horizontally by r × SkewX from the origin</text> +</svg> \ No newline at end of file diff --git a/docs/image/RS_SkewY/RS_SkewY.svg b/docs/image/RS_SkewY/RS_SkewY.svg new file mode 100644 index 0000000000..288f56e59b --- /dev/null +++ b/docs/image/RS_SkewY/RS_SkewY.svg @@ -0,0 +1,30 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="700" height="380" viewBox="0 0 700 380" font-family="Arial, Helvetica, sans-serif"> +<rect width="700" height="380" fill="white"/> +<text x="350" y="28" text-anchor="middle" font-size="17" fill="#333" font-weight="bold">RS_SkewY</text> +<text x="350" y="48" text-anchor="middle" font-size="12" fill="#666">Y skew: vertical shift per column</text> +<text x="160" y="85" text-anchor="middle" font-size="13" fill="#333" font-weight="bold">SkewY = 0 (no skew)</text> +<rect x="70" y="95" width="180" height="180" fill="#E3F2FD" stroke="#1565C0" stroke-width="1.5"/> +<line x1="130" y1="95" x2="130" y2="275" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="190" y1="95" x2="190" y2="275" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="70" y1="155" x2="250" y2="155" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="70" y1="215" x2="250" y2="215" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="70" y1="95" x2="260" y2="95" stroke="#666" stroke-width="0.8" stroke-dasharray="3,3"/> +<text x="360" y="185" text-anchor="middle" font-size="28" fill="#333" font-weight="bold">→</text> +<text x="500" y="85" text-anchor="middle" font-size="13" fill="#333" font-weight="bold">SkewY = 0.5</text> +<polygon points="410,95 590,143 590,323 410,275" fill="#E3F2FD" stroke="#1565C0" stroke-width="1.5"/> +<line x1="470" y1="111" x2="470" y2="291" stroke="#1565C0" stroke-width="0.8" opacity="0.4"/> +<line x1="530" y1="127" x2="530" y2="307" stroke="#1565C0" stroke-width="0.8" opacity="0.4"/> +<line x1="410" y1="155" x2="590" y2="203" stroke="#1565C0" stroke-width="0.8" opacity="0.4"/> +<line x1="410" y1="215" x2="590" y2="263" stroke="#1565C0" stroke-width="0.8" opacity="0.4"/> +<line x1="410" y1="95" x2="600" y2="95" stroke="#666" stroke-width="0.8" stroke-dasharray="3,3"/> +<line x1="470" y1="95" x2="470" y2="108" stroke="#D32F2F" stroke-width="1.5"/> +<polygon points="470,111 467,106 473,106" fill="#D32F2F"/> +<text x="478" y="107" text-anchor="start" font-size="9" fill="#D32F2F" font-weight="bold">SkewY</text> +<line x1="530" y1="95" x2="530" y2="124" stroke="#D32F2F" stroke-width="1.5"/> +<polygon points="530,127 527,122 533,122" fill="#D32F2F"/> +<text x="538" y="115" text-anchor="start" font-size="9" fill="#D32F2F" font-weight="bold">2×SkewY</text> +<line x1="590" y1="95" x2="590" y2="140" stroke="#D32F2F" stroke-width="1.5"/> +<polygon points="590,143 587,138 593,138" fill="#D32F2F"/> +<text x="598" y="123" text-anchor="start" font-size="9" fill="#D32F2F" font-weight="bold">3×SkewY</text> +<text x="350" y="365" text-anchor="middle" font-size="11" fill="#666" font-style="italic">Column c is shifted vertically by c × SkewY from the origin</text> +</svg> \ No newline at end of file diff --git a/docs/image/RS_UpperLeftX/RS_UpperLeftX.svg b/docs/image/RS_UpperLeftX/RS_UpperLeftX.svg new file mode 100644 index 0000000000..3b5b03143f --- /dev/null +++ b/docs/image/RS_UpperLeftX/RS_UpperLeftX.svg @@ -0,0 +1,12 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="580" height="320" viewBox="0 0 580 320" font-family="Arial, Helvetica, sans-serif"> +<rect width="580" height="320" fill="white"/> +<text x="290" y="28" text-anchor="middle" font-size="17" fill="#333" font-weight="bold" font-style="normal">RS_UpperLeftX</text><text x="290" y="48" text-anchor="middle" font-size="12" fill="#666" font-weight="normal" font-style="normal">Returns the X coordinate of the upper-left corner</text><line x1="80" y1="260" x2="520" y2="260" stroke="#333" stroke-width="1.5"/> +<polygon points="520,260 513.2,264.3 513.2,255.7" fill="#333"/><line x1="80" y1="260" x2="80" y2="60" stroke="#333" stroke-width="1.5"/> +<polygon points="80,60 84.3,66.8 75.7,66.8" fill="#333"/><text x="525" y="265" text-anchor="middle" font-size="13" fill="#333" font-weight="bold" font-style="normal">X</text><text x="68" y="55" text-anchor="middle" font-size="13" fill="#333" font-weight="bold" font-style="normal">Y</text><rect x="200" y="100" width="240" height="135" fill="#E3F2FD" stroke="#1565C0" stroke-width="1.5"/> +<line x1="260" y1="100" x2="260" y2="235" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="320" y1="100" x2="320" y2="235" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="380" y1="100" x2="380" y2="235" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="200" y1="145" x2="440" y2="145" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="200" y1="190" x2="440" y2="190" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/><circle cx="200" cy="100" r="5" fill="#FF8F00" stroke="white" stroke-width="1.5"/><line x1="200" y1="100" x2="200" y2="260" stroke="#D32F2F" stroke-width="1.5" stroke-dasharray="5,3"/><line x1="80" y1="255" x2="200" y2="255" stroke="#D32F2F" stroke-width="2"/> +<polygon points="200,255 194.1,258.8 194.1,251.2" fill="#D32F2F"/> +<polygon points="80,255 85.9,251.2 85.9,258.8" fill="#D32F2F"/><text x="140.0" y="282" text-anchor="middle" font-size="13" fill="#D32F2F" font-weight="bold" font-style="normal">UpperLeftX</text><text x="192" y="88" text-anchor="start" font-size="11" fill="#FF8F00" font-weight="bold" font-style="normal">(UpperLeftX, UpperLeftY)</text></svg> \ No newline at end of file diff --git a/docs/image/RS_UpperLeftY/RS_UpperLeftY.svg b/docs/image/RS_UpperLeftY/RS_UpperLeftY.svg new file mode 100644 index 0000000000..a5859e26ac --- /dev/null +++ b/docs/image/RS_UpperLeftY/RS_UpperLeftY.svg @@ -0,0 +1,12 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="580" height="320" viewBox="0 0 580 320" font-family="Arial, Helvetica, sans-serif"> +<rect width="580" height="320" fill="white"/> +<text x="290" y="28" text-anchor="middle" font-size="17" fill="#333" font-weight="bold" font-style="normal">RS_UpperLeftY</text><text x="290" y="48" text-anchor="middle" font-size="12" fill="#666" font-weight="normal" font-style="normal">Returns the Y coordinate of the upper-left corner</text><line x1="80" y1="260" x2="520" y2="260" stroke="#333" stroke-width="1.5"/> +<polygon points="520,260 513.2,264.3 513.2,255.7" fill="#333"/><line x1="80" y1="260" x2="80" y2="60" stroke="#333" stroke-width="1.5"/> +<polygon points="80,60 84.3,66.8 75.7,66.8" fill="#333"/><text x="525" y="265" text-anchor="middle" font-size="13" fill="#333" font-weight="bold" font-style="normal">X</text><text x="68" y="55" text-anchor="middle" font-size="13" fill="#333" font-weight="bold" font-style="normal">Y</text><rect x="200" y="100" width="240" height="135" fill="#E3F2FD" stroke="#1565C0" stroke-width="1.5"/> +<line x1="260" y1="100" x2="260" y2="235" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="320" y1="100" x2="320" y2="235" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="380" y1="100" x2="380" y2="235" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="200" y1="145" x2="440" y2="145" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="200" y1="190" x2="440" y2="190" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/><circle cx="200" cy="100" r="5" fill="#FF8F00" stroke="white" stroke-width="1.5"/><line x1="200" y1="100" x2="80" y2="100" stroke="#D32F2F" stroke-width="1.5" stroke-dasharray="5,3"/><line x1="85" y1="260" x2="85" y2="100" stroke="#D32F2F" stroke-width="2"/> +<polygon points="85,100 88.8,105.9 81.2,105.9" fill="#D32F2F"/> +<polygon points="85,260 81.2,254.1 88.8,254.1" fill="#D32F2F"/><text x="72" y="184.0" text-anchor="end" font-size="13" fill="#D32F2F" font-weight="bold" font-style="normal">UpperLeftY</text><text x="208" y="88" text-anchor="start" font-size="11" fill="#FF8F00" font-weight="bold" font-style="normal">(UpperLeftX, UpperLeftY)</text></svg> \ No newline at end of file diff --git a/docs/image/RS_WorldToRasterCoordX/RS_WorldToRasterCoordX.svg b/docs/image/RS_WorldToRasterCoordX/RS_WorldToRasterCoordX.svg new file mode 100644 index 0000000000..1ac04e0556 --- /dev/null +++ b/docs/image/RS_WorldToRasterCoordX/RS_WorldToRasterCoordX.svg @@ -0,0 +1,12 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="620" height="360" viewBox="0 0 620 360" font-family="Arial, Helvetica, sans-serif"> +<rect width="620" height="360" fill="white"/> +<text x="310" y="28" text-anchor="middle" font-size="17" fill="#333" font-weight="bold" font-style="normal">RS_WorldToRasterCoordX</text><text x="310" y="48" text-anchor="middle" font-size="12" fill="#666" font-weight="normal" font-style="normal">Returns the grid column (X) for given world coordinates</text><rect x="40" y="100" width="180" height="90" fill="#FFF3E0" stroke="#FF8F00" stroke-width="1.5" rx="6"/><text x="130" y="125" text-anchor="middle" font-size="12" fill="#333" font-weig [...] +<polygon points="300,145 293.2,149.3 293.2,140.7" fill="#333"/><rect x="310" y="80" width="225" height="160" fill="#E3F2FD" stroke="#1565C0" stroke-width="1.5"/> +<line x1="355" y1="80" x2="355" y2="240" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="400" y1="80" x2="400" y2="240" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="445" y1="80" x2="445" y2="240" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="490" y1="80" x2="490" y2="240" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="310" y1="120" x2="535" y2="120" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="310" y1="160" x2="535" y2="160" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="310" y1="200" x2="535" y2="200" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/><text x="332.5" y="74" text-anchor="middle" font-size="11" fill="#333" font-weight="bold" font-style="normal">1</text><text x="377.5" y="74" text-anchor="middle" font-size="11" fill="#333" font-weight="bold" font-style="normal">2</text><text x="422.5" y="74" text-anchor="middle" font-size="11" fill="#333" font-weight="bold" font-style="normal">3</text><text x="467.5" y="74" text-anchor="middle" f [...] +<polygon points="450,255 442.9,258.7 443.6,250.2" fill="#D32F2F"/></svg> \ No newline at end of file diff --git a/docs/image/RS_WorldToRasterCoordY/RS_WorldToRasterCoordY.svg b/docs/image/RS_WorldToRasterCoordY/RS_WorldToRasterCoordY.svg new file mode 100644 index 0000000000..fbcbd5d1c7 --- /dev/null +++ b/docs/image/RS_WorldToRasterCoordY/RS_WorldToRasterCoordY.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="620" height="360" viewBox="0 0 620 360" font-family="Arial, Helvetica, sans-serif"> +<rect width="620" height="360" fill="white"/> +<text x="310" y="28" text-anchor="middle" font-size="17" fill="#333" font-weight="bold" font-style="normal">RS_WorldToRasterCoordY</text><text x="310" y="48" text-anchor="middle" font-size="12" fill="#666" font-weight="normal" font-style="normal">Returns the grid row (Y) for given world coordinates</text><rect x="40" y="100" width="180" height="90" fill="#FFF3E0" stroke="#FF8F00" stroke-width="1.5" rx="6"/><text x="130" y="125" text-anchor="middle" font-size="12" fill="#333" font-weight= [...] +<polygon points="300,145 293.2,149.3 293.2,140.7" fill="#333"/><rect x="310" y="80" width="225" height="190" fill="#E3F2FD" stroke="#1565C0" stroke-width="1.5"/> +<line x1="355" y1="80" x2="355" y2="270" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="400" y1="80" x2="400" y2="270" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="445" y1="80" x2="445" y2="270" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="490" y1="80" x2="490" y2="270" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="310" y1="118" x2="535" y2="118" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="310" y1="156" x2="535" y2="156" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="310" y1="194" x2="535" y2="194" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/> +<line x1="310" y1="232" x2="535" y2="232" stroke="#1565C0" stroke-width="0.8" opacity="0.5"/><text x="332.5" y="74" text-anchor="middle" font-size="11" fill="#333" font-weight="bold" font-style="normal">1</text><text x="377.5" y="74" text-anchor="middle" font-size="11" fill="#333" font-weight="bold" font-style="normal">2</text><text x="422.5" y="74" text-anchor="middle" font-size="11" fill="#333" font-weight="bold" font-style="normal">3</text><text x="467.5" y="74" text-anchor="middle" f [...] +<polygon points="450,285 449.8,277.0 457.2,281.5" fill="#D32F2F"/></svg> \ No newline at end of file diff --git a/docs/image/Raster_Affine_Transformation/Raster_Affine_Transformation.svg b/docs/image/Raster_Affine_Transformation/Raster_Affine_Transformation.svg new file mode 100644 index 0000000000..11e2a05d57 --- /dev/null +++ b/docs/image/Raster_Affine_Transformation/Raster_Affine_Transformation.svg @@ -0,0 +1,20 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="900" height="500" viewBox="0 0 900 500" font-family="Arial, Helvetica, sans-serif"> +<rect width="900" height="500" fill="white"/> +<text x="450" y="28" text-anchor="middle" font-size="18" fill="#333" font-weight="bold" font-style="normal">Raster Affine Transformation</text><text x="200" y="80" text-anchor="middle" font-size="14" fill="#333" font-weight="bold" font-style="normal">Affine Matrix</text><rect x="90" y="92" width="250" height="80" fill="#F5F5F5" stroke="#666" stroke-width="1" rx="4"/><text x="135" y="120" text-anchor="middle" font-size="13" fill="#1565C0" font-weight="bold" font-style="normal">ScaleX</tex [...] +<polygon points="860,420 853.2,424.3 853.2,415.7" fill="#333"/><line x1="500" y1="420" x2="500" y2="70" stroke="#333" stroke-width="1.5"/> +<polygon points="500,70 504.3,76.8 495.7,76.8" fill="#333"/><text x="865" y="425" text-anchor="middle" font-size="13" fill="#333" font-weight="bold" font-style="normal">X</text><text x="488" y="68" text-anchor="middle" font-size="13" fill="#333" font-weight="bold" font-style="normal">Y</text><polygon points="540.0,140.0 790.0,180.0 850.0,380.0 600.0,340.0" fill="#E3F2FD" stroke="#1565C0" stroke-width="1.5" opacity="1.0"/> +<line x1="590.0" y1="148.0" x2="650.0" y2="348.0" stroke="#1565C0" stroke-width="0.8" opacity="0.4"/> +<line x1="640.0" y1="156.0" x2="700.0" y2="356.0" stroke="#1565C0" stroke-width="0.8" opacity="0.4"/> +<line x1="690.0" y1="164.0" x2="750.0" y2="364.0" stroke="#1565C0" stroke-width="0.8" opacity="0.4"/> +<line x1="740.0" y1="172.0" x2="800.0" y2="372.0" stroke="#1565C0" stroke-width="0.8" opacity="0.4"/> +<line x1="555.0" y1="190.0" x2="805.0" y2="230.0" stroke="#1565C0" stroke-width="0.8" opacity="0.4"/> +<line x1="570.0" y1="240.0" x2="820.0" y2="280.0" stroke="#1565C0" stroke-width="0.8" opacity="0.4"/> +<line x1="585.0" y1="290.0" x2="835.0" y2="330.0" stroke="#1565C0" stroke-width="0.8" opacity="0.4"/><circle cx="540" cy="140" r="5" fill="#FF8F00" stroke="#FF8F00"/><line x1="540" y1="140" x2="540" y2="420" stroke="#FF8F00" stroke-width="1.2" stroke-dasharray="4,3"/><line x1="540" y1="140" x2="500" y2="140" stroke="#FF8F00" stroke-width="1.2" stroke-dasharray="4,3"/><text x="540" y="438" text-anchor="middle" font-size="11" fill="#FF8F00" font-weight="bold" font-style="normal">UpperLeftX [...] +<polygon points="590,122 584.1,125.8 584.1,118.2" fill="#1565C0"/> +<polygon points="540,122 545.9,118.2 545.9,125.8" fill="#1565C0"/><text x="565.0" y="114" text-anchor="middle" font-size="12" fill="#1565C0" font-weight="bold" font-style="normal">ScaleX</text><line x1="522" y1="140" x2="522" y2="190" stroke="#1565C0" stroke-width="2"/> +<polygon points="522,190 518.2,184.1 525.8,184.1" fill="#1565C0"/> +<polygon points="522,140 525.8,145.9 518.2,145.9" fill="#1565C0"/><text x="514" y="169.0" text-anchor="end" font-size="12" fill="#1565C0" font-weight="bold" font-style="normal">ScaleY</text><line x1="540" y1="140" x2="540" y2="190" stroke="#00796B" stroke-width="1" stroke-dasharray="4,3" opacity="0.6"/><line x1="540" y1="208" x2="555" y2="208" stroke="#00796B" stroke-width="1.8"/> +<polygon points="555,208 549.1,211.8 549.1,204.2" fill="#00796B"/> +<polygon points="540,208 545.9,204.2 545.9,211.8" fill="#00796B"/><text x="547.5" y="224" text-anchor="middle" font-size="11" fill="#00796B" font-weight="bold" font-style="normal">SkewX</text><line x1="540" y1="140" x2="590" y2="140" stroke="#00796B" stroke-width="1" stroke-dasharray="4,3" opacity="0.6"/><line x1="608" y1="140" x2="608" y2="148" stroke="#00796B" stroke-width="1.8"/> +<polygon points="608,148 604.2,142.1 611.8,142.1" fill="#00796B"/> +<polygon points="608,140 611.8,145.9 604.2,145.9" fill="#00796B"/><text x="616" y="148.0" text-anchor="start" font-size="11" fill="#00796B" font-weight="bold" font-style="normal">SkewY</text><rect x="50" y="438" width="12" height="12" fill="#1565C0" rx="2"/><text x="70" y="450" text-anchor="start" font-size="11" fill="#333" font-weight="normal" font-style="normal">Scale (pixel size)</text><rect x="200" y="438" width="12" height="12" fill="#00796B" rx="2"/><text x="220" y="450" text-ancho [...] \ No newline at end of file
