From 28b3a0f38c0db775f45108eebc355bf6fcda96fa Mon Sep 17 00:00:00 2001 From: John Wellbelove Date: Thu, 28 May 2026 12:39:15 +0100 Subject: [PATCH] Final pre PR updates --- docs/blog/_index.md | 11 +- docs/blog/graphics/Reflection1.png | Bin 0 -> 3825 bytes docs/blog/graphics/_index.md | 5 + .../applications-of-dot-and-cross-products.md | 68 +++++++++++ .../determining-line-line-intersections.md | 112 ++++++++++++++++++ docs/blog/graphics/dot-and-cross-products.md | 22 ++++ docs/blog/graphics/images/DotCross1.png | Bin 0 -> 4453 bytes docs/blog/graphics/images/DotCross3.png | Bin 0 -> 12673 bytes docs/blog/graphics/images/DotCross4.png | Bin 0 -> 6966 bytes .../graphics/images/DotCrossCoordinates.png | Bin 0 -> 2346 bytes docs/blog/graphics/images/LineCross1.png | Bin 0 -> 7179 bytes docs/blog/graphics/images/LineCross2.png | Bin 0 -> 6416 bytes docs/blog/graphics/images/Reflection1.png | Bin 0 -> 3841 bytes docs/blog/graphics/images/ScanRectangle1.png | Bin 0 -> 5075 bytes docs/blog/graphics/images/ScanRectangle2.png | Bin 0 -> 3611 bytes docs/blog/graphics/images/ScanRectangle3.png | Bin 0 -> 6791 bytes docs/blog/graphics/images/ScanRectangle4.png | Bin 0 -> 9500 bytes docs/blog/graphics/images/ScanRectangle5.png | Bin 0 -> 11322 bytes docs/blog/graphics/images/ScanRectangle6.png | Bin 0 -> 8346 bytes ...-arbitrarily-rotated-rectangular-region.md | 38 ++++++ ...implementing-a-low-cost-moving-average.md} | 12 +- .../sets/reference-flat-multiset.md | 7 +- docs/containers/sets/reference-flat-set.md | 5 + docs/containers/vectors/multi-vector.md | 4 + docs/getting-started/contribute.md | 2 +- hugo/hugo.toml | 5 + 26 files changed, 284 insertions(+), 7 deletions(-) create mode 100644 docs/blog/graphics/Reflection1.png create mode 100644 docs/blog/graphics/_index.md create mode 100644 docs/blog/graphics/applications-of-dot-and-cross-products.md create mode 100644 docs/blog/graphics/determining-line-line-intersections.md create mode 100644 docs/blog/graphics/dot-and-cross-products.md create mode 100644 docs/blog/graphics/images/DotCross1.png create mode 100644 docs/blog/graphics/images/DotCross3.png create mode 100644 docs/blog/graphics/images/DotCross4.png create mode 100644 docs/blog/graphics/images/DotCrossCoordinates.png create mode 100644 docs/blog/graphics/images/LineCross1.png create mode 100644 docs/blog/graphics/images/LineCross2.png create mode 100644 docs/blog/graphics/images/Reflection1.png create mode 100644 docs/blog/graphics/images/ScanRectangle1.png create mode 100644 docs/blog/graphics/images/ScanRectangle2.png create mode 100644 docs/blog/graphics/images/ScanRectangle3.png create mode 100644 docs/blog/graphics/images/ScanRectangle4.png create mode 100644 docs/blog/graphics/images/ScanRectangle5.png create mode 100644 docs/blog/graphics/images/ScanRectangle6.png create mode 100644 docs/blog/graphics/scanning-an-arbitrarily-rotated-rectangular-region.md rename docs/blog/{implementing-a-moving-average.md => implementing-a-low-cost-moving-average.md} (87%) diff --git a/docs/blog/_index.md b/docs/blog/_index.md index f14c0b12..d7661667 100644 --- a/docs/blog/_index.md +++ b/docs/blog/_index.md @@ -3,4 +3,13 @@ title: "Blog" weight: 3001 --- -Implementing a moving average. +## Graphics + +[Determining line-line intersections]({{% relref "./graphics/determining-line-line-intersections.md" %}}) +[Applications of dot and cross products]({{% relref "./graphics/applications-of-dot-and-cross-products.md" %}}) +[Scanning an arbitrarily rotated rectangular region]({{% relref "./graphics/scanning-an-arbitrarily-rotated-rectangular-region.md" %}}) + + +## Algorithms + +[Implementing a low cost moving average]({{% relref "implementing-a-low-cost-moving-average.md" %}}) diff --git a/docs/blog/graphics/Reflection1.png b/docs/blog/graphics/Reflection1.png new file mode 100644 index 0000000000000000000000000000000000000000..62e84a6664b9994e08570d5669bc61243d26c989 GIT binary patch literal 3825 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 CWO@1k literal 0 HcmV?d00001 diff --git a/docs/blog/graphics/_index.md b/docs/blog/graphics/_index.md new file mode 100644 index 00000000..5dfecb76 --- /dev/null +++ b/docs/blog/graphics/_index.md @@ -0,0 +1,5 @@ +--- +title: "Graphics" +weight: 1 +--- + diff --git a/docs/blog/graphics/applications-of-dot-and-cross-products.md b/docs/blog/graphics/applications-of-dot-and-cross-products.md new file mode 100644 index 00000000..b5777c37 --- /dev/null +++ b/docs/blog/graphics/applications-of-dot-and-cross-products.md @@ -0,0 +1,68 @@ +--- +title: "Applications of dot and cross products" +weight: 5 +--- + +## The problem +Sometimes in graphical applications there is a need to know the relative position of a point with respect to a line from a reference point. + +Where is the target in relation to the reference and its direction? +Dot and cross products can make this an easy task. + +Let's start with a reminder of what dot and cross products are. + +Take two vectors `x1,y1` and `x2,y2` +The dot product is `(x1 * x2) + (y1 * y2)` and the cross product is `(x1 * y2) - (x2 * y1)`. + +Remember that the dot product is a scalar based on `cos(θ)` and the cross product is a scalar based on `sin(θ)`. + +**Example** + +![DotCross1](images/DotCross1.png) + +We have a reference object at `Xr,Yr` facing in the direction of the arrow. + +The target is at point `Xt,Yt` + +![DotCross3](images/DotCross3.png) + +A arbitrary point on the line from the reference in the specified direction is `Xw,Yw` + +First, find the coordinates of the target and waypoint relative to the reference. + +`dXw = Xw - Xr` +`dYw = Yw - Yr` +`dXt = Xt - Xr` +`dYt = Yt - Yr` + +Now find the dot and cross products of these vectors. + +`Dot = (dXw * dXt) + (dYw * dYt)` +`Cross = (dXw * dYt) - (dXt * dYw)` + +The absolute values of the dot and cross products is unimportant, we just need the *sign*. + +`Dot > 0`, `Cross < 0` : The target is forward of the reference and to the right. +`Dot > 0`, `Cross > 0` : The target is forward of the reference and to the left. +`Dot < 0`, `Cross < 0` : The target is behind the reference and to the right. +`Dot < 0`, `Cross > 0` : The target is behind the reference and to the left. + +*forward*, *behind*, *left*, and *right* are relative to the reference's direction. +This calculation will be valid for any direction. + +## Other uses +This technique can also be used to determine if a point is within a closed convex hull. + +![DotCross4](images/DotCross4.png) + +A closed convex hull defined by the lines `L1`, `L2`, `L3`, `L4`, and `L5`. +Point `P1` is inside the hull, point `P2` is outside. +For `P1`, the cross product for all of the lines will indicate that it is to the *right* and therefore, *must* be inside. +For `P2`, the cross product for `L1` will put it on the *left* hand side and therefore it *cannot* be inside the hull. + +**Why does this work?** +The dot product of vectors `A` and `B` is `|A||B|cos(Ø)` +The cross product of vectors `A` and `B` is `|A||B|sin(Ø)` +Where `Ø` is the angle between the vectors `A` and `B`. Range `+-180°` + +Therefore the sign of the result indicates the quadrant that target occupies in the circle around the reference, relative to the reference's direction. diff --git a/docs/blog/graphics/determining-line-line-intersections.md b/docs/blog/graphics/determining-line-line-intersections.md new file mode 100644 index 00000000..08ce32b6 --- /dev/null +++ b/docs/blog/graphics/determining-line-line-intersections.md @@ -0,0 +1,112 @@ +--- +title: "Determining line-line intersections" +weight: 2 +--- + +It's quite common in graphics and image processing to want to know the intersection coordinates of two lines. + +The common formula for a line is the familiar `y = Mx + C`. + +But there is another that can be a lot easier to use when determining line to line intersections in a graphical environment. + +## The issues + +When using `y = Mx + C` you must be aware of the situations of when the line approaches 'vertical'. +In this case `M` tends towards infinity, which is not good in a programming environment. + +The usual trick is to flip the coordinates when the slope is more than 1, and then flip back after the calculations have been made. +This can be confusing to follow and result in errors. + +Also, to keep any accuracy, the calculations must normally be kept in the floating point domain, which is not ideal for performance, as the image will be in integral pixel coordinates. + +## The solution + +Change the definition of your lines to use the formula `Ax + By = C`. + +Ideally, your lines would already be in the form `Ax + By = C`, but this is not normally the case, but we *can* easily generate the parameters from two points. +Assume we have a line defined by `(x1, y1)` and `(x2, y2)`. + +We can deduce `A`, `B`, and `C` thus: + +`A = y2 - y1` +`B = x1 - x2` +`C = Ax1`+ `By1` + +--- + +Another useful calculation is the *determinant*. +Given two lines `A1x + B1y = C1` and `A2x + B2y = C2`: + +`determinant = A1 * B2 - A2 * B1` + +If `determinant` is zero, then the lines are parallel. + +### Notes + +- If `A` and `B` are both non-zero. + The equation represents a diagonal line. + +- If `A == 0`, `B != 0`. + The line is the parallel to the x-axis. + +- If `A != 0`, `B == 0`. + The line is the parallel to the y-axis. + +- If `C == 0` + The line passes through the origin. + +## Calculating the intersection + +The intersection point is calculated like this: + +Given two lines described by the points `(x1, y1)`, `(x2, y2)`, and `(x3, y3)`, `(x3, y3)`. + +![LineCross1](images/LineCross1.png) + +- Calculate the parameters `A`, `B`, and `C` for each. + `A1x + B1y = C1` and `A2x + B2y = C2` + +- Calculate the determinant. + `determinant = A1 * B2 - A2 * B1` + +- If `determinant == 0` then the lines are parallel, and there is no intersection point. + +- Otherwise + `x = (B2 * C1 - B1 * C2) / determinant` + `y = (A1 * C2 - A2 * C1) / determinant` + +## They don't need to physically intersect + +The intersection point can be found even if the line segments aren't actually long enough to intersect. +The calculation will effectively extend them to where they *would* intersect, if long enough. + +This means you can find intersection points relative to a fixed reference line. + +![LineCross2](images/LineCross2.png) + +## Refection + +This describes reflecting a point across a reference line. +It uses the intersection method described above. + +In the example below, we want to reflect `P` in the line `Reference`, to give us `P'`. + +![Reflection1](images/Reflection1.png) + +First, we need the reference line in the form `Ax + By = C`. + +Next, we need to find the perpendicular from `Reference` through `P`. +Any line perpendicular to `Ax + By = C` takes the form `−Bx + Ay = D`. +To find `D`, just substitute the `x,y` coordinates from `P`. + +Now we have the two lines in the form we require to find the intersection. + +Find `I`, which is the intersection of the reference line and the perpendicular to `P`. + +Compute `P'` by using the formula `P' = I + (I - P)`. +This calculates the vector from `P` to `I` and then adds it to `I` to move the same amount again. + +## Line to point distance + +The above technique can be used to find the distance of a point to a reference line. +This distance is merely the absolute length of the vector `I - P`. diff --git a/docs/blog/graphics/dot-and-cross-products.md b/docs/blog/graphics/dot-and-cross-products.md new file mode 100644 index 00000000..eaa9ad60 --- /dev/null +++ b/docs/blog/graphics/dot-and-cross-products.md @@ -0,0 +1,22 @@ +--- +title: "Dot and cross products" +weight: 4 +--- + +## Dot Product +The dot product of two vectors is the sum of the products of the corresponding elements. +The dot product of vectors `(x1, y1)` and `(x2, y2)` is `x1 * x2 + y1 * y2`. +If `A` & `B` are vectors, the dot product is `|A||B|cos(θ)`, where `θ` is the angle between the `A` and `B`. + +`|A|` is the length of the vector `A`. +`|B|` is the length of the vector `B`. + +Therefore, we can calculate `Cos(θ) = (A ⋅ B)/(|A||B|)`. +A dot product of `0` indicates two perpendicular lines, and that the dot product is greatest when the lines are parallel. + +## Cross Product + +The cross product of vectors `(x1, y1)` and `(x2, y2)` is `x1 * y2 - y1 * x2` +If `A` & `B` are vectors, the cross product is `|A||B|sin(θ)`. +`|θ|` is the angle between the two vectors, but `θ` can be positive or negative. + diff --git a/docs/blog/graphics/images/DotCross1.png b/docs/blog/graphics/images/DotCross1.png new file mode 100644 index 0000000000000000000000000000000000000000..32c9de03d76cf68b06117e48e0d95ba424fd40d6 GIT binary patch literal 4453 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 e5&m!Z59E@Hu*eA>G{#(%k~mA>GYA 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 SdS`IJg@;krL>DWX1^y2JnkAk9 literal 0 HcmV?d00001 diff --git a/docs/blog/graphics/images/DotCrossCoordinates.png b/docs/blog/graphics/images/DotCrossCoordinates.png new file mode 100644 index 0000000000000000000000000000000000000000..8fc43021230cce5ff924b795abb3a9a0c0dd0e46 GIT binary patch literal 2346 zcmeHJdo-JA8c(9#`=KtwehRj6-9Nw>ZuSZbJDpVjK(x;6M}Pd-;6Qv&?g$(@ za>Fkw1%WW=`Na+hi4E7_;Gyf@f!+uNi>|*LcNl@t?es@^how(1Pf@`)kf~68HhHhs z3x!Go{(?C&kgByfgf4PFQ_;p9SW+|$6AmnlCZ!?+oH>HPyf34Um*KCzO0qG}ja)G5 zeb#(w-OwVQ>D_wv@9f%5lkea7yZ8XFHm0+c$$8+9sV;@<%AA76UDacn?%NJTlvdjCF zlgjuYF9s-XE_FikEp6bK?^<<5u{k%KRXYly4%2|p0;&l~Ju}6OK2CPnVKjXv#@ob9 z@K*H1%}5Pn!!sg|DG1|h*N9Sy!r~m=V4pk*frs+}mF@1$j`W!xs9pKhY@#MBDB@dC z&8MjAahOk;(QDn?VN1p3sss8*k(lJqzj&9!!_f#`8R|f}6JUa^oIXJ%TcGm^;oTj5 zP*Lt3puT-`F70V_YT{=eO7dWi4=pr>)5S(^Qbnp?k7VdO5;b$_I&Z(jvXj3)bB09V zYbPeMMFN1ue((C`t|ERp^$#c zi%;3hoV!~jKR#0B&PkeT4Yq<6HLuA`DFmEgde6CBw}@*lC%@XH-j&;rkB{45kViaB zWS3h*IWCEBpLvou^ELGetfr>Ll95hHoT5Ujr9kDkS-grLRJ0*$>|j`E=vZTTlazO5 z8izar(~^DJ)Y$0e<|a*iN_I_aY2ddwlR!rcXQIr`+PVOBdPVr09BG?(ZL^3#Ajmpy z#w*t5hbo|znMKXLlsv$xHLmAQX=&-mdFo}Jl>?4nxq0_vY%1{)d@H5P()s!bW7%v9 z?#+d-(`l+J*$d-iEfkjzHLWRRGLKB*)`R%5y}{;&hVshFfb6i3kPNtnp9hLbl-Vz? z54XH~AjPYKiQ?%zY3Ad3F)YjM#Z$yO+5YNJJ*1h(24)_U5=q65mDVu$TygXgS5^W# zcG}zy<4UfjdOQ@o5W%WY#n3(Xwua@|`+XYc)>{BJOpGsVn-}5|x<%(dt*9K10z=TW zgo)7TizYY;^wN;fCTQnKZtrexKlqWqB|WWj+QQ=Y1}5$UpDeoTkS5!8S7-@knv$-x zeUAJDMfI;?ADRs|fW=>J9>uk3cWR?g1uodJ8<+y?2xVQH>5M5W2tVefk8A|h!yE7~ zrCl}jdasGV0V6)NM!3QeFY>)V+3(59=-N5uB(<-V0+Ss28JMl^i=l1=I;7%M?e6gN zuW!*hz2Q`B-{0Z?)q_SOq>P_U7BkTY4;~yKa(TQm2b>vAkQG!F1csFC@FyoHBcr1$ zq|X`~ze!Hs@Vv#SL5IHwYQ;)vX9_I%_vfqK(!O~&TBlBzLj4(cfbazQar#Nu%b}sO zjDOF~%~e%Z@fU`?*bNsYir!vSR8&+|BHRnI2S*KS3 literal 0 HcmV?d00001 diff --git a/docs/blog/graphics/images/LineCross1.png b/docs/blog/graphics/images/LineCross1.png new file mode 100644 index 0000000000000000000000000000000000000000..20047e570b9104fb16fa8037174aa660d7654650 GIT binary patch literal 7179 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%0A5^PU8QGb zogJPBn&%ww>6?pVv}|k*ppXV~BRs)gzvSgnP6g<>QY8UGFLL+pI{1QAcDWSB0Z3;w g(}U11O8F~_5T~3KjdAn@__~LsqWBV8B5xY_KQj*w4FCWD literal 0 HcmV?d00001 diff --git a/docs/blog/graphics/images/LineCross2.png b/docs/blog/graphics/images/LineCross2.png new file mode 100644 index 0000000000000000000000000000000000000000..a799713e23600c3ebd69dc003a0882d253063ebd GIT binary patch literal 6416 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 literal 0 HcmV?d00001 diff --git a/docs/blog/graphics/images/Reflection1.png b/docs/blog/graphics/images/Reflection1.png new file mode 100644 index 0000000000000000000000000000000000000000..3663702261690d1629335b9dc366fe217a7d9d0c GIT binary patch literal 3841 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 GNcKN=Nt^Nj literal 0 HcmV?d00001 diff --git a/docs/blog/graphics/images/ScanRectangle1.png b/docs/blog/graphics/images/ScanRectangle1.png new file mode 100644 index 0000000000000000000000000000000000000000..9d9a30fb820cd48f9340ef0ec6e983856c1bd753 GIT binary patch literal 5075 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 Gk^co7E0^d1 literal 0 HcmV?d00001 diff --git a/docs/blog/graphics/images/ScanRectangle2.png b/docs/blog/graphics/images/ScanRectangle2.png new file mode 100644 index 0000000000000000000000000000000000000000..ba629fba60b38d1d54d8ee3885d485439818b34d GIT binary patch literal 3611 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 E0h99l{{R30 literal 0 HcmV?d00001 diff --git a/docs/blog/graphics/images/ScanRectangle3.png b/docs/blog/graphics/images/ScanRectangle3.png new file mode 100644 index 0000000000000000000000000000000000000000..86b5dfd22952ad4ad38f1ba8b0fddd92e9757628 GIT binary patch literal 6791 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 literal 0 HcmV?d00001 diff --git a/docs/blog/graphics/images/ScanRectangle4.png b/docs/blog/graphics/images/ScanRectangle4.png new file mode 100644 index 0000000000000000000000000000000000000000..d39a7e3809faa22486cb13b710abeb35eb7778f8 GIT binary patch literal 9500 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 literal 0 HcmV?d00001 diff --git a/docs/blog/graphics/images/ScanRectangle6.png b/docs/blog/graphics/images/ScanRectangle6.png new file mode 100644 index 0000000000000000000000000000000000000000..e210213f53d488bd59d7f77678239813868afcd9 GIT binary patch literal 8346 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 + Header: `reference_flat_multiset.h` + Similar to: `std::multiset` +{{< /callout >}} + A fixed capacity set based on a sorted vector. The container stores references to objects, rather than the objects themselves. The container is an associative lookup table with O(N) insertion and erase, and O(log N) search. diff --git a/docs/containers/sets/reference-flat-set.md b/docs/containers/sets/reference-flat-set.md index 467f40e6..da2c9dc9 100644 --- a/docs/containers/sets/reference-flat-set.md +++ b/docs/containers/sets/reference-flat-set.md @@ -2,6 +2,11 @@ title: "reference_flat_set" --- +{{< callout type="info">}} + Header: `reference_flat_set.h` + Similar to: `std::set` +{{< /callout >}} + A fixed capacity set based on a sorted vector. The container stores references to objects, rather than the objects themselves. The container is an associative lookup table with O(N) insertion and erase, and O(log N) search. diff --git a/docs/containers/vectors/multi-vector.md b/docs/containers/vectors/multi-vector.md index be3cfe9a..9dc20f6a 100644 --- a/docs/containers/vectors/multi-vector.md +++ b/docs/containers/vectors/multi-vector.md @@ -3,6 +3,10 @@ title: "multi_vector" weight: 2 --- +{{< callout type="info">}} + Header: `multi_vector.h` +{{< /callout >}} + A fixed capacity multi-dimensional vector. For C++11 or greater only. diff --git a/docs/getting-started/contribute.md b/docs/getting-started/contribute.md index ba050229..003fbef7 100644 --- a/docs/getting-started/contribute.md +++ b/docs/getting-started/contribute.md @@ -239,5 +239,5 @@ When opening a new pull request, ensure that you include the following informati - Do not initiate a pull request until *all* of the units tests pass. See above for information on project files and test scripts. - Branches should be based on the branch `master`. `development` can change quite frequently, so I will rebase the your PR against it before merging. -- For formatting help, you can use `clang-format`, or the convenience wrapper `treefmt`. See also [Source formatting]({{% ref "source-formatting.md" %}}). +- For formatting help, you can use `clang-format`, or the convenience wrapper `treefmt`. See also [Source formatting]({{% relref "source-formatting.md" %}}). - Update the relevent documentation markdown file, found in `etl/docs`. \ No newline at end of file diff --git a/hugo/hugo.toml b/hugo/hugo.toml index a2847cd5..eb6a5da7 100644 --- a/hugo/hugo.toml +++ b/hugo/hugo.toml @@ -67,6 +67,11 @@ title = 'Embedded Template Library' url = "https://github.com/ETLCPP/etl-arduino/archive/master.zip" weight = 4 +[[menus.main]] + name = "Blog" + pageRef = "/docs/blog" + weight = 5 + [[menus.main]] name = "About" pageRef = "/docs/about"