Ellipsoids

Binder nbviewer

In this file, we will visit the basic features provided by Dionysos for manipulating ellipsoids:

  • inclusion
  • intersection

First, let us import a few packages that are necessary to run this example.

using Dionysos
using StaticArrays
using LinearAlgebra
using Plots

The main package Dionysos provides most important data structures that we will need.

const DI = Dionysos
const UT = DI.Utils
Dionysos.Utils

We define a plotting functions

function plot_config!(fig, El0, El, Elnew)
    if Elnew ∈ El0
        plot!(fig, El0; color = :red, label = "El0")
        plot!(fig, Elnew; color = :green, label = "Elnew")
    else
        plot!(fig, Elnew; color = :green, label = "Elnew")
        plot!(fig, El0; color = :red, label = "El0")
    end
    return plot!(fig, El; color = :blue, label = "El", show = true)
end

function analyze(fig1, fig2, i)
    El0 = E0L[i]
    Elnew = UT.scale_for_inclusion_contact_point(El0, El)
    plot_config!(fig1, El0, El, Elnew)
    println(El0 ∈ El ? "El0 ∈ El" : "El0 ∉ El")

    Elnew = UT.scale_for_noninclusion_contact_point(El0, El)
    plot_config!(fig2, El0, El, Elnew)
    return println(UT.is_intersected(El0, El) ? "El0 ∩ El ≠ ∅" : "El0 ∩ El = ∅")
end
analyze (generic function with 1 method)

We define some ellipsoids

c = [1.5; 1.5]
P = [
    4.0 0.5
    0.5 6.0
]
El = UT.Ellipsoid(P, c)

P0 = [
    0.4 -0.1
    -0.1 0.5
]
vals = [4.1, 3.32, 2.8, 2.4]
E0L = [UT.Ellipsoid(P0, [c0x; c0x - 0.2]) for c0x in vals]
4-element Vector{Dionysos.Utils.Ellipsoid{Float64, Matrix{Float64}, Vector{Float64}}}:
 Dionysos.Utils.Ellipsoid{Float64, Matrix{Float64}, Vector{Float64}}([0.4 -0.1; -0.1 0.5], [4.1, 3.8999999999999995])
 Dionysos.Utils.Ellipsoid{Float64, Matrix{Float64}, Vector{Float64}}([0.4 -0.1; -0.1 0.5], [3.32, 3.1199999999999997])
 Dionysos.Utils.Ellipsoid{Float64, Matrix{Float64}, Vector{Float64}}([0.4 -0.1; -0.1 0.5], [2.8, 2.5999999999999996])
 Dionysos.Utils.Ellipsoid{Float64, Matrix{Float64}, Vector{Float64}}([0.4 -0.1; -0.1 0.5], [2.4, 2.1999999999999997])

Case 1: non intersection

fig1_1 = plot(; aspect_ratio = :equal);
fig1_2 = plot(; aspect_ratio = :equal);
analyze(fig1_1, fig1_2, 1)
El0 ∉ El
El0 ∩ El = ∅
plot!(fig1_1)
Example block output
plot!(fig1_2)
Example block output

Case 2: non intersection

fig2_1 = plot(; aspect_ratio = :equal);
fig2_2 = plot(; aspect_ratio = :equal);
analyze(fig2_1, fig2_2, 2)
El0 ∉ El
El0 ∩ El = ∅
plot!(fig2_1)
Example block output
plot!(fig2_2)
Example block output

Case 3: intersection, non inclusion

fig3_1 = plot(; aspect_ratio = :equal);
fig3_2 = plot(; aspect_ratio = :equal);
analyze(fig3_1, fig3_2, 3)
El0 ∉ El
El0 ∩ El ≠ ∅
plot!(fig3_1)
Example block output
plot!(fig3_2)
Example block output

Case 4: inclusion

fig4_1 = plot(; aspect_ratio = :equal);
fig4_2 = plot(; aspect_ratio = :equal);
analyze(fig4_1, fig4_2, 4)
El0 ∉ El
El0 ∩ El ≠ ∅
plot!(fig4_1)
Example block output
plot!(fig4_2)
Example block output

This page was generated using Literate.jl.