Skip to content

Instantly share code, notes, and snippets.

@saschatimme
Created January 25, 2019 16:32
Show Gist options
  • Save saschatimme/26a09c2dc15acee3789fd6d1984566a7 to your computer and use it in GitHub Desktop.
Save saschatimme/26a09c2dc15acee3789fd6d1984566a7 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [
{
"data": {
"text/plain": [
"ys (generic function with 1 method)"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"using Plots #load packages\n",
"# These come handy for plotting\n",
"xs(points) = map(p -> p[1], points)\n",
"ys(points) = map(p -> p[2], points)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Introduction to Julia and Polymake.jl\n",
"### Polymake Workshop 2019"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Things we want to cover:\n",
"\n",
"* What is Julia\n",
"* Convex Hull in Julia\n",
"* Polymake.jl"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"<img src=\"https://julialang.org/v2/img/logo.svg\" style=\"display: block; margin-left: auto; margin-right: auto; width: 50%;\" />"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
" Julia is a high-level, high-performance dynamic programming language for numerical computing\n",
"\n",
"> Looks like Python, feels like Lisp, runs like C\n",
"\n",
"* Dynamic typing + optional explicit types\n",
"* Multiple dispatch\n",
"* Just-in-time compiler (JIT) with LLVM backend\n",
"* Approaches performance of C\n",
"* Macros and metaprogramming\n",
"* **Easy** generic programming"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## Multiple dispatch + Types"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Julia has *abstract* types (mostly for dispatch) and *concrete* types."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"abstract type RockPaperScissors end\n",
"struct Rock <: RockPaperScissors end\n",
"struct Paper <: RockPaperScissors end\n",
"struct Scissors <: RockPaperScissors end"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Julia uses *multiple dispatch* to structure code"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"winner (generic function with 5 methods)"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"winner(::T, ::T) where T <: RockPaperScissors = 0\n",
"winner(::Rock, ::Scissors) = 1\n",
"winner(::Rock, ::Paper) = 1\n",
"winner(::Scissors, ::Paper) = 1\n",
"# Make symmetric cases work\n",
"winner(x, y) = winner(y, x)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\t.section\t__TEXT,__text,regular,pure_instructions\n",
"; Function winner {\n",
"; Location: In[5]:1\n",
"\txorl\t%eax, %eax\n",
"\tretl\n",
"\tnopw\t%cs:(%eax,%eax)\n",
";}\n"
]
}
],
"source": [
"@code_native winner(Rock(), Rock())"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
":paper"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"winner(Paper(), Rock())"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Convex Hull in Julia"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Let's implement the Graham scan algorithm in the plane:\n",
"\n",
"It works in 3 steps:"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"1) Compute the point with the lowest y-coordinate. Call this $p_1$.\n",
"\n",
"2) Sort the points by their polar angle with $p_1$.\n",
"\n",
"3) Iterate sorted points and check that the hull only contains points in counter clock wise order."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"<a title=\"Shiyu Ji [CC BY-SA 4.0 (https://creativecommons.org/licenses/by-sa/4.0)], from Wikimedia Commons\" href=\"https://commons.wikimedia.org/wiki/File:GrahamScanDemo.gif\"><img alt=\"GrahamScanDemo\" style=\"display: block; margin-left: auto; margin-right: auto; width: 50%;\" src=\"https://upload.wikimedia.org/wikipedia/commons/7/71/GrahamScanDemo.gif\"></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### 1) Lowest y-coordinate"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"point_with_lowest_y_coordinate (generic function with 1 method)"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"point_with_lowest_y_coordinate(points) = points[argmin(map(p -> p[2], points))]"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### 2) Sort by polar angle"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"sort_by_polar_angle (generic function with 1 method)"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Instead of sorting by polar angle it is sufficient to sort by any monotone function\n",
"# of the angle (in the first two qaudrants). So we pick the cotangent\n",
"cotangent(p, p₁) = -(p[1] - p₁[1]) / (p[2] - p₁[2])\n",
"function sort_by_polar_angle(points::AbstractVector{T}, p₁) where T \n",
" # pre sort \"bad cases\"\n",
" head, to_sort, tail = T[], T[] , T[] \n",
" for p in points\n",
" if p[2] == p₁[2] && p[1] > p₁[1]\n",
" push!(head, p)\n",
" elseif p[2] == p₁[2] && p[1] ≤ p₁[1]\n",
" push!(tail, p) \n",
" else\n",
" push!(to_sort, p)\n",
" end\n",
" end\n",
" \n",
" sorted = to_sort[sortperm(map(p-> cotangent(p, p₁), to_sort))]\n",
" [head; sorted; tail]\n",
"end"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### 3) Check for counter clockwise order"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"ccw"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\"\"\"\n",
" ccw(p₁, p₂, p₃)\n",
"Three points are a counter-clockwise turn if ccw > 0, clockwise if\n",
"ccw < 0, and collinear if ccw = 0 because ccw is a determinant that\n",
"gives twice the signed area of the triangle formed by `p₁`, `p₂` and `p₃`.\n",
"\"\"\"\n",
"ccw(p₁, p₂, p₃) = (p₂[1] - p₁[1]) * (p₃[2] - p₁[2]) -\n",
" (p₂[2] - p₁[2]) * (p₃[1] - p₁[1]) "
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"search: \u001b[0m\u001b[1mc\u001b[22m\u001b[0m\u001b[1mc\u001b[22m\u001b[0m\u001b[1mw\u001b[22m\n",
"\n"
]
},
{
"data": {
"text/latex": [
"\\begin{verbatim}\n",
"ccw(p₁, p₂, p₃)\n",
"\\end{verbatim}\n",
"Three points are a counter-clockwise turn if ccw > 0, clockwise if ccw < 0, and collinear if ccw = 0 because ccw is a determinant that gives twice the signed area of the triangle formed by \\texttt{p₁}, \\texttt{p₂} and \\texttt{p₃}.\n",
"\n"
],
"text/markdown": [
"```\n",
"ccw(p₁, p₂, p₃)\n",
"```\n",
"\n",
"Three points are a counter-clockwise turn if ccw > 0, clockwise if ccw < 0, and collinear if ccw = 0 because ccw is a determinant that gives twice the signed area of the triangle formed by `p₁`, `p₂` and `p₃`.\n"
],
"text/plain": [
"\u001b[36m ccw(p₁, p₂, p₃)\u001b[39m\n",
"\n",
" Three points are a counter-clockwise turn if ccw > 0, clockwise if ccw < 0,\n",
" and collinear if ccw = 0 because ccw is a determinant that gives twice the\n",
" signed area of the triangle formed by \u001b[36mp₁\u001b[39m, \u001b[36mp₂\u001b[39m and \u001b[36mp₃\u001b[39m."
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"?ccw"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Put everything together"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"graham_scan (generic function with 1 method)"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"function graham_scan(points)\n",
" # Find the element with the lowest y-coordinate\n",
" p₁ = point_with_lowest_y_coordinate(points)\n",
" # Now we need to sort the points by polar angle with p₁\n",
" sorted_points = sort_by_polar_angle(points, p₁)\n",
"\n",
" hull = sorted_points[1:2]\n",
" for i ∈ 3:length(sorted_points)\n",
" while length(hull) ≥ 2 && ccw(hull[end-1], hull[end], sorted_points[i]) ≤ 0\n",
" pop!(hull)\n",
" end\n",
" push!(hull, sorted_points[i])\n",
" end\n",
" hull\n",
"end"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Test whether it works"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 2400 1600\">\n",
"<defs>\n",
" <clipPath id=\"clip7400\">\n",
" <rect x=\"0\" y=\"0\" width=\"2000\" height=\"2000\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<defs>\n",
" <clipPath id=\"clip7401\">\n",
" <rect x=\"0\" y=\"0\" width=\"2400\" height=\"1600\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip7401)\" points=\"\n",
"0,1600 2400,1600 2400,0 0,0 \n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip7402\">\n",
" <rect x=\"480\" y=\"0\" width=\"1681\" height=\"1600\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip7401)\" points=\"\n",
"523.866,1503.47 1986.9,1503.47 1986.9,47.2441 523.866,47.2441 \n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip7403\">\n",
" <rect x=\"523\" y=\"47\" width=\"1464\" height=\"1457\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polyline clip-path=\"url(#clip7403)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 557.603,1503.47 557.603,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7403)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 906.197,1503.47 906.197,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7403)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1254.79,1503.47 1254.79,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7403)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1603.38,1503.47 1603.38,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7403)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1951.98,1503.47 1951.98,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7403)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 523.866,1476.89 1986.9,1476.89 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7403)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 523.866,1128.29 1986.9,1128.29 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7403)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 523.866,779.7 1986.9,779.7 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7403)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 523.866,431.107 1986.9,431.107 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7403)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 523.866,82.5132 1986.9,82.5132 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7401)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,1503.47 1986.9,1503.47 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7401)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,1503.47 523.866,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7401)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 557.603,1503.47 557.603,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7401)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 906.197,1503.47 906.197,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7401)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1254.79,1503.47 1254.79,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7401)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1603.38,1503.47 1603.38,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7401)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1951.98,1503.47 1951.98,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7401)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,1476.89 545.811,1476.89 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7401)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,1128.29 545.811,1128.29 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7401)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,779.7 545.811,779.7 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7401)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,431.107 545.811,431.107 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7401)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,82.5132 545.811,82.5132 \n",
" \"/>\n",
"<g clip-path=\"url(#clip7401)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 557.603, 1557.47)\" x=\"557.603\" y=\"1557.47\">-1.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7401)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 906.197, 1557.47)\" x=\"906.197\" y=\"1557.47\">-0.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7401)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1254.79, 1557.47)\" x=\"1254.79\" y=\"1557.47\">0.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7401)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1603.38, 1557.47)\" x=\"1603.38\" y=\"1557.47\">0.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7401)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1951.98, 1557.47)\" x=\"1951.98\" y=\"1557.47\">1.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7401)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 499.866, 1494.39)\" x=\"499.866\" y=\"1494.39\">-1.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7401)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 499.866, 1145.79)\" x=\"499.866\" y=\"1145.79\">-0.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7401)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 499.866, 797.2)\" x=\"499.866\" y=\"797.2\">0.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7401)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 499.866, 448.607)\" x=\"499.866\" y=\"448.607\">0.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7401)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 499.866, 100.013)\" x=\"499.866\" y=\"100.013\">1.0</text>\n",
"</g>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1116.04\" cy=\"959.93\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1116.04\" cy=\"959.93\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1592.9\" cy=\"1439.14\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1592.9\" cy=\"1439.14\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"692.392\" cy=\"226.89\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"692.392\" cy=\"226.89\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"664.112\" cy=\"311.156\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"664.112\" cy=\"311.156\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1035.02\" cy=\"1336.97\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1035.02\" cy=\"1336.97\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"649.64\" cy=\"243.369\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"649.64\" cy=\"243.369\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1561.73\" cy=\"898.564\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1561.73\" cy=\"898.564\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1664.93\" cy=\"194.278\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1664.93\" cy=\"194.278\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1892.42\" cy=\"1462.26\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1892.42\" cy=\"1462.26\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1478.37\" cy=\"1180.78\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1478.37\" cy=\"1180.78\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1379.55\" cy=\"1240.29\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1379.55\" cy=\"1240.29\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1043.74\" cy=\"885.801\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1043.74\" cy=\"885.801\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1849.64\" cy=\"992.984\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1849.64\" cy=\"992.984\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1422.86\" cy=\"1207.41\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1422.86\" cy=\"1207.41\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1780.77\" cy=\"896.82\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1780.77\" cy=\"896.82\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1163.24\" cy=\"1059.43\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1163.24\" cy=\"1059.43\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1884.2\" cy=\"88.4582\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1884.2\" cy=\"88.4582\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"972.032\" cy=\"1366.88\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"972.032\" cy=\"1366.88\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"609.008\" cy=\"775.568\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"609.008\" cy=\"775.568\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"992.733\" cy=\"1156.25\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"992.733\" cy=\"1156.25\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1915.01\" cy=\"468.363\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1915.01\" cy=\"468.363\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1438.96\" cy=\"170.647\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1438.96\" cy=\"170.647\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1194.09\" cy=\"852.816\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1194.09\" cy=\"852.816\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1152.98\" cy=\"545.653\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1152.98\" cy=\"545.653\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1492.68\" cy=\"982.08\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1492.68\" cy=\"982.08\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"676.269\" cy=\"903.918\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"676.269\" cy=\"903.918\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1633.48\" cy=\"416.94\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1633.48\" cy=\"416.94\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"631.237\" cy=\"1423.46\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"631.237\" cy=\"1423.46\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1777.52\" cy=\"195.082\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1777.52\" cy=\"195.082\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1907.52\" cy=\"198.545\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1907.52\" cy=\"198.545\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1476.68\" cy=\"955.548\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1476.68\" cy=\"955.548\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"767.699\" cy=\"160.035\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"767.699\" cy=\"160.035\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1870.45\" cy=\"989.016\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1870.45\" cy=\"989.016\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1870.19\" cy=\"1197.63\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1870.19\" cy=\"1197.63\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1087.69\" cy=\"1243.27\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1087.69\" cy=\"1243.27\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"680.012\" cy=\"480.459\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"680.012\" cy=\"480.459\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1173.72\" cy=\"299.953\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1173.72\" cy=\"299.953\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1765.44\" cy=\"299.315\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1765.44\" cy=\"299.315\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"845.96\" cy=\"259.184\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"845.96\" cy=\"259.184\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1833.46\" cy=\"806.023\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1833.46\" cy=\"806.023\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1190.44\" cy=\"1141.11\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1190.44\" cy=\"1141.11\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"616.37\" cy=\"299.596\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"616.37\" cy=\"299.596\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1825.14\" cy=\"1241.82\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1825.14\" cy=\"1241.82\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"579.789\" cy=\"706.202\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"579.789\" cy=\"706.202\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"960.71\" cy=\"850.458\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"960.71\" cy=\"850.458\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1750.45\" cy=\"343.297\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1750.45\" cy=\"343.297\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"919.3\" cy=\"1259.46\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"919.3\" cy=\"1259.46\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1889\" cy=\"1185.79\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1889\" cy=\"1185.79\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1728.53\" cy=\"979.376\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1728.53\" cy=\"979.376\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1578.23\" cy=\"362.48\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1578.23\" cy=\"362.48\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1139.03\" cy=\"600.33\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1139.03\" cy=\"600.33\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"740.991\" cy=\"1265.46\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"740.991\" cy=\"1265.46\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1945.49\" cy=\"248.916\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1945.49\" cy=\"248.916\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1388.05\" cy=\"1239.45\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1388.05\" cy=\"1239.45\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1554.19\" cy=\"118.295\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1554.19\" cy=\"118.295\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"814.141\" cy=\"1300.6\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"814.141\" cy=\"1300.6\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"959.601\" cy=\"530.173\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"959.601\" cy=\"530.173\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"978.747\" cy=\"565.487\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"978.747\" cy=\"565.487\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1686.19\" cy=\"950.39\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1686.19\" cy=\"950.39\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1074.1\" cy=\"643.564\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1074.1\" cy=\"643.564\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1529\" cy=\"558.251\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1529\" cy=\"558.251\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1267.27\" cy=\"250.381\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1267.27\" cy=\"250.381\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1708.84\" cy=\"1302.18\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1708.84\" cy=\"1302.18\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1890.45\" cy=\"898.56\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1890.45\" cy=\"898.56\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1112.95\" cy=\"184.464\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1112.95\" cy=\"184.464\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"927.185\" cy=\"219.744\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"927.185\" cy=\"219.744\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1844\" cy=\"1447.98\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1844\" cy=\"1447.98\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1850.77\" cy=\"588.275\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1850.77\" cy=\"588.275\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"970.15\" cy=\"1416.8\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"970.15\" cy=\"1416.8\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1870.21\" cy=\"1187.75\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1870.21\" cy=\"1187.75\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"980.974\" cy=\"144.218\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"980.974\" cy=\"144.218\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1697.78\" cy=\"89.6241\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1697.78\" cy=\"89.6241\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"632.455\" cy=\"1357.95\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"632.455\" cy=\"1357.95\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"874.547\" cy=\"1410.54\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"874.547\" cy=\"1410.54\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1647.96\" cy=\"102.37\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1647.96\" cy=\"102.37\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1005.08\" cy=\"709.171\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1005.08\" cy=\"709.171\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1697.25\" cy=\"509.749\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1697.25\" cy=\"509.749\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1381.3\" cy=\"984.104\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1381.3\" cy=\"984.104\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1073.3\" cy=\"1339.34\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1073.3\" cy=\"1339.34\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1111.3\" cy=\"882.77\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1111.3\" cy=\"882.77\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"565.272\" cy=\"137.45\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"565.272\" cy=\"137.45\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1026.55\" cy=\"711.116\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1026.55\" cy=\"711.116\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1563.27\" cy=\"1105.97\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1563.27\" cy=\"1105.97\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1052.16\" cy=\"1145.49\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1052.16\" cy=\"1145.49\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1612.72\" cy=\"952.7\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1612.72\" cy=\"952.7\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1120.79\" cy=\"132.397\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1120.79\" cy=\"132.397\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"862.008\" cy=\"1018.93\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"862.008\" cy=\"1018.93\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"982.839\" cy=\"372.314\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"982.839\" cy=\"372.314\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"615.702\" cy=\"699.519\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"615.702\" cy=\"699.519\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1146.23\" cy=\"651.136\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1146.23\" cy=\"651.136\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1729.44\" cy=\"839.167\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1729.44\" cy=\"839.167\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"712.342\" cy=\"974.361\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"712.342\" cy=\"974.361\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1251.49\" cy=\"135.406\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1251.49\" cy=\"135.406\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"784.069\" cy=\"913.301\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"784.069\" cy=\"913.301\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1390.67\" cy=\"666.182\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1390.67\" cy=\"666.182\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1805.51\" cy=\"174.741\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1805.51\" cy=\"174.741\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"956.682\" cy=\"1326.1\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"956.682\" cy=\"1326.1\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1227.36\" cy=\"1006.99\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1227.36\" cy=\"1006.99\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1118.17\" cy=\"938.643\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1118.17\" cy=\"938.643\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1664.72\" cy=\"603.947\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1664.72\" cy=\"603.947\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1945.49\" cy=\"248.916\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1945.49\" cy=\"248.916\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1884.2\" cy=\"88.4582\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1884.2\" cy=\"88.4582\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1697.78\" cy=\"89.6241\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1697.78\" cy=\"89.6241\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"565.272\" cy=\"137.45\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"565.272\" cy=\"137.45\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"579.789\" cy=\"706.202\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"579.789\" cy=\"706.202\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"631.237\" cy=\"1423.46\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"631.237\" cy=\"1423.46\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1892.42\" cy=\"1462.26\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7403)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1892.42\" cy=\"1462.26\" r=\"14\"/>\n",
"</svg>\n"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# sample input data\n",
"input_points = [rand(2) .* 2 .- 1 for _ in 1:100]\n",
"\n",
"hull = graham_scan(input_points)\n",
"scatter(xs(input_points), ys(input_points), aspect_ratio=:equal, legend=false)\n",
"scatter!(xs(hull), ys(hull), color=:red, legend=false)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### But we should do exact arithmetic and not floating point..."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Okay, no problem. Let's approximate our floating points numbers with rational numbers."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"100-element Array{Array{Rational{Int64},1},1}:\n",
" [-1//5, -7//27] \n",
" [16//33, -35//37]\n",
" [-25//31, 23//29]\n",
" [-39//46, 37//55]\n",
" [-6//19, -4//5] \n",
" [-33//38, 10//13]\n",
" [11//25, -6//35] \n",
" [10//17, 21//25] \n",
" [32//35, -45//46]\n",
" [8//25, -19//33] \n",
" [5//28, -33//50] \n",
" [-10//33, -5//33]\n",
" [29//34, -11//36]\n",
" ⋮ \n",
" [-11//12, 3//26] \n",
" [-5//32, 5//27] \n",
" [17//25, -3//35] \n",
" [-7//9, -7//25] \n",
" [-1//175, 37//40]\n",
" [-25//37, -5//26]\n",
" [7//36, 6//37] \n",
" [15//19, 33//38] \n",
" [-3//7, -29//37] \n",
" [-1//25, -14//43]\n",
" [-8//41, -5//22] \n",
" [10//17, 21//83] "
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rational_input_points = map(p -> rationalize.(p; tol=1/1000), input_points)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Do we have to adapt the algorithm?"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 2400 1600\">\n",
"<defs>\n",
" <clipPath id=\"clip7600\">\n",
" <rect x=\"0\" y=\"0\" width=\"2000\" height=\"2000\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<defs>\n",
" <clipPath id=\"clip7601\">\n",
" <rect x=\"0\" y=\"0\" width=\"2400\" height=\"1600\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip7601)\" points=\"\n",
"0,1600 2400,1600 2400,0 0,0 \n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip7602\">\n",
" <rect x=\"480\" y=\"0\" width=\"1681\" height=\"1600\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip7601)\" points=\"\n",
"523.881,1503.47 1986.88,1503.47 1986.88,47.2441 523.881,47.2441 \n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip7603\">\n",
" <rect x=\"523\" y=\"47\" width=\"1464\" height=\"1457\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polyline clip-path=\"url(#clip7603)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 556.98,1503.47 556.98,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7603)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 905.884,1503.47 905.884,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7603)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1254.79,1503.47 1254.79,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7603)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1603.69,1503.47 1603.69,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7603)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1952.6,1503.47 1952.6,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7603)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 523.881,1477.43 1986.88,1477.43 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7603)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 523.881,1128.53 1986.88,1128.53 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7603)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 523.881,779.621 1986.88,779.621 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7603)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 523.881,430.717 1986.88,430.717 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7603)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 523.881,81.8124 1986.88,81.8124 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7601)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.881,1503.47 1986.88,1503.47 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7601)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.881,1503.47 523.881,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7601)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 556.98,1503.47 556.98,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7601)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 905.884,1503.47 905.884,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7601)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1254.79,1503.47 1254.79,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7601)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1603.69,1503.47 1603.69,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7601)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1952.6,1503.47 1952.6,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7601)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.881,1477.43 545.826,1477.43 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7601)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.881,1128.53 545.826,1128.53 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7601)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.881,779.621 545.826,779.621 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7601)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.881,430.717 545.826,430.717 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7601)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.881,81.8124 545.826,81.8124 \n",
" \"/>\n",
"<g clip-path=\"url(#clip7601)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 556.98, 1557.47)\" x=\"556.98\" y=\"1557.47\">-1.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7601)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 905.884, 1557.47)\" x=\"905.884\" y=\"1557.47\">-0.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7601)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1254.79, 1557.47)\" x=\"1254.79\" y=\"1557.47\">0.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7601)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1603.69, 1557.47)\" x=\"1603.69\" y=\"1557.47\">0.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7601)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1952.6, 1557.47)\" x=\"1952.6\" y=\"1557.47\">1.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7601)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 499.881, 1494.93)\" x=\"499.881\" y=\"1494.93\">-1.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7601)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 499.881, 1146.03)\" x=\"499.881\" y=\"1146.03\">-0.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7601)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 499.881, 797.121)\" x=\"499.881\" y=\"797.121\">0.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7601)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 499.881, 448.217)\" x=\"499.881\" y=\"448.217\">0.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7601)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 499.881, 99.3124)\" x=\"499.881\" y=\"99.3124\">1.0</text>\n",
"</g>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1115.23\" cy=\"960.535\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1115.23\" cy=\"960.535\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1593.12\" cy=\"1439.71\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1593.12\" cy=\"1439.71\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"692.039\" cy=\"226.187\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"692.039\" cy=\"226.187\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"663.168\" cy=\"310.186\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"663.168\" cy=\"310.186\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1034.43\" cy=\"1337.87\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1034.43\" cy=\"1337.87\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"648.797\" cy=\"242.845\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"648.797\" cy=\"242.845\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1561.82\" cy=\"899.246\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1561.82\" cy=\"899.246\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1665.26\" cy=\"193.462\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1665.26\" cy=\"193.462\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1892.79\" cy=\"1462.26\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1892.79\" cy=\"1462.26\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1478.09\" cy=\"1181.39\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1478.09\" cy=\"1181.39\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1379.4\" cy=\"1240.18\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1379.4\" cy=\"1240.18\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1043.33\" cy=\"885.35\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1043.33\" cy=\"885.35\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1849.98\" cy=\"992.841\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1849.98\" cy=\"992.841\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1423.23\" cy=\"1207.31\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1423.23\" cy=\"1207.31\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1781.71\" cy=\"897.433\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1781.71\" cy=\"897.433\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1163.77\" cy=\"1060.26\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1163.77\" cy=\"1060.26\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1885.07\" cy=\"88.4582\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1885.07\" cy=\"88.4582\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"971.304\" cy=\"1367.25\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"971.304\" cy=\"1367.25\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"608.669\" cy=\"774.809\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"608.669\" cy=\"774.809\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"993.11\" cy=\"1156.82\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"993.11\" cy=\"1156.82\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1915.87\" cy=\"467.444\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1915.87\" cy=\"467.444\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1439.5\" cy=\"170.624\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1439.5\" cy=\"170.624\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1194.11\" cy=\"853.075\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1194.11\" cy=\"853.075\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1152.67\" cy=\"544.715\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1152.67\" cy=\"544.715\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1493.51\" cy=\"982.211\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1493.51\" cy=\"982.211\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"676.118\" cy=\"904.23\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"676.118\" cy=\"904.23\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1633.6\" cy=\"416.761\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1633.6\" cy=\"416.761\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"630.433\" cy=\"1423.75\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"630.433\" cy=\"1423.75\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1778.15\" cy=\"194.362\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1778.15\" cy=\"194.362\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1907.58\" cy=\"198.114\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1907.58\" cy=\"198.114\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1476.82\" cy=\"956.282\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1476.82\" cy=\"956.282\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"767.945\" cy=\"159.347\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"767.945\" cy=\"159.347\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1870.5\" cy=\"988.964\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1870.5\" cy=\"988.964\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1870.5\" cy=\"1198.31\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1870.5\" cy=\"1198.31\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1087.31\" cy=\"1242.92\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1087.31\" cy=\"1242.92\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"680.122\" cy=\"480.56\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"680.122\" cy=\"480.56\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1174.27\" cy=\"299.878\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1174.27\" cy=\"299.878\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1766.52\" cy=\"298.374\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1766.52\" cy=\"298.374\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"845.728\" cy=\"259.221\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"845.728\" cy=\"259.221\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1833.46\" cy=\"806.46\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1833.46\" cy=\"806.46\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1189.88\" cy=\"1141.45\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1189.88\" cy=\"1141.45\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"615.13\" cy=\"298.909\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"615.13\" cy=\"298.909\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1825.72\" cy=\"1241.55\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1825.72\" cy=\"1241.55\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"579.49\" cy=\"706.168\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"579.49\" cy=\"706.168\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"960.974\" cy=\"850.826\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"960.974\" cy=\"850.826\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1750.6\" cy=\"343.491\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1750.6\" cy=\"343.491\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"918.806\" cy=\"1259.37\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"918.806\" cy=\"1259.37\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1889.16\" cy=\"1186.68\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1889.16\" cy=\"1186.68\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1729.3\" cy=\"978.995\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1729.3\" cy=\"978.995\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1578.77\" cy=\"362.638\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1578.77\" cy=\"362.638\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1138.49\" cy=\"599.542\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1138.49\" cy=\"599.542\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"740.614\" cy=\"1265.97\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"740.614\" cy=\"1265.97\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1945.48\" cy=\"247.957\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1945.48\" cy=\"247.957\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1387.7\" cy=\"1239.15\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1387.7\" cy=\"1239.15\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1553.85\" cy=\"117.597\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1553.85\" cy=\"117.597\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"814.067\" cy=\"1300.37\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"814.067\" cy=\"1300.37\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"959.562\" cy=\"530.404\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"959.562\" cy=\"530.404\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"978.911\" cy=\"564.911\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"978.911\" cy=\"564.911\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1686.77\" cy=\"949.819\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1686.77\" cy=\"949.819\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1073.88\" cy=\"643.936\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1073.88\" cy=\"643.936\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1528.93\" cy=\"557.591\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1528.93\" cy=\"557.591\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1267.95\" cy=\"249.287\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1267.95\" cy=\"249.287\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1709.88\" cy=\"1302.98\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1709.88\" cy=\"1302.98\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1891.03\" cy=\"899.246\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1891.03\" cy=\"899.246\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1112.38\" cy=\"184.431\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1112.38\" cy=\"184.431\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"926.408\" cy=\"218.638\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"926.408\" cy=\"218.638\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1844.05\" cy=\"1448.36\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1844.05\" cy=\"1448.36\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1850.83\" cy=\"587.724\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1850.83\" cy=\"587.724\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"969.321\" cy=\"1416.75\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"969.321\" cy=\"1416.75\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1870.5\" cy=\"1188.68\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1870.5\" cy=\"1188.68\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"980.649\" cy=\"143.384\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"980.649\" cy=\"143.384\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1698.85\" cy=\"89.5658\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1698.85\" cy=\"89.5658\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"631.745\" cy=\"1357.81\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"631.745\" cy=\"1357.81\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"874.166\" cy=\"1410.97\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"874.166\" cy=\"1410.97\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1648.42\" cy=\"102.336\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1648.42\" cy=\"102.336\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1004.29\" cy=\"708.416\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1004.29\" cy=\"708.416\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1697.3\" cy=\"509.502\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1697.3\" cy=\"509.502\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1381.66\" cy=\"984.859\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1381.66\" cy=\"984.859\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1072.75\" cy=\"1340.36\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1072.75\" cy=\"1340.36\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1111.12\" cy=\"883.001\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1111.12\" cy=\"883.001\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"565.287\" cy=\"136.903\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"565.287\" cy=\"136.903\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1026.93\" cy=\"711.542\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1026.93\" cy=\"711.542\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1563.12\" cy=\"1106.72\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1563.12\" cy=\"1106.72\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1052.2\" cy=\"1145.14\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1052.2\" cy=\"1145.14\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1613.66\" cy=\"952.114\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1613.66\" cy=\"952.114\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1120.59\" cy=\"131.656\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1120.59\" cy=\"131.656\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"862.271\" cy=\"1019.49\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"862.271\" cy=\"1019.49\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"982.473\" cy=\"372.566\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"982.473\" cy=\"372.566\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"615.13\" cy=\"699.105\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"615.13\" cy=\"699.105\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1145.76\" cy=\"650.397\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1145.76\" cy=\"650.397\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1729.3\" cy=\"839.434\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1729.3\" cy=\"839.434\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"712.048\" cy=\"975.008\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"712.048\" cy=\"975.008\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1250.8\" cy=\"134.148\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1250.8\" cy=\"134.148\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"783.296\" cy=\"913.815\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"783.296\" cy=\"913.815\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1390.47\" cy=\"666.463\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1390.47\" cy=\"666.463\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1805.69\" cy=\"173.629\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1805.69\" cy=\"173.629\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"955.728\" cy=\"1326.55\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"955.728\" cy=\"1326.55\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1226.88\" cy=\"1006.82\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1226.88\" cy=\"1006.82\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1118.63\" cy=\"938.214\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1118.63\" cy=\"938.214\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1665.26\" cy=\"603.067\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1665.26\" cy=\"603.067\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1945.48\" cy=\"247.957\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1945.48\" cy=\"247.957\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1885.07\" cy=\"88.4582\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1885.07\" cy=\"88.4582\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1698.85\" cy=\"89.5658\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1698.85\" cy=\"89.5658\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"565.287\" cy=\"136.903\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"565.287\" cy=\"136.903\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"579.49\" cy=\"706.168\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"579.49\" cy=\"706.168\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"630.433\" cy=\"1423.75\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"630.433\" cy=\"1423.75\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1892.79\" cy=\"1462.26\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7603)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1892.79\" cy=\"1462.26\" r=\"14\"/>\n",
"</svg>\n"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"hull = graham_scan(rational_input_points)\n",
"\n",
"scatter(xs(rational_input_points), ys(rational_input_points), aspect_ratio=:equal, legend=false)\n",
"scatter!(xs(hull), ys(hull), color=:red, legend=false)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### But representing the points as a vector of vectors of length 2 is not great.\n",
"\n",
"### Can I use my own point type?"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"struct Point2D{T}\n",
" x::T\n",
" y::T\n",
"end\n",
"Point2D(vec::AbstractVector) = Point2D(vec[1], vec[2])\n",
"function Base.getindex(P::Point2D, i::Integer)\n",
" @boundscheck 1 ≤ i ≤ 2\n",
" return i == 1 ? P.x : P.y\n",
"end\n",
"Base.show(io::IO, P::Point2D) = print(io, \"(x: $(P.x), y: $(P.y))\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## Let's convert our rational vectors to points and see what happens"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 2400 1600\">\n",
"<defs>\n",
" <clipPath id=\"clip7800\">\n",
" <rect x=\"0\" y=\"0\" width=\"2000\" height=\"2000\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<defs>\n",
" <clipPath id=\"clip7801\">\n",
" <rect x=\"0\" y=\"0\" width=\"2400\" height=\"1600\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip7801)\" points=\"\n",
"0,1600 2400,1600 2400,0 0,0 \n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip7802\">\n",
" <rect x=\"480\" y=\"0\" width=\"1681\" height=\"1600\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip7801)\" points=\"\n",
"523.866,1503.47 1986.9,1503.47 1986.9,47.2441 523.866,47.2441 \n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip7803\">\n",
" <rect x=\"523\" y=\"47\" width=\"1464\" height=\"1457\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polyline clip-path=\"url(#clip7803)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 557.603,1503.47 557.603,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7803)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 906.197,1503.47 906.197,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7803)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1254.79,1503.47 1254.79,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7803)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1603.38,1503.47 1603.38,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7803)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1951.98,1503.47 1951.98,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7803)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 523.866,1476.89 1986.9,1476.89 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7803)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 523.866,1128.29 1986.9,1128.29 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7803)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 523.866,779.7 1986.9,779.7 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7803)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 523.866,431.107 1986.9,431.107 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7803)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 523.866,82.5132 1986.9,82.5132 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7801)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,1503.47 1986.9,1503.47 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7801)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,1503.47 523.866,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7801)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 557.603,1503.47 557.603,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7801)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 906.197,1503.47 906.197,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7801)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1254.79,1503.47 1254.79,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7801)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1603.38,1503.47 1603.38,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7801)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1951.98,1503.47 1951.98,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7801)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,1476.89 545.811,1476.89 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7801)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,1128.29 545.811,1128.29 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7801)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,779.7 545.811,779.7 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7801)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,431.107 545.811,431.107 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7801)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,82.5132 545.811,82.5132 \n",
" \"/>\n",
"<g clip-path=\"url(#clip7801)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 557.603, 1557.47)\" x=\"557.603\" y=\"1557.47\">-1.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7801)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 906.197, 1557.47)\" x=\"906.197\" y=\"1557.47\">-0.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7801)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1254.79, 1557.47)\" x=\"1254.79\" y=\"1557.47\">0.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7801)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1603.38, 1557.47)\" x=\"1603.38\" y=\"1557.47\">0.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7801)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1951.98, 1557.47)\" x=\"1951.98\" y=\"1557.47\">1.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7801)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 499.866, 1494.39)\" x=\"499.866\" y=\"1494.39\">-1.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7801)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 499.866, 1145.79)\" x=\"499.866\" y=\"1145.79\">-0.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7801)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 499.866, 797.2)\" x=\"499.866\" y=\"797.2\">0.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7801)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 499.866, 448.607)\" x=\"499.866\" y=\"448.607\">0.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7801)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 499.866, 100.013)\" x=\"499.866\" y=\"100.013\">1.0</text>\n",
"</g>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1116.04\" cy=\"959.93\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1116.04\" cy=\"959.93\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1592.9\" cy=\"1439.14\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1592.9\" cy=\"1439.14\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"692.392\" cy=\"226.89\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"692.392\" cy=\"226.89\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"664.112\" cy=\"311.156\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"664.112\" cy=\"311.156\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1035.02\" cy=\"1336.97\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1035.02\" cy=\"1336.97\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"649.64\" cy=\"243.369\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"649.64\" cy=\"243.369\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1561.73\" cy=\"898.564\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1561.73\" cy=\"898.564\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1664.93\" cy=\"194.278\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1664.93\" cy=\"194.278\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1892.42\" cy=\"1462.26\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1892.42\" cy=\"1462.26\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1478.37\" cy=\"1180.78\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1478.37\" cy=\"1180.78\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1379.55\" cy=\"1240.29\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1379.55\" cy=\"1240.29\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1043.74\" cy=\"885.801\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1043.74\" cy=\"885.801\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1849.64\" cy=\"992.984\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1849.64\" cy=\"992.984\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1422.86\" cy=\"1207.41\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1422.86\" cy=\"1207.41\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1780.77\" cy=\"896.82\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1780.77\" cy=\"896.82\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1163.24\" cy=\"1059.43\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1163.24\" cy=\"1059.43\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1884.2\" cy=\"88.4582\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1884.2\" cy=\"88.4582\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"972.032\" cy=\"1366.88\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"972.032\" cy=\"1366.88\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"609.008\" cy=\"775.568\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"609.008\" cy=\"775.568\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"992.733\" cy=\"1156.25\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"992.733\" cy=\"1156.25\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1915.01\" cy=\"468.363\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1915.01\" cy=\"468.363\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1438.96\" cy=\"170.647\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1438.96\" cy=\"170.647\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1194.09\" cy=\"852.816\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1194.09\" cy=\"852.816\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1152.98\" cy=\"545.653\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1152.98\" cy=\"545.653\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1492.68\" cy=\"982.08\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1492.68\" cy=\"982.08\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"676.269\" cy=\"903.918\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"676.269\" cy=\"903.918\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1633.48\" cy=\"416.94\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1633.48\" cy=\"416.94\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"631.237\" cy=\"1423.46\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"631.237\" cy=\"1423.46\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1777.52\" cy=\"195.082\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1777.52\" cy=\"195.082\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1907.52\" cy=\"198.545\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1907.52\" cy=\"198.545\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1476.68\" cy=\"955.548\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1476.68\" cy=\"955.548\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"767.699\" cy=\"160.035\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"767.699\" cy=\"160.035\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1870.45\" cy=\"989.016\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1870.45\" cy=\"989.016\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1870.19\" cy=\"1197.63\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1870.19\" cy=\"1197.63\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1087.69\" cy=\"1243.27\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1087.69\" cy=\"1243.27\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"680.012\" cy=\"480.459\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"680.012\" cy=\"480.459\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1173.72\" cy=\"299.953\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1173.72\" cy=\"299.953\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1765.44\" cy=\"299.315\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1765.44\" cy=\"299.315\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"845.96\" cy=\"259.184\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"845.96\" cy=\"259.184\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1833.46\" cy=\"806.023\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1833.46\" cy=\"806.023\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1190.44\" cy=\"1141.11\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1190.44\" cy=\"1141.11\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"616.37\" cy=\"299.596\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"616.37\" cy=\"299.596\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1825.14\" cy=\"1241.82\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1825.14\" cy=\"1241.82\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"579.789\" cy=\"706.202\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"579.789\" cy=\"706.202\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"960.71\" cy=\"850.458\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"960.71\" cy=\"850.458\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1750.45\" cy=\"343.297\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1750.45\" cy=\"343.297\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"919.3\" cy=\"1259.46\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"919.3\" cy=\"1259.46\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1889\" cy=\"1185.79\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1889\" cy=\"1185.79\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1728.53\" cy=\"979.376\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1728.53\" cy=\"979.376\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1578.23\" cy=\"362.48\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1578.23\" cy=\"362.48\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1139.03\" cy=\"600.33\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1139.03\" cy=\"600.33\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"740.991\" cy=\"1265.46\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"740.991\" cy=\"1265.46\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1945.49\" cy=\"248.916\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1945.49\" cy=\"248.916\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1388.05\" cy=\"1239.45\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1388.05\" cy=\"1239.45\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1554.19\" cy=\"118.295\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1554.19\" cy=\"118.295\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"814.141\" cy=\"1300.6\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"814.141\" cy=\"1300.6\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"959.601\" cy=\"530.173\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"959.601\" cy=\"530.173\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"978.747\" cy=\"565.487\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"978.747\" cy=\"565.487\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1686.19\" cy=\"950.39\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1686.19\" cy=\"950.39\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1074.1\" cy=\"643.564\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1074.1\" cy=\"643.564\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1529\" cy=\"558.251\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1529\" cy=\"558.251\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1267.27\" cy=\"250.381\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1267.27\" cy=\"250.381\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1708.84\" cy=\"1302.18\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1708.84\" cy=\"1302.18\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1890.45\" cy=\"898.56\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1890.45\" cy=\"898.56\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1112.95\" cy=\"184.464\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1112.95\" cy=\"184.464\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"927.185\" cy=\"219.744\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"927.185\" cy=\"219.744\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1844\" cy=\"1447.98\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1844\" cy=\"1447.98\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1850.77\" cy=\"588.275\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1850.77\" cy=\"588.275\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"970.15\" cy=\"1416.8\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"970.15\" cy=\"1416.8\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1870.21\" cy=\"1187.75\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1870.21\" cy=\"1187.75\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"980.974\" cy=\"144.218\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"980.974\" cy=\"144.218\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1697.78\" cy=\"89.6241\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1697.78\" cy=\"89.6241\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"632.455\" cy=\"1357.95\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"632.455\" cy=\"1357.95\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"874.547\" cy=\"1410.54\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"874.547\" cy=\"1410.54\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1647.96\" cy=\"102.37\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1647.96\" cy=\"102.37\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1005.08\" cy=\"709.171\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1005.08\" cy=\"709.171\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1697.25\" cy=\"509.749\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1697.25\" cy=\"509.749\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1381.3\" cy=\"984.104\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1381.3\" cy=\"984.104\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1073.3\" cy=\"1339.34\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1073.3\" cy=\"1339.34\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1111.3\" cy=\"882.77\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1111.3\" cy=\"882.77\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"565.272\" cy=\"137.45\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"565.272\" cy=\"137.45\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1026.55\" cy=\"711.116\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1026.55\" cy=\"711.116\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1563.27\" cy=\"1105.97\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1563.27\" cy=\"1105.97\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1052.16\" cy=\"1145.49\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1052.16\" cy=\"1145.49\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1612.72\" cy=\"952.7\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1612.72\" cy=\"952.7\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1120.79\" cy=\"132.397\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1120.79\" cy=\"132.397\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"862.008\" cy=\"1018.93\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"862.008\" cy=\"1018.93\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"982.839\" cy=\"372.314\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"982.839\" cy=\"372.314\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"615.702\" cy=\"699.519\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"615.702\" cy=\"699.519\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1146.23\" cy=\"651.136\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1146.23\" cy=\"651.136\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1729.44\" cy=\"839.167\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1729.44\" cy=\"839.167\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"712.342\" cy=\"974.361\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"712.342\" cy=\"974.361\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1251.49\" cy=\"135.406\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1251.49\" cy=\"135.406\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"784.069\" cy=\"913.301\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"784.069\" cy=\"913.301\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1390.67\" cy=\"666.182\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1390.67\" cy=\"666.182\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1805.51\" cy=\"174.741\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1805.51\" cy=\"174.741\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"956.682\" cy=\"1326.1\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"956.682\" cy=\"1326.1\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1227.36\" cy=\"1006.99\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1227.36\" cy=\"1006.99\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1118.17\" cy=\"938.643\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1118.17\" cy=\"938.643\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1664.72\" cy=\"603.947\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1664.72\" cy=\"603.947\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1944.86\" cy=\"248.51\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1944.86\" cy=\"248.51\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1884.51\" cy=\"89.153\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1884.51\" cy=\"89.153\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1698.45\" cy=\"90.2597\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1698.45\" cy=\"90.2597\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"565.903\" cy=\"137.554\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"565.903\" cy=\"137.554\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"580.093\" cy=\"706.312\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"580.093\" cy=\"706.312\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"630.991\" cy=\"1423.26\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"630.991\" cy=\"1423.26\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1892.22\" cy=\"1461.73\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1892.22\" cy=\"1461.73\" r=\"14\"/>\n",
"</svg>\n"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rational_2D_points = Point2D.(rational_input_points)\n",
"hull = graham_scan(rational_2D_points)\n",
"scatter(xs(input_points), ys(input_points), aspect_ratio=:equal, legend=false)\n",
"scatter!(xs(hull), ys(hull), color=:red, legend=false)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## For me points are a matrix. How do I make this?"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"We can reinterpret a Matrix as a Vector of Points"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"100-element reshape(reinterpret(Point2D{Float64}, ::Array{Float64,2}), 100) with eltype Point2D{Float64}:\n",
" (x: 0.9044208665273723, y: 0.29341187249389433) \n",
" (x: 0.9751517706256516, y: 0.8344832214891069) \n",
" (x: 0.41604520081793606, y: 0.6426793554528931) \n",
" (x: 0.820429402057951, y: 0.8821901112063786) \n",
" (x: 0.8186767063067331, y: 0.21401535400917648) \n",
" (x: 0.32783389251926676, y: 0.8044976086728046) \n",
" (x: 0.048312632218951546, y: 0.44745932638304153)\n",
" (x: 0.23140557752439173, y: 0.7273763250094571) \n",
" (x: 0.7589138091592829, y: 0.2779146770025289) \n",
" (x: 0.12990601223972487, y: 0.38811957013337817) \n",
" (x: 0.5979137837297486, y: 0.14713050932812055) \n",
" (x: 0.23578214147471255, y: 0.5946981966262728) \n",
" (x: 0.4373533159148242, y: 0.6632429586644297) \n",
" ⋮ \n",
" (x: 0.6227008338367637, y: 0.7012896571861733) \n",
" (x: 0.8876801902461027, y: 0.5961244980645486) \n",
" (x: 0.7350386983109707, y: 0.05033090779663851) \n",
" (x: 0.34528826764336507, y: 0.5787549215254548) \n",
" (x: 0.8521288305863948, y: 0.4183552967307904) \n",
" (x: 0.6763927617700833, y: 0.7461898854267326) \n",
" (x: 0.10408160318568638, y: 0.05452354062430209) \n",
" (x: 0.020418460855867293, y: 0.35401182939819775)\n",
" (x: 0.20391983982839013, y: 0.31387854861689424) \n",
" (x: 0.4207149460832893, y: 0.7206749147571876) \n",
" (x: 0.8738805269006147, y: 0.9200735810434015) \n",
" (x: 0.5201573609770371, y: 0.574269286647922) "
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A = rand(2, 100)\n",
"reinterpreted_points = reshape(reinterpret(Point2D{eltype(A)}, A), size(A,2))"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"text/plain": [
"graham_scan (generic function with 2 methods)"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Let's write a new method\n",
"function graham_scan(A::AbstractMatrix)\n",
" m, n = size(A)\n",
" vec_of_ntuples = reshape(reinterpret(Point2D{eltype(A)}, A), n)\n",
" graham_scan(vec_of_ntuples)\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 2400 1600\">\n",
"<defs>\n",
" <clipPath id=\"clip8000\">\n",
" <rect x=\"0\" y=\"0\" width=\"2000\" height=\"2000\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<defs>\n",
" <clipPath id=\"clip8001\">\n",
" <rect x=\"0\" y=\"0\" width=\"2400\" height=\"1600\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip8001)\" points=\"\n",
"0,1600 2400,1600 2400,0 0,0 \n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip8002\">\n",
" <rect x=\"480\" y=\"0\" width=\"1681\" height=\"1600\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip8001)\" points=\"\n",
"526.351,1503.47 1983.06,1503.47 1983.06,47.2441 526.351,47.2441 \n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip8003\">\n",
" <rect x=\"526\" y=\"47\" width=\"1458\" height=\"1457\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polyline clip-path=\"url(#clip8003)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 543.994,1503.47 543.994,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8003)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 895.028,1503.47 895.028,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8003)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1246.06,1503.47 1246.06,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8003)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1597.09,1503.47 1597.09,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8003)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1948.13,1503.47 1948.13,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8003)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 526.351,1491.82 1983.06,1491.82 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8003)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 526.351,1140.79 1983.06,1140.79 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8003)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 526.351,789.757 1983.06,789.757 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8003)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 526.351,438.724 1983.06,438.724 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8003)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 526.351,87.6901 1983.06,87.6901 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8001)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 526.351,1503.47 1983.06,1503.47 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8001)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 526.351,1503.47 526.351,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8001)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 543.994,1503.47 543.994,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8001)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 895.028,1503.47 895.028,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8001)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1246.06,1503.47 1246.06,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8001)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1597.09,1503.47 1597.09,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8001)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1948.13,1503.47 1948.13,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8001)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 526.351,1491.82 548.202,1491.82 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8001)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 526.351,1140.79 548.202,1140.79 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8001)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 526.351,789.757 548.202,789.757 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8001)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 526.351,438.724 548.202,438.724 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8001)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 526.351,87.6901 548.202,87.6901 \n",
" \"/>\n",
"<g clip-path=\"url(#clip8001)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 543.994, 1557.47)\" x=\"543.994\" y=\"1557.47\">0.00</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8001)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 895.028, 1557.47)\" x=\"895.028\" y=\"1557.47\">0.25</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8001)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1246.06, 1557.47)\" x=\"1246.06\" y=\"1557.47\">0.50</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8001)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1597.09, 1557.47)\" x=\"1597.09\" y=\"1557.47\">0.75</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8001)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1948.13, 1557.47)\" x=\"1948.13\" y=\"1557.47\">1.00</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8001)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 502.351, 1509.32)\" x=\"502.351\" y=\"1509.32\">0.00</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8001)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 502.351, 1158.29)\" x=\"502.351\" y=\"1158.29\">0.25</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8001)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 502.351, 807.257)\" x=\"502.351\" y=\"807.257\">0.50</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8001)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 502.351, 456.224)\" x=\"502.351\" y=\"456.224\">0.75</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8001)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 502.351, 105.19)\" x=\"502.351\" y=\"105.19\">1.00</text>\n",
"</g>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1813.92\" cy=\"1079.83\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1813.92\" cy=\"1079.83\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1913.24\" cy=\"320.098\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1913.24\" cy=\"320.098\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1128.18\" cy=\"589.416\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1128.18\" cy=\"589.416\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1695.99\" cy=\"253.111\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1695.99\" cy=\"253.111\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1693.53\" cy=\"1191.32\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1693.53\" cy=\"1191.32\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1004.32\" cy=\"362.202\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1004.32\" cy=\"362.202\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"611.832\" cy=\"863.531\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"611.832\" cy=\"863.531\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"868.919\" cy=\"470.49\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"868.919\" cy=\"470.49\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1609.61\" cy=\"1101.59\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1609.61\" cy=\"1101.59\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"726.4\" cy=\"946.852\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"726.4\" cy=\"946.852\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1383.55\" cy=\"1285.23\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1383.55\" cy=\"1285.23\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"875.064\" cy=\"656.788\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"875.064\" cy=\"656.788\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1158.1\" cy=\"560.542\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1158.1\" cy=\"560.542\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1272.6\" cy=\"244.127\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1272.6\" cy=\"244.127\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"844.6\" cy=\"427.437\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"844.6\" cy=\"427.437\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1205.88\" cy=\"430.504\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1205.88\" cy=\"430.504\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1540.41\" cy=\"758.972\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1540.41\" cy=\"758.972\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"620.752\" cy=\"341.44\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"620.752\" cy=\"341.44\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"799.895\" cy=\"488.176\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"799.895\" cy=\"488.176\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1851.25\" cy=\"924.735\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1851.25\" cy=\"924.735\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1352.48\" cy=\"1437.73\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1352.48\" cy=\"1437.73\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1536.04\" cy=\"1444.13\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1536.04\" cy=\"1444.13\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1481.72\" cy=\"380.104\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1481.72\" cy=\"380.104\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"838.542\" cy=\"1145.49\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"838.542\" cy=\"1145.49\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"666.272\" cy=\"787.343\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"666.272\" cy=\"787.343\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"935.839\" cy=\"1360.56\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"935.839\" cy=\"1360.56\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1755.41\" cy=\"833.647\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1755.41\" cy=\"833.647\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1038.19\" cy=\"1134.81\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1038.19\" cy=\"1134.81\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1184.34\" cy=\"1303.36\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1184.34\" cy=\"1303.36\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"770.908\" cy=\"132.85\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"770.908\" cy=\"132.85\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1435\" cy=\"1270.56\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1435\" cy=\"1270.56\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"567.579\" cy=\"991.922\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"567.579\" cy=\"991.922\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"714.11\" cy=\"844.463\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"714.11\" cy=\"844.463\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"697.435\" cy=\"930.035\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"697.435\" cy=\"930.035\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1342.25\" cy=\"1462.26\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1342.25\" cy=\"1462.26\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1109.56\" cy=\"144.023\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1109.56\" cy=\"144.023\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1450.62\" cy=\"366.723\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1450.62\" cy=\"366.723\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1413.06\" cy=\"101.073\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1413.06\" cy=\"101.073\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1084.16\" cy=\"206.313\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1084.16\" cy=\"206.313\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1316.63\" cy=\"1310.38\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1316.63\" cy=\"1310.38\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1400.97\" cy=\"1347.8\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1400.97\" cy=\"1347.8\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1818.1\" cy=\"559.383\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1818.1\" cy=\"559.383\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1783.6\" cy=\"277.433\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1783.6\" cy=\"277.433\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1773.93\" cy=\"1093.55\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1773.93\" cy=\"1093.55\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"784.49\" cy=\"1083.61\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"784.49\" cy=\"1083.61\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1670.24\" cy=\"1320.62\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1670.24\" cy=\"1320.62\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1801.63\" cy=\"1100.6\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1801.63\" cy=\"1100.6\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1656.4\" cy=\"1053.27\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1656.4\" cy=\"1053.27\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1172.18\" cy=\"857.338\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1172.18\" cy=\"857.338\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1142.43\" cy=\"301.781\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1142.43\" cy=\"301.781\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1886.14\" cy=\"435.772\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1886.14\" cy=\"435.772\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1195.31\" cy=\"1014.11\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1195.31\" cy=\"1014.11\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"980.223\" cy=\"581.298\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"980.223\" cy=\"581.298\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1217.83\" cy=\"408.971\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1217.83\" cy=\"408.971\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"842.011\" cy=\"733.004\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"842.011\" cy=\"733.004\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"862.573\" cy=\"1159.09\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"862.573\" cy=\"1159.09\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1326.72\" cy=\"785.361\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1326.72\" cy=\"785.361\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1023.14\" cy=\"1448.27\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1023.14\" cy=\"1448.27\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1385.16\" cy=\"222.682\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1385.16\" cy=\"222.682\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1637.5\" cy=\"310.821\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1637.5\" cy=\"310.821\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"920.378\" cy=\"1316.29\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"920.378\" cy=\"1316.29\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"612.907\" cy=\"1332.82\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"612.907\" cy=\"1332.82\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"647.668\" cy=\"303.475\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"647.668\" cy=\"303.475\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1043.11\" cy=\"615.068\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1043.11\" cy=\"615.068\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1001.38\" cy=\"1328.48\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1001.38\" cy=\"1328.48\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"984.048\" cy=\"1206.05\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"984.048\" cy=\"1206.05\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1046.02\" cy=\"1243.45\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1046.02\" cy=\"1243.45\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1513.97\" cy=\"1130.25\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1513.97\" cy=\"1130.25\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1144.41\" cy=\"1335.48\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1144.41\" cy=\"1335.48\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"818.691\" cy=\"851.526\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"818.691\" cy=\"851.526\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1479.63\" cy=\"1194.99\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1479.63\" cy=\"1194.99\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1911.35\" cy=\"794.849\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1911.35\" cy=\"794.849\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1188.3\" cy=\"526.486\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1188.3\" cy=\"526.486\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1546.94\" cy=\"446.744\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1546.94\" cy=\"446.744\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1638.73\" cy=\"994.856\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1638.73\" cy=\"994.856\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1460.61\" cy=\"967.788\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1460.61\" cy=\"967.788\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1907.69\" cy=\"497.082\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1907.69\" cy=\"497.082\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1832.7\" cy=\"1020.72\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1832.7\" cy=\"1020.72\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"964.551\" cy=\"759.856\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"964.551\" cy=\"759.856\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1525.6\" cy=\"1416.69\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1525.6\" cy=\"1416.69\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1905.12\" cy=\"1078.03\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1905.12\" cy=\"1078.03\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1210.13\" cy=\"88.4582\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1210.13\" cy=\"88.4582\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1557.18\" cy=\"380.156\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1557.18\" cy=\"380.156\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1504.52\" cy=\"647.29\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1504.52\" cy=\"647.29\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"844.26\" cy=\"1215.84\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"844.26\" cy=\"1215.84\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1941.84\" cy=\"1008.06\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1941.84\" cy=\"1008.06\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1584.04\" cy=\"145.995\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1584.04\" cy=\"145.995\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"919.656\" cy=\"384.634\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"919.656\" cy=\"384.634\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1418.35\" cy=\"507.119\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1418.35\" cy=\"507.119\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1790.42\" cy=\"654.785\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1790.42\" cy=\"654.785\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1576.09\" cy=\"1421.15\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1576.09\" cy=\"1421.15\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1028.83\" cy=\"679.175\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1028.83\" cy=\"679.175\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1740.5\" cy=\"904.397\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1740.5\" cy=\"904.397\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1493.74\" cy=\"444.073\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1493.74\" cy=\"444.073\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"690.139\" cy=\"1415.27\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"690.139\" cy=\"1415.27\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"572.664\" cy=\"994.744\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"572.664\" cy=\"994.744\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"830.325\" cy=\"1051.1\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"830.325\" cy=\"1051.1\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1134.73\" cy=\"479.9\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1134.73\" cy=\"479.9\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1771.04\" cy=\"199.918\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1771.04\" cy=\"199.918\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1274.36\" cy=\"685.473\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1274.36\" cy=\"685.473\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1536.04\" cy=\"1444.13\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1536.04\" cy=\"1444.13\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1576.09\" cy=\"1421.15\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1576.09\" cy=\"1421.15\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1905.12\" cy=\"1078.03\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1905.12\" cy=\"1078.03\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1941.84\" cy=\"1008.06\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1941.84\" cy=\"1008.06\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1913.24\" cy=\"320.098\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1913.24\" cy=\"320.098\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1771.04\" cy=\"199.918\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1771.04\" cy=\"199.918\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1584.04\" cy=\"145.995\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1584.04\" cy=\"145.995\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1413.06\" cy=\"101.073\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1413.06\" cy=\"101.073\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1210.13\" cy=\"88.4582\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1210.13\" cy=\"88.4582\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"770.908\" cy=\"132.85\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"770.908\" cy=\"132.85\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"647.668\" cy=\"303.475\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"647.668\" cy=\"303.475\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"620.752\" cy=\"341.44\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"620.752\" cy=\"341.44\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"567.579\" cy=\"991.922\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"567.579\" cy=\"991.922\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"612.907\" cy=\"1332.82\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"612.907\" cy=\"1332.82\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"690.139\" cy=\"1415.27\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"690.139\" cy=\"1415.27\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1023.14\" cy=\"1448.27\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1023.14\" cy=\"1448.27\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1342.25\" cy=\"1462.26\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1342.25\" cy=\"1462.26\" r=\"14\"/>\n",
"</svg>\n"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"hull = graham_scan(A)\n",
"scatter(xs(reinterpreted_points), ys(reinterpreted_points), aspect_ratio=:equal, legend=false)\n",
"scatter!(xs(hull), ys(hull), color=:red, legend=false) "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"# Can we also make an animation?"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"*Iterators* take a central role in Julia. We can use them to design algorithms."
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [],
"source": [
"# We define an iterator struct\n",
"struct GrahamScanIterator{VT}\n",
" points::Vector{VT} # sorted by polar angle\n",
" hull::Vector{VT} # (partially) computed convex hull\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"graham_scan_iterator (generic function with 1 method)"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# We want to construct this using the unsorted points\n",
"# and store the sorted points\n",
"function graham_scan_iterator(points::AbstractVector)\n",
" # Find the element with the lowest y-coordinate\n",
" p₁ = point_with_lowest_y_coordinate(points)\n",
" sorted_points = sort_by_polar_angle(points, p₁)\n",
" hull = sorted_points[1:2]\n",
" GrahamScanIterator(sorted_points, hull)\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [],
"source": [
"# In one iteration of the iterator we want to process one point\n",
"function Base.iterate(G::GrahamScanIterator, i=nothing)\n",
" i === nothing && return G.hull, 3 \n",
" i > length(G.points) && return nothing\n",
" \n",
"\n",
" while length(G.hull) ≥ 2 && ccw(G.hull[end-1], G.hull[end], G.points[i]) ≤ 0\n",
" pop!(G.hull)\n",
" end\n",
" push!(G.hull, G.points[i]) \n",
" \n",
" return G.hull, i + 1\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"graham_scan_iterator_version (generic function with 1 method)"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"function graham_scan_iterator_version(points)\n",
" iter = graham_scan_iterator(points)\n",
" # a dummy loop to exhaust the iterator\n",
" for _ in iter end\n",
" iter.hull\n",
"end"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## Does this still work?"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 2400 1600\">\n",
"<defs>\n",
" <clipPath id=\"clip8200\">\n",
" <rect x=\"0\" y=\"0\" width=\"2000\" height=\"2000\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<defs>\n",
" <clipPath id=\"clip8201\">\n",
" <rect x=\"0\" y=\"0\" width=\"2400\" height=\"1600\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip8201)\" points=\"\n",
"0,1600 2400,1600 2400,0 0,0 \n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip8202\">\n",
" <rect x=\"480\" y=\"0\" width=\"1681\" height=\"1600\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip8201)\" points=\"\n",
"523.866,1503.47 1986.9,1503.47 1986.9,47.2441 523.866,47.2441 \n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip8203\">\n",
" <rect x=\"523\" y=\"47\" width=\"1464\" height=\"1457\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polyline clip-path=\"url(#clip8203)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 557.603,1503.47 557.603,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8203)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 906.197,1503.47 906.197,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8203)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1254.79,1503.47 1254.79,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8203)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1603.38,1503.47 1603.38,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8203)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1951.98,1503.47 1951.98,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8203)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 523.866,1476.89 1986.9,1476.89 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8203)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 523.866,1128.29 1986.9,1128.29 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8203)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 523.866,779.7 1986.9,779.7 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8203)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 523.866,431.107 1986.9,431.107 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8203)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 523.866,82.5132 1986.9,82.5132 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8201)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,1503.47 1986.9,1503.47 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8201)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,1503.47 523.866,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8201)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 557.603,1503.47 557.603,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8201)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 906.197,1503.47 906.197,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8201)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1254.79,1503.47 1254.79,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8201)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1603.38,1503.47 1603.38,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8201)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1951.98,1503.47 1951.98,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8201)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,1476.89 545.811,1476.89 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8201)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,1128.29 545.811,1128.29 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8201)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,779.7 545.811,779.7 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8201)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,431.107 545.811,431.107 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8201)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,82.5132 545.811,82.5132 \n",
" \"/>\n",
"<g clip-path=\"url(#clip8201)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 557.603, 1557.47)\" x=\"557.603\" y=\"1557.47\">-1.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8201)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 906.197, 1557.47)\" x=\"906.197\" y=\"1557.47\">-0.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8201)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1254.79, 1557.47)\" x=\"1254.79\" y=\"1557.47\">0.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8201)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1603.38, 1557.47)\" x=\"1603.38\" y=\"1557.47\">0.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8201)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1951.98, 1557.47)\" x=\"1951.98\" y=\"1557.47\">1.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8201)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 499.866, 1494.39)\" x=\"499.866\" y=\"1494.39\">-1.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8201)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 499.866, 1145.79)\" x=\"499.866\" y=\"1145.79\">-0.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8201)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 499.866, 797.2)\" x=\"499.866\" y=\"797.2\">0.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8201)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 499.866, 448.607)\" x=\"499.866\" y=\"448.607\">0.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8201)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 499.866, 100.013)\" x=\"499.866\" y=\"100.013\">1.0</text>\n",
"</g>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1116.04\" cy=\"959.93\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1116.04\" cy=\"959.93\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1592.9\" cy=\"1439.14\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1592.9\" cy=\"1439.14\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"692.392\" cy=\"226.89\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"692.392\" cy=\"226.89\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"664.112\" cy=\"311.156\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"664.112\" cy=\"311.156\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1035.02\" cy=\"1336.97\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1035.02\" cy=\"1336.97\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"649.64\" cy=\"243.369\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"649.64\" cy=\"243.369\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1561.73\" cy=\"898.564\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1561.73\" cy=\"898.564\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1664.93\" cy=\"194.278\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1664.93\" cy=\"194.278\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1892.42\" cy=\"1462.26\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1892.42\" cy=\"1462.26\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1478.37\" cy=\"1180.78\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1478.37\" cy=\"1180.78\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1379.55\" cy=\"1240.29\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1379.55\" cy=\"1240.29\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1043.74\" cy=\"885.801\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1043.74\" cy=\"885.801\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1849.64\" cy=\"992.984\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1849.64\" cy=\"992.984\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1422.86\" cy=\"1207.41\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1422.86\" cy=\"1207.41\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1780.77\" cy=\"896.82\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1780.77\" cy=\"896.82\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1163.24\" cy=\"1059.43\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1163.24\" cy=\"1059.43\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1884.2\" cy=\"88.4582\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1884.2\" cy=\"88.4582\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"972.032\" cy=\"1366.88\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"972.032\" cy=\"1366.88\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"609.008\" cy=\"775.568\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"609.008\" cy=\"775.568\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"992.733\" cy=\"1156.25\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"992.733\" cy=\"1156.25\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1915.01\" cy=\"468.363\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1915.01\" cy=\"468.363\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1438.96\" cy=\"170.647\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1438.96\" cy=\"170.647\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1194.09\" cy=\"852.816\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1194.09\" cy=\"852.816\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1152.98\" cy=\"545.653\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1152.98\" cy=\"545.653\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1492.68\" cy=\"982.08\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1492.68\" cy=\"982.08\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"676.269\" cy=\"903.918\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"676.269\" cy=\"903.918\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1633.48\" cy=\"416.94\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1633.48\" cy=\"416.94\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"631.237\" cy=\"1423.46\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"631.237\" cy=\"1423.46\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1777.52\" cy=\"195.082\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1777.52\" cy=\"195.082\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1907.52\" cy=\"198.545\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1907.52\" cy=\"198.545\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1476.68\" cy=\"955.548\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1476.68\" cy=\"955.548\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"767.699\" cy=\"160.035\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"767.699\" cy=\"160.035\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1870.45\" cy=\"989.016\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1870.45\" cy=\"989.016\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1870.19\" cy=\"1197.63\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1870.19\" cy=\"1197.63\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1087.69\" cy=\"1243.27\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1087.69\" cy=\"1243.27\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"680.012\" cy=\"480.459\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"680.012\" cy=\"480.459\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1173.72\" cy=\"299.953\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1173.72\" cy=\"299.953\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1765.44\" cy=\"299.315\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1765.44\" cy=\"299.315\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"845.96\" cy=\"259.184\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"845.96\" cy=\"259.184\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1833.46\" cy=\"806.023\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1833.46\" cy=\"806.023\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1190.44\" cy=\"1141.11\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1190.44\" cy=\"1141.11\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"616.37\" cy=\"299.596\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"616.37\" cy=\"299.596\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1825.14\" cy=\"1241.82\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1825.14\" cy=\"1241.82\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"579.789\" cy=\"706.202\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"579.789\" cy=\"706.202\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"960.71\" cy=\"850.458\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"960.71\" cy=\"850.458\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1750.45\" cy=\"343.297\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1750.45\" cy=\"343.297\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"919.3\" cy=\"1259.46\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"919.3\" cy=\"1259.46\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1889\" cy=\"1185.79\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1889\" cy=\"1185.79\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1728.53\" cy=\"979.376\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1728.53\" cy=\"979.376\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1578.23\" cy=\"362.48\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1578.23\" cy=\"362.48\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1139.03\" cy=\"600.33\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1139.03\" cy=\"600.33\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"740.991\" cy=\"1265.46\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"740.991\" cy=\"1265.46\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1945.49\" cy=\"248.916\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1945.49\" cy=\"248.916\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1388.05\" cy=\"1239.45\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1388.05\" cy=\"1239.45\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1554.19\" cy=\"118.295\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1554.19\" cy=\"118.295\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"814.141\" cy=\"1300.6\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"814.141\" cy=\"1300.6\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"959.601\" cy=\"530.173\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"959.601\" cy=\"530.173\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"978.747\" cy=\"565.487\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"978.747\" cy=\"565.487\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1686.19\" cy=\"950.39\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1686.19\" cy=\"950.39\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1074.1\" cy=\"643.564\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1074.1\" cy=\"643.564\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1529\" cy=\"558.251\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1529\" cy=\"558.251\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1267.27\" cy=\"250.381\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1267.27\" cy=\"250.381\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1708.84\" cy=\"1302.18\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1708.84\" cy=\"1302.18\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1890.45\" cy=\"898.56\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1890.45\" cy=\"898.56\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1112.95\" cy=\"184.464\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1112.95\" cy=\"184.464\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"927.185\" cy=\"219.744\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"927.185\" cy=\"219.744\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1844\" cy=\"1447.98\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1844\" cy=\"1447.98\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1850.77\" cy=\"588.275\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1850.77\" cy=\"588.275\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"970.15\" cy=\"1416.8\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"970.15\" cy=\"1416.8\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1870.21\" cy=\"1187.75\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1870.21\" cy=\"1187.75\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"980.974\" cy=\"144.218\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"980.974\" cy=\"144.218\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1697.78\" cy=\"89.6241\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1697.78\" cy=\"89.6241\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"632.455\" cy=\"1357.95\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"632.455\" cy=\"1357.95\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"874.547\" cy=\"1410.54\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"874.547\" cy=\"1410.54\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1647.96\" cy=\"102.37\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1647.96\" cy=\"102.37\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1005.08\" cy=\"709.171\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1005.08\" cy=\"709.171\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1697.25\" cy=\"509.749\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1697.25\" cy=\"509.749\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1381.3\" cy=\"984.104\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1381.3\" cy=\"984.104\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1073.3\" cy=\"1339.34\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1073.3\" cy=\"1339.34\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1111.3\" cy=\"882.77\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1111.3\" cy=\"882.77\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"565.272\" cy=\"137.45\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"565.272\" cy=\"137.45\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1026.55\" cy=\"711.116\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1026.55\" cy=\"711.116\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1563.27\" cy=\"1105.97\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1563.27\" cy=\"1105.97\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1052.16\" cy=\"1145.49\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1052.16\" cy=\"1145.49\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1612.72\" cy=\"952.7\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1612.72\" cy=\"952.7\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1120.79\" cy=\"132.397\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1120.79\" cy=\"132.397\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"862.008\" cy=\"1018.93\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"862.008\" cy=\"1018.93\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"982.839\" cy=\"372.314\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"982.839\" cy=\"372.314\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"615.702\" cy=\"699.519\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"615.702\" cy=\"699.519\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1146.23\" cy=\"651.136\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1146.23\" cy=\"651.136\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1729.44\" cy=\"839.167\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1729.44\" cy=\"839.167\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"712.342\" cy=\"974.361\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"712.342\" cy=\"974.361\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1251.49\" cy=\"135.406\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1251.49\" cy=\"135.406\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"784.069\" cy=\"913.301\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"784.069\" cy=\"913.301\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1390.67\" cy=\"666.182\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1390.67\" cy=\"666.182\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1805.51\" cy=\"174.741\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1805.51\" cy=\"174.741\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"956.682\" cy=\"1326.1\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"956.682\" cy=\"1326.1\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1227.36\" cy=\"1006.99\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1227.36\" cy=\"1006.99\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1118.17\" cy=\"938.643\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1118.17\" cy=\"938.643\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1664.72\" cy=\"603.947\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1664.72\" cy=\"603.947\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1944.86\" cy=\"248.51\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1944.86\" cy=\"248.51\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1884.51\" cy=\"89.153\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1884.51\" cy=\"89.153\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1698.45\" cy=\"90.2597\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1698.45\" cy=\"90.2597\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"565.903\" cy=\"137.554\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"565.903\" cy=\"137.554\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"580.093\" cy=\"706.312\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"580.093\" cy=\"706.312\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"630.991\" cy=\"1423.26\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"630.991\" cy=\"1423.26\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1892.22\" cy=\"1461.73\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1892.22\" cy=\"1461.73\" r=\"14\"/>\n",
"</svg>\n"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"hull = graham_scan_iterator_version(rational_2D_points)\n",
"scatter(xs(input_points), ys(input_points), aspect_ratio=:equal, legend=false)\n",
"scatter!(xs(hull), ys(hull), color=:red, legend=false)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## Let's use the iterator to make an animation"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 2400 1600\">\n",
"<defs>\n",
" <clipPath id=\"clip7800\">\n",
" <rect x=\"0\" y=\"0\" width=\"2000\" height=\"2000\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<defs>\n",
" <clipPath id=\"clip7801\">\n",
" <rect x=\"0\" y=\"0\" width=\"2400\" height=\"1600\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip7801)\" points=\"\n",
"0,1600 2400,1600 2400,0 0,0 \n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip7802\">\n",
" <rect x=\"480\" y=\"0\" width=\"1681\" height=\"1600\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip7801)\" points=\"\n",
"523.866,1503.47 1986.9,1503.47 1986.9,47.2441 523.866,47.2441 \n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip7803\">\n",
" <rect x=\"523\" y=\"47\" width=\"1464\" height=\"1457\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polyline clip-path=\"url(#clip7803)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 557.603,1503.47 557.603,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7803)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 906.197,1503.47 906.197,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7803)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1254.79,1503.47 1254.79,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7803)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1603.38,1503.47 1603.38,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7803)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1951.98,1503.47 1951.98,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7803)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 523.866,1476.89 1986.9,1476.89 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7803)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 523.866,1128.29 1986.9,1128.29 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7803)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 523.866,779.7 1986.9,779.7 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7803)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 523.866,431.107 1986.9,431.107 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7803)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 523.866,82.5132 1986.9,82.5132 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7801)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,1503.47 1986.9,1503.47 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7801)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,1503.47 523.866,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7801)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 557.603,1503.47 557.603,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7801)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 906.197,1503.47 906.197,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7801)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1254.79,1503.47 1254.79,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7801)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1603.38,1503.47 1603.38,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7801)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1951.98,1503.47 1951.98,1481.63 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7801)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,1476.89 545.811,1476.89 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7801)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,1128.29 545.811,1128.29 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7801)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,779.7 545.811,779.7 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7801)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,431.107 545.811,431.107 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7801)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 523.866,82.5132 545.811,82.5132 \n",
" \"/>\n",
"<g clip-path=\"url(#clip7801)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 557.603, 1557.47)\" x=\"557.603\" y=\"1557.47\">-1.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7801)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 906.197, 1557.47)\" x=\"906.197\" y=\"1557.47\">-0.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7801)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1254.79, 1557.47)\" x=\"1254.79\" y=\"1557.47\">0.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7801)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1603.38, 1557.47)\" x=\"1603.38\" y=\"1557.47\">0.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7801)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1951.98, 1557.47)\" x=\"1951.98\" y=\"1557.47\">1.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7801)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 499.866, 1494.39)\" x=\"499.866\" y=\"1494.39\">-1.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7801)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 499.866, 1145.79)\" x=\"499.866\" y=\"1145.79\">-0.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7801)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 499.866, 797.2)\" x=\"499.866\" y=\"797.2\">0.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7801)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 499.866, 448.607)\" x=\"499.866\" y=\"448.607\">0.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7801)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 499.866, 100.013)\" x=\"499.866\" y=\"100.013\">1.0</text>\n",
"</g>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1116.04\" cy=\"959.93\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1116.04\" cy=\"959.93\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1592.9\" cy=\"1439.14\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1592.9\" cy=\"1439.14\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"692.392\" cy=\"226.89\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"692.392\" cy=\"226.89\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"664.112\" cy=\"311.156\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"664.112\" cy=\"311.156\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1035.02\" cy=\"1336.97\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1035.02\" cy=\"1336.97\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"649.64\" cy=\"243.369\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"649.64\" cy=\"243.369\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1561.73\" cy=\"898.564\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1561.73\" cy=\"898.564\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1664.93\" cy=\"194.278\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1664.93\" cy=\"194.278\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1892.42\" cy=\"1462.26\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1892.42\" cy=\"1462.26\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1478.37\" cy=\"1180.78\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1478.37\" cy=\"1180.78\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1379.55\" cy=\"1240.29\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1379.55\" cy=\"1240.29\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1043.74\" cy=\"885.801\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1043.74\" cy=\"885.801\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1849.64\" cy=\"992.984\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1849.64\" cy=\"992.984\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1422.86\" cy=\"1207.41\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1422.86\" cy=\"1207.41\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1780.77\" cy=\"896.82\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1780.77\" cy=\"896.82\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1163.24\" cy=\"1059.43\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1163.24\" cy=\"1059.43\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1884.2\" cy=\"88.4582\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1884.2\" cy=\"88.4582\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"972.032\" cy=\"1366.88\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"972.032\" cy=\"1366.88\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"609.008\" cy=\"775.568\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"609.008\" cy=\"775.568\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"992.733\" cy=\"1156.25\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"992.733\" cy=\"1156.25\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1915.01\" cy=\"468.363\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1915.01\" cy=\"468.363\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1438.96\" cy=\"170.647\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1438.96\" cy=\"170.647\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1194.09\" cy=\"852.816\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1194.09\" cy=\"852.816\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1152.98\" cy=\"545.653\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1152.98\" cy=\"545.653\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1492.68\" cy=\"982.08\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1492.68\" cy=\"982.08\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"676.269\" cy=\"903.918\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"676.269\" cy=\"903.918\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1633.48\" cy=\"416.94\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1633.48\" cy=\"416.94\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"631.237\" cy=\"1423.46\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"631.237\" cy=\"1423.46\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1777.52\" cy=\"195.082\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1777.52\" cy=\"195.082\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1907.52\" cy=\"198.545\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1907.52\" cy=\"198.545\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1476.68\" cy=\"955.548\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1476.68\" cy=\"955.548\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"767.699\" cy=\"160.035\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"767.699\" cy=\"160.035\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1870.45\" cy=\"989.016\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1870.45\" cy=\"989.016\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1870.19\" cy=\"1197.63\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1870.19\" cy=\"1197.63\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1087.69\" cy=\"1243.27\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1087.69\" cy=\"1243.27\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"680.012\" cy=\"480.459\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"680.012\" cy=\"480.459\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1173.72\" cy=\"299.953\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1173.72\" cy=\"299.953\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1765.44\" cy=\"299.315\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1765.44\" cy=\"299.315\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"845.96\" cy=\"259.184\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"845.96\" cy=\"259.184\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1833.46\" cy=\"806.023\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1833.46\" cy=\"806.023\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1190.44\" cy=\"1141.11\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1190.44\" cy=\"1141.11\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"616.37\" cy=\"299.596\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"616.37\" cy=\"299.596\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1825.14\" cy=\"1241.82\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1825.14\" cy=\"1241.82\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"579.789\" cy=\"706.202\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"579.789\" cy=\"706.202\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"960.71\" cy=\"850.458\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"960.71\" cy=\"850.458\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1750.45\" cy=\"343.297\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1750.45\" cy=\"343.297\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"919.3\" cy=\"1259.46\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"919.3\" cy=\"1259.46\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1889\" cy=\"1185.79\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1889\" cy=\"1185.79\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1728.53\" cy=\"979.376\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1728.53\" cy=\"979.376\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1578.23\" cy=\"362.48\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1578.23\" cy=\"362.48\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1139.03\" cy=\"600.33\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1139.03\" cy=\"600.33\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"740.991\" cy=\"1265.46\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"740.991\" cy=\"1265.46\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1945.49\" cy=\"248.916\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1945.49\" cy=\"248.916\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1388.05\" cy=\"1239.45\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1388.05\" cy=\"1239.45\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1554.19\" cy=\"118.295\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1554.19\" cy=\"118.295\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"814.141\" cy=\"1300.6\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"814.141\" cy=\"1300.6\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"959.601\" cy=\"530.173\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"959.601\" cy=\"530.173\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"978.747\" cy=\"565.487\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"978.747\" cy=\"565.487\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1686.19\" cy=\"950.39\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1686.19\" cy=\"950.39\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1074.1\" cy=\"643.564\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1074.1\" cy=\"643.564\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1529\" cy=\"558.251\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1529\" cy=\"558.251\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1267.27\" cy=\"250.381\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1267.27\" cy=\"250.381\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1708.84\" cy=\"1302.18\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1708.84\" cy=\"1302.18\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1890.45\" cy=\"898.56\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1890.45\" cy=\"898.56\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1112.95\" cy=\"184.464\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1112.95\" cy=\"184.464\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"927.185\" cy=\"219.744\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"927.185\" cy=\"219.744\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1844\" cy=\"1447.98\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1844\" cy=\"1447.98\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1850.77\" cy=\"588.275\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1850.77\" cy=\"588.275\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"970.15\" cy=\"1416.8\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"970.15\" cy=\"1416.8\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1870.21\" cy=\"1187.75\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1870.21\" cy=\"1187.75\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"980.974\" cy=\"144.218\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"980.974\" cy=\"144.218\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1697.78\" cy=\"89.6241\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1697.78\" cy=\"89.6241\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"632.455\" cy=\"1357.95\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"632.455\" cy=\"1357.95\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"874.547\" cy=\"1410.54\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"874.547\" cy=\"1410.54\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1647.96\" cy=\"102.37\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1647.96\" cy=\"102.37\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1005.08\" cy=\"709.171\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1005.08\" cy=\"709.171\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1697.25\" cy=\"509.749\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1697.25\" cy=\"509.749\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1381.3\" cy=\"984.104\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1381.3\" cy=\"984.104\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1073.3\" cy=\"1339.34\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1073.3\" cy=\"1339.34\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1111.3\" cy=\"882.77\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1111.3\" cy=\"882.77\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"565.272\" cy=\"137.45\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"565.272\" cy=\"137.45\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1026.55\" cy=\"711.116\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1026.55\" cy=\"711.116\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1563.27\" cy=\"1105.97\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1563.27\" cy=\"1105.97\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1052.16\" cy=\"1145.49\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1052.16\" cy=\"1145.49\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1612.72\" cy=\"952.7\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1612.72\" cy=\"952.7\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1120.79\" cy=\"132.397\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1120.79\" cy=\"132.397\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"862.008\" cy=\"1018.93\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"862.008\" cy=\"1018.93\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"982.839\" cy=\"372.314\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"982.839\" cy=\"372.314\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"615.702\" cy=\"699.519\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"615.702\" cy=\"699.519\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1146.23\" cy=\"651.136\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1146.23\" cy=\"651.136\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1729.44\" cy=\"839.167\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1729.44\" cy=\"839.167\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"712.342\" cy=\"974.361\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"712.342\" cy=\"974.361\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1251.49\" cy=\"135.406\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1251.49\" cy=\"135.406\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"784.069\" cy=\"913.301\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"784.069\" cy=\"913.301\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1390.67\" cy=\"666.182\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1390.67\" cy=\"666.182\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1805.51\" cy=\"174.741\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1805.51\" cy=\"174.741\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"956.682\" cy=\"1326.1\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"956.682\" cy=\"1326.1\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1227.36\" cy=\"1006.99\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1227.36\" cy=\"1006.99\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1118.17\" cy=\"938.643\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1118.17\" cy=\"938.643\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1664.72\" cy=\"603.947\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1664.72\" cy=\"603.947\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1945.49\" cy=\"248.916\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1945.49\" cy=\"248.916\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1884.2\" cy=\"88.4582\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1884.2\" cy=\"88.4582\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1697.78\" cy=\"89.6241\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1697.78\" cy=\"89.6241\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"565.272\" cy=\"137.45\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"565.272\" cy=\"137.45\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"579.789\" cy=\"706.202\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"579.789\" cy=\"706.202\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"631.237\" cy=\"1423.46\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"631.237\" cy=\"1423.46\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1892.42\" cy=\"1462.26\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip7803)\" style=\"fill:#ff0000; stroke:none; fill-opacity:1\" cx=\"1892.42\" cy=\"1462.26\" r=\"14\"/>\n",
"</svg>\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for hull in graham_scan_iterator(input_points)\n",
" plot = scatter(xs(input_points), ys(input_points), aspect_ratio=:equal, legend=false)\n",
" scatter!(plot, xs(hull), ys(hull), color=:red, legend=false)\n",
" IJulia.clear_output(true); display(plot); sleep(0.05);\n",
"end;"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## That's nice, but now this is probably not great for the performance..."
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Function version:\n",
" 7.050 μs (26 allocations: 7.33 KiB)\n",
"Iterator version:\n",
" 8.384 μs (125 allocations: 10.42 KiB)\n"
]
}
],
"source": [
"using BenchmarkTools\n",
"println(\"Function version:\")\n",
"@btime graham_scan($input_points);\n",
"println(\"Iterator version:\")\n",
"@btime graham_scan_iterator_version($input_points);"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"But let's inline a little bit:"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"@inline function graham_scan_iterator(points::AbstractVector)\n",
" # Find the element with the lowest y-coordinate\n",
" p₁ = point_with_lowest_y_coordinate(points)\n",
" sorted_points = sort_by_polar_angle(points, p₁)\n",
" hull = sorted_points[1:2]\n",
" GrahamScanIterator(sorted_points, hull)\n",
"end\n",
"@inline function Base.iterate(G::GrahamScanIterator, i=nothing)\n",
" i === nothing && return G.hull, 3 \n",
" i > length(G.points) && return nothing\n",
" \n",
" while length(G.hull) ≥ 2 && ccw(G.hull[end-1], G.hull[end], G.points[i]) ≤ 0\n",
" pop!(G.hull)\n",
" end\n",
" push!(G.hull, G.points[i]) \n",
" \n",
" return G.hull, i + 1\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Function version:\n",
" 7.087 μs (26 allocations: 7.33 KiB)\n",
"Iterator version:\n",
" 6.924 μs (26 allocations: 7.33 KiB)\n"
]
}
],
"source": [
"println(\"Function version:\")\n",
"@btime graham_scan($input_points);\n",
"println(\"Iterator version:\")\n",
"@btime graham_scan_iterator_version($input_points);"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"We see that we get the iterator abstraction completely for free!"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Polymake.jl\n",
"### A Julia interface to polymake."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## OSCAR\n",
"\n",
"The OSCAR project develops a comprehensive open source computer algebra system for computations in algebra, geometry, and number theory."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"<img src=\"https://oscar.computeralgebra.de/public/oscar_main.svg\" style=\"display: block; margin-left: auto; margin-right: auto; width: 50%;\" />"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## A little bit about Polymake.jl"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"* uses a mix of handwritten and auto-generated C++ code to interact with polymake.\n",
"* can be easily installed with the Julia package manager.\n",
"* No need to compile polymake from source (on Linux)\n",
"* Most of the work done by Sebastian Gutsche, Marek Kaluba, Benjamin Lorenz and myself"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Polymake.jl Demo"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"polymake version 3.2\n",
"Copyright (c) 1997-2018\n",
"Ewgenij Gawrilow, Michael Joswig (TU Berlin)\n",
"http://www.polymake.org\n",
"\n",
"This is free software licensed under GPL; see the source for copying conditions.\n",
"There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
"\n"
]
}
],
"source": [
"using Polymake"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## G-~~Conjecture~~Theorem"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Produce a 6-dimensional polytope with 20 vertices, drawn uniformly at random on the unit sphere, and print its f-vector."
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"polymake: used package ppl\n",
" The Parma Polyhedra Library (PPL): A C++ library for convex polyhedra\n",
" and other numerical abstractions.\n",
" http://www.cs.unipr.it/ppl/\n",
"\n"
]
},
{
"data": {
"text/plain": [
"pm::Vector<pm::Integer>\n",
"20 168 658 1234 1086 362"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"P = polytope.rand_sphere(6, 20)\n",
"P.F_VECTOR"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Now we also can get the g-vector of that polytope and convert it to a Julia `Vector`"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"4-element Array{pm_Integer,1}:\n",
" 1\n",
" 13\n",
" 69\n",
" 83"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"g = Vector(P.G_VECTOR) "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Let's do a census of 100 random samples and plot the result. Since $$g_0=1 \\text{ and } g_1=\\#\\text{vertices}-\\text{dimension}-1$$ are constant, it suffices to plot $g_2$ versus $g_3$."
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 2400 1600\">\n",
"<defs>\n",
" <clipPath id=\"clip8000\">\n",
" <rect x=\"0\" y=\"0\" width=\"2000\" height=\"2000\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<defs>\n",
" <clipPath id=\"clip8001\">\n",
" <rect x=\"0\" y=\"0\" width=\"2400\" height=\"1600\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip8001)\" points=\"\n",
"0,1600 2400,1600 2400,0 0,0 \n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip8002\">\n",
" <rect x=\"480\" y=\"0\" width=\"1681\" height=\"1600\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip8001)\" points=\"\n",
"211.005,1440.48 2321.26,1440.48 2321.26,47.2441 211.005,47.2441 \n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip8003\">\n",
" <rect x=\"211\" y=\"47\" width=\"2111\" height=\"1394\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polyline clip-path=\"url(#clip8003)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 451.712,1440.48 451.712,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8003)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 904.168,1440.48 904.168,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8003)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1356.62,1440.48 1356.62,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8003)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1809.08,1440.48 1809.08,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8003)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 2261.54,1440.48 2261.54,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8003)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 211.005,1323.74 2321.26,1323.74 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8003)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 211.005,937.154 2321.26,937.154 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8003)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 211.005,550.573 2321.26,550.573 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8003)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 211.005,163.992 2321.26,163.992 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8001)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 211.005,1440.48 2321.26,1440.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8001)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 211.005,1440.48 211.005,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8001)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 451.712,1440.48 451.712,1419.58 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8001)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 904.168,1440.48 904.168,1419.58 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8001)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1356.62,1440.48 1356.62,1419.58 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8001)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1809.08,1440.48 1809.08,1419.58 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8001)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 2261.54,1440.48 2261.54,1419.58 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8001)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 211.005,1323.74 242.659,1323.74 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8001)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 211.005,937.154 242.659,937.154 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8001)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 211.005,550.573 242.659,550.573 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8001)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 211.005,163.992 242.659,163.992 \n",
" \"/>\n",
"<g clip-path=\"url(#clip8001)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 451.712, 1494.48)\" x=\"451.712\" y=\"1494.48\">65.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8001)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 904.168, 1494.48)\" x=\"904.168\" y=\"1494.48\">67.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8001)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1356.62, 1494.48)\" x=\"1356.62\" y=\"1494.48\">70.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8001)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1809.08, 1494.48)\" x=\"1809.08\" y=\"1494.48\">72.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8001)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 2261.54, 1494.48)\" x=\"2261.54\" y=\"1494.48\">75.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8001)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 187.005, 1341.24)\" x=\"187.005\" y=\"1341.24\">60</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8001)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 187.005, 954.654)\" x=\"187.005\" y=\"954.654\">70</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8001)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 187.005, 568.073)\" x=\"187.005\" y=\"568.073\">80</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8001)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 187.005, 181.492)\" x=\"187.005\" y=\"181.492\">90</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8001)\">\n",
"<image width=\"54\" height=\"43\" xlink:href=\"data:image/png;base64,\n",
"iVBORw0KGgoAAAANSUhEUgAAADYAAAArCAYAAAAzDXuYAAAD6ElEQVRogc1Z/W3rIBC/PL0BLhmB\n",
"bnAzkA2sjkA3cDOCR8gMbidAHgF1Atcj0Gxw748+EMY4Bsdpg3SKYvFxP7iPHwcwM9wixhhWSrGU\n",
"khGRAYCJiJum4VvnvkVWD9RaMxExADAAsBCClVLcNA1XVcUAwIjIxhgP0G2CUoqttXcFvmqQUsoD\n",
"QkRu23aipLXWAzfGcN/3fgwAcFVVjwOs73sWQoxO6drOW2sZEf1phsCklI8BrO9770M5oJycz+cR\n",
"ICd1Xf8+sBgUAHDf99mKxWMBgLXWvw8sDBIAUBzxXDAJ5Z6gsoDVdT1SCBGLlYr9i4h+F5gxZrLT\n",
"a/JTGHB+wr8WgcUmCADF+cdau9q/tNaslGIhhPdxRGQiYqVUMs0sAtNaTxRak3vati3eHGPMKK0Q\n",
"EVdVNWI3oWukrKjotK7t0JzE/iWEuDpH0zRe4fP5nOxrjOFYPyIabVi2+awxQ+apfymlZudwpxsr\n",
"OSdxtA1za3JAKqmuiWSpDZo7dde3NOrGG+fcJdlZSrkJUyjxL5dWSs09tYYxJt05ZYZrmEKJf4VR\n",
"75q5XhsbHkI2sHv71y35MrYwIuI/ELXPz0+OvwkhYL/f7+Lv19rX1xcPwzD6JqWc7Rt/M8Zkr0VE\n",
"o//DMMAE2OVyWRyY07qum3ybA7bf73dCiKy+ue1vTqd40ZwWA1s6da01nE4nGIYBnp+f4eXlJdtC\n",
"Pj4+JmtNgCHiZODhcMhdw7cY2NIJPD097d7e3orXAZiarZQyHe7hRsaRIs9rWEuOpKhf3/d5UWaO\n",
"2uRGKVgZVdes5fJtsnOc9EqSc3x/gwx+uNVphetk5aBcxRyBjeUeFSlXKAp1XCTBqd1YYh6OZaTM\n",
"sNSUS00QESc1mKuDQzI8V5XSWvu7U9M0nOJuJYWfHAlZ/dxNYHGStm1HR+6qvXVde0BE5E90ixpJ\n",
"LqirFC3XnpumYSIa1eeVUhMTjS+AW/pXCGqJS25q98zTHLiVfzmfQsSsm8amoOaS5VaghBCL81lr\n",
"5xP0WrmHfzlQUsqsJC+l/Pb9LYFt7V9uvhKCgIjfz1hbAtvSvxyokjncU9XsDXqNpPxrDT9072rx\n",
"o2GOOJLQtu1YMbdLRFTs9DHjWGOG1lqfG9272pIgYvIlaHa3Sx7mtmAbIahbhfl/uE9VfUsiWrxj\n",
"a3xrK1COsCedvsSU4mpsaenMndYWoEK9k8BSbDmlzNwl7xFkFE1yA0dMjHNpzk/K7v+JwfF45LAA\n",
"I6UEIvKFHGstDMMAXdf5Eh0iwul0gtfX16Ka4080Dwzgu1jadR28v7+DtRYul4v/RUQ4HA4ghAAi\n",
"AiklHI/HhwPk2j9qUk7yPOtOtgAAAABJRU5ErkJggg==\n",
"\" transform=\"translate(1239, 1559)\"/>\n",
"</g>\n",
"<g clip-path=\"url(#clip8001)\">\n",
"<image width=\"43\" height=\"55\" xlink:href=\"data:image/png;base64,\n",
"iVBORw0KGgoAAAANSUhEUgAAACsAAAA3CAYAAACVSbMgAAAENklEQVRogdVa/23zLBC+fHoHuGYE\n",
"ugHpCHQDqyMwAuoIdAPPgDoBzQhWJnA8As0G9/4RnYVtYoOdNu+H9Eita7iH8/3i6I6I4LfH+Xym\n",
"0+kEiAhCCHh+ft5lTSSiX0PTNCSEIAAYQAhB1lpamr9KqLWWhBCEiCSlJK01tW07K8wYMyGZIj23\n",
"ThHJtm2TmmForZOC6rpeJMpAxJuEs4mGEGaJMqqqovEGc4nGGt5E1lqbLSzWsFJqQkRrTcYYMsaQ\n",
"1pqklJM1jDETwtlkEbFfSEpJxhiy1t4U1rYthRAGGp+zxxACxXaNiOvIss0hIjVNc1NgrP2qqoh/\n",
"T2npFpqmIVaMc46KyVZVRQAwSzS2URbG0SKXKMN7n7T/rMlCCFJKFWmHNVzXdTFZljl2tP9yEkfX\n",
"daCUynkVAAAOh8NOSgkAAC8vL9nz4qGUghDC4FkWWQAAIUSRMCZ5OBzyUmlC3uVyGTzLIiuEmOwy\n",
"Z86WEUIARBw8yyZ7Op2KhG0l23Ud7Pf7wbMsslJKOB6PRcK2kj0ej8B2348S7/be997pnCNr7Ww4\n",
"CyGsigQsbxxJshdQSvUxc1xBxZsoJWWtncznFD1+vzhQK6UoTr2QCN45GNcaXM+ynFQFt0kAoySd\n",
"MsYb5lSOiISIlDKh4k/nvR8ULkKI5MKlZGPc8oNisjHWOtCtrySlnK3MdkS0KcRsGV9fX3Q8HmG/\n",
"34NSajHbPZRs6ciuDf6F8QcA4Pv7m7TWcLlcQEoJSil4fX1dVYD86CAi0FonvZKPL977VR5/b8yS\n",
"HYMPe865h5AHomFlX4LfJt//0LYt5Wr4UeT7H+I+FCJSVVWktc5qbMyRr6qK6rpebC8VmwEiJg94\n",
"IQRyzm0mz0pYSx6IrnlaSpn96X6CfI7sPkdvsbF7kV/q2oCUclU9OoemaWjc4yrBrV4DAEBWI3cN\n",
"+EShlCLnHBljkn2xFJLFNyLe7KveA2xmY4V47xfJj4t6UErd7IfeCxy/585q3vuk6cRz+oXGHbt7\n",
"QwiR1aRzzg3OeHHrcxBjfzJl8kEw9yTMncvYhICIgO1m7XmqRLsl/sFmwdod7JoJ3yM1psAOlft+\n",
"CKE3Ce/91AnGqr8nODKUzHHO9ZFh8pnG6dBaezfT0Fon7wqWgIjXSBE/jFvsqVS4pfTjy5A1bfuq\n",
"qq5pfPyHOcKM0uOO976vGdaYlzGGEJGSR/Hz+Uxvb2/ZPVkhBEgpQQgB+/2+bz53XQefn5/QdR0A\n",
"ACAidF0HT09PRYfRj48Pen9/h8UdzWm4FGsTj7X2+rWXXmyaJrv4mMPaWxtWWtJm5+xuDWkhRHbW\n",
"atu2b6nGtS33hld5dV3Xi/Uql4Ula4+VwTfkvN5del3n85n4GggR8/8zYzR2u92EjJQSTqcT1HU9\n",
"72C/jTkza9v28QTHfpEiylexDyeYIhxrOK7S/lf92b+upwAVlBMU2wAAAABJRU5ErkJggg==\n",
"\" transform=\"translate(-1, 716)\"/>\n",
"</g>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"451.712\" cy=\"1130.44\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"451.712\" cy=\"1130.44\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1175.64\" cy=\"782.521\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1175.64\" cy=\"782.521\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"270.729\" cy=\"1091.79\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"270.729\" cy=\"1091.79\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1175.64\" cy=\"1207.76\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1175.64\" cy=\"1207.76\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"994.659\" cy=\"1091.79\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"994.659\" cy=\"1091.79\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1537.61\" cy=\"898.496\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1537.61\" cy=\"898.496\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1899.57\" cy=\"937.154\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1899.57\" cy=\"937.154\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1899.57\" cy=\"434.598\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1899.57\" cy=\"434.598\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"632.694\" cy=\"1014.47\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"632.694\" cy=\"1014.47\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"632.694\" cy=\"1014.47\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"632.694\" cy=\"1014.47\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"632.694\" cy=\"1130.44\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"632.694\" cy=\"1130.44\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1537.61\" cy=\"511.915\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1537.61\" cy=\"511.915\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1537.61\" cy=\"821.18\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1537.61\" cy=\"821.18\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"2261.54\" cy=\"627.889\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"2261.54\" cy=\"627.889\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1175.64\" cy=\"821.18\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1175.64\" cy=\"821.18\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"2261.54\" cy=\"86.6754\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"2261.54\" cy=\"86.6754\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"994.659\" cy=\"898.496\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"994.659\" cy=\"898.496\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1356.62\" cy=\"743.863\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1356.62\" cy=\"743.863\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1537.61\" cy=\"782.521\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1537.61\" cy=\"782.521\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1356.62\" cy=\"1401.05\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1356.62\" cy=\"1401.05\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"270.729\" cy=\"1285.08\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"270.729\" cy=\"1285.08\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1899.57\" cy=\"821.18\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1899.57\" cy=\"821.18\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1175.64\" cy=\"627.889\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1175.64\" cy=\"627.889\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"813.676\" cy=\"627.889\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"813.676\" cy=\"627.889\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1718.59\" cy=\"202.65\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1718.59\" cy=\"202.65\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"813.676\" cy=\"1169.1\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"813.676\" cy=\"1169.1\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"994.659\" cy=\"1053.13\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"994.659\" cy=\"1053.13\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1537.61\" cy=\"473.257\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1537.61\" cy=\"473.257\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1537.61\" cy=\"1014.47\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1537.61\" cy=\"1014.47\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"994.659\" cy=\"589.231\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8003)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"994.659\" cy=\"589.231\" r=\"14\"/>\n",
"</svg>\n"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"n_vertices, n_samples = 20, 30\n",
"g_vectors = zeros(Int, n_samples, 2)\n",
"\n",
"for i=1:n_samples\n",
" RS = polytope.rand_sphere(6, n_vertices)\n",
" g_vectors[i,:] = RS.G_VECTOR[3:4] # notice index shift as Julia counts from 1\n",
"end\n",
"scatter(g_vectors[:,1], g_vectors[:,2], xlabel=\"\\$g_2\\$\", ylabel=\"\\$g_3\\$\", legend=false)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Compare the empirically found upper bound for the $g_3$ values with the true bound from Stanley's g-theorem."
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 2400 1600\">\n",
"<defs>\n",
" <clipPath id=\"clip8200\">\n",
" <rect x=\"0\" y=\"0\" width=\"2000\" height=\"2000\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<defs>\n",
" <clipPath id=\"clip8201\">\n",
" <rect x=\"0\" y=\"0\" width=\"2400\" height=\"1600\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip8201)\" points=\"\n",
"0,1600 2400,1600 2400,0 0,0 \n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip8202\">\n",
" <rect x=\"480\" y=\"0\" width=\"1681\" height=\"1600\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip8201)\" points=\"\n",
"237.767,1440.48 2321.26,1440.48 2321.26,47.2441 237.767,47.2441 \n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip8203\">\n",
" <rect x=\"237\" y=\"47\" width=\"2084\" height=\"1394\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polyline clip-path=\"url(#clip8203)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 475.421,1440.48 475.421,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8203)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 922.139,1440.48 922.139,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8203)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1368.86,1440.48 1368.86,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8203)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1815.58,1440.48 1815.58,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8203)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 2262.29,1440.48 2262.29,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8203)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 237.767,1439.57 2321.26,1439.57 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8203)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 237.767,1198.84 2321.26,1198.84 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8203)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 237.767,958.111 2321.26,958.111 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8203)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 237.767,717.383 2321.26,717.383 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8203)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 237.767,476.655 2321.26,476.655 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8203)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 237.767,235.927 2321.26,235.927 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8201)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 237.767,1440.48 2321.26,1440.48 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8201)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 237.767,1440.48 237.767,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8201)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 475.421,1440.48 475.421,1419.58 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8201)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 922.139,1440.48 922.139,1419.58 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8201)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1368.86,1440.48 1368.86,1419.58 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8201)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1815.58,1440.48 1815.58,1419.58 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8201)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 2262.29,1440.48 2262.29,1419.58 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8201)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 237.767,1439.57 269.02,1439.57 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8201)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 237.767,1198.84 269.02,1198.84 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8201)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 237.767,958.111 269.02,958.111 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8201)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 237.767,717.383 269.02,717.383 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8201)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 237.767,476.655 269.02,476.655 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip8201)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 237.767,235.927 269.02,235.927 \n",
" \"/>\n",
"<g clip-path=\"url(#clip8201)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 475.421, 1494.48)\" x=\"475.421\" y=\"1494.48\">65.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8201)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 922.139, 1494.48)\" x=\"922.139\" y=\"1494.48\">67.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8201)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1368.86, 1494.48)\" x=\"1368.86\" y=\"1494.48\">70.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8201)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1815.58, 1494.48)\" x=\"1815.58\" y=\"1494.48\">72.5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8201)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 2262.29, 1494.48)\" x=\"2262.29\" y=\"1494.48\">75.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8201)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 213.767, 1457.07)\" x=\"213.767\" y=\"1457.07\">50</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8201)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 213.767, 1216.34)\" x=\"213.767\" y=\"1216.34\">100</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8201)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 213.767, 975.611)\" x=\"213.767\" y=\"975.611\">150</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8201)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 213.767, 734.883)\" x=\"213.767\" y=\"734.883\">200</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8201)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 213.767, 494.155)\" x=\"213.767\" y=\"494.155\">250</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8201)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 213.767, 253.427)\" x=\"213.767\" y=\"253.427\">300</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip8201)\">\n",
"<image width=\"54\" height=\"43\" xlink:href=\"data:image/png;base64,\n",
"iVBORw0KGgoAAAANSUhEUgAAADYAAAArCAYAAAAzDXuYAAAD6ElEQVRogc1Z/W3rIBC/PL0BLhmB\n",
"bnAzkA2sjkA3cDOCR8gMbidAHgF1Atcj0Gxw748+EMY4Bsdpg3SKYvFxP7iPHwcwM9wixhhWSrGU\n",
"khGRAYCJiJum4VvnvkVWD9RaMxExADAAsBCClVLcNA1XVcUAwIjIxhgP0G2CUoqttXcFvmqQUsoD\n",
"QkRu23aipLXWAzfGcN/3fgwAcFVVjwOs73sWQoxO6drOW2sZEf1phsCklI8BrO9770M5oJycz+cR\n",
"ICd1Xf8+sBgUAHDf99mKxWMBgLXWvw8sDBIAUBzxXDAJ5Z6gsoDVdT1SCBGLlYr9i4h+F5gxZrLT\n",
"a/JTGHB+wr8WgcUmCADF+cdau9q/tNaslGIhhPdxRGQiYqVUMs0sAtNaTxRak3vati3eHGPMKK0Q\n",
"EVdVNWI3oWukrKjotK7t0JzE/iWEuDpH0zRe4fP5nOxrjOFYPyIabVi2+awxQ+apfymlZudwpxsr\n",
"OSdxtA1za3JAKqmuiWSpDZo7dde3NOrGG+fcJdlZSrkJUyjxL5dWSs09tYYxJt05ZYZrmEKJf4VR\n",
"75q5XhsbHkI2sHv71y35MrYwIuI/ELXPz0+OvwkhYL/f7+Lv19rX1xcPwzD6JqWc7Rt/M8Zkr0VE\n",
"o//DMMAE2OVyWRyY07qum3ybA7bf73dCiKy+ue1vTqd40ZwWA1s6da01nE4nGIYBnp+f4eXlJdtC\n",
"Pj4+JmtNgCHiZODhcMhdw7cY2NIJPD097d7e3orXAZiarZQyHe7hRsaRIs9rWEuOpKhf3/d5UWaO\n",
"2uRGKVgZVdes5fJtsnOc9EqSc3x/gwx+uNVphetk5aBcxRyBjeUeFSlXKAp1XCTBqd1YYh6OZaTM\n",
"sNSUS00QESc1mKuDQzI8V5XSWvu7U9M0nOJuJYWfHAlZ/dxNYHGStm1HR+6qvXVde0BE5E90ixpJ\n",
"LqirFC3XnpumYSIa1eeVUhMTjS+AW/pXCGqJS25q98zTHLiVfzmfQsSsm8amoOaS5VaghBCL81lr\n",
"5xP0WrmHfzlQUsqsJC+l/Pb9LYFt7V9uvhKCgIjfz1hbAtvSvxyokjncU9XsDXqNpPxrDT9072rx\n",
"o2GOOJLQtu1YMbdLRFTs9DHjWGOG1lqfG9272pIgYvIlaHa3Sx7mtmAbIahbhfl/uE9VfUsiWrxj\n",
"a3xrK1COsCedvsSU4mpsaenMndYWoEK9k8BSbDmlzNwl7xFkFE1yA0dMjHNpzk/K7v+JwfF45LAA\n",
"I6UEIvKFHGstDMMAXdf5Eh0iwul0gtfX16Ka4080Dwzgu1jadR28v7+DtRYul4v/RUQ4HA4ghAAi\n",
"AiklHI/HhwPk2j9qUk7yPOtOtgAAAABJRU5ErkJggg==\n",
"\" transform=\"translate(1253, 1559)\"/>\n",
"</g>\n",
"<g clip-path=\"url(#clip8201)\">\n",
"<image width=\"43\" height=\"55\" xlink:href=\"data:image/png;base64,\n",
"iVBORw0KGgoAAAANSUhEUgAAACsAAAA3CAYAAACVSbMgAAAENklEQVRogdVa/23zLBC+fHoHuGYE\n",
"ugHpCHQDqyMwAuoIdAPPgDoBzQhWJnA8As0G9/4RnYVtYoOdNu+H9Eita7iH8/3i6I6I4LfH+Xym\n",
"0+kEiAhCCHh+ft5lTSSiX0PTNCSEIAAYQAhB1lpamr9KqLWWhBCEiCSlJK01tW07K8wYMyGZIj23\n",
"ThHJtm2TmmForZOC6rpeJMpAxJuEs4mGEGaJMqqqovEGc4nGGt5E1lqbLSzWsFJqQkRrTcYYMsaQ\n",
"1pqklJM1jDETwtlkEbFfSEpJxhiy1t4U1rYthRAGGp+zxxACxXaNiOvIss0hIjVNc1NgrP2qqoh/\n",
"T2npFpqmIVaMc46KyVZVRQAwSzS2URbG0SKXKMN7n7T/rMlCCFJKFWmHNVzXdTFZljl2tP9yEkfX\n",
"daCUynkVAAAOh8NOSgkAAC8vL9nz4qGUghDC4FkWWQAAIUSRMCZ5OBzyUmlC3uVyGTzLIiuEmOwy\n",
"Z86WEUIARBw8yyZ7Op2KhG0l23Ud7Pf7wbMsslJKOB6PRcK2kj0ej8B2348S7/be997pnCNr7Ww4\n",
"CyGsigQsbxxJshdQSvUxc1xBxZsoJWWtncznFD1+vzhQK6UoTr2QCN45GNcaXM+ynFQFt0kAoySd\n",
"MsYb5lSOiISIlDKh4k/nvR8ULkKI5MKlZGPc8oNisjHWOtCtrySlnK3MdkS0KcRsGV9fX3Q8HmG/\n",
"34NSajHbPZRs6ciuDf6F8QcA4Pv7m7TWcLlcQEoJSil4fX1dVYD86CAi0FonvZKPL977VR5/b8yS\n",
"HYMPe865h5AHomFlX4LfJt//0LYt5Wr4UeT7H+I+FCJSVVWktc5qbMyRr6qK6rpebC8VmwEiJg94\n",
"IQRyzm0mz0pYSx6IrnlaSpn96X6CfI7sPkdvsbF7kV/q2oCUclU9OoemaWjc4yrBrV4DAEBWI3cN\n",
"+EShlCLnHBljkn2xFJLFNyLe7KveA2xmY4V47xfJj4t6UErd7IfeCxy/585q3vuk6cRz+oXGHbt7\n",
"QwiR1aRzzg3OeHHrcxBjfzJl8kEw9yTMncvYhICIgO1m7XmqRLsl/sFmwdod7JoJ3yM1psAOlft+\n",
"CKE3Ce/91AnGqr8nODKUzHHO9ZFh8pnG6dBaezfT0Fon7wqWgIjXSBE/jFvsqVS4pfTjy5A1bfuq\n",
"qq5pfPyHOcKM0uOO976vGdaYlzGGEJGSR/Hz+Uxvb2/ZPVkhBEgpQQgB+/2+bz53XQefn5/QdR0A\n",
"ACAidF0HT09PRYfRj48Pen9/h8UdzWm4FGsTj7X2+rWXXmyaJrv4mMPaWxtWWtJm5+xuDWkhRHbW\n",
"atu2b6nGtS33hld5dV3Xi/Uql4Ula4+VwTfkvN5del3n85n4GggR8/8zYzR2u92EjJQSTqcT1HU9\n",
"72C/jTkza9v28QTHfpEiylexDyeYIhxrOK7S/lf92b+upwAVlBMU2wAAAABJRU5ErkJggg==\n",
"\" transform=\"translate(-1, 716)\"/>\n",
"</g>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"475.421\" cy=\"1367.35\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"475.421\" cy=\"1367.35\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1190.17\" cy=\"1324.02\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1190.17\" cy=\"1324.02\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"296.734\" cy=\"1362.53\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"296.734\" cy=\"1362.53\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1190.17\" cy=\"1376.98\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1190.17\" cy=\"1376.98\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1011.48\" cy=\"1362.53\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1011.48\" cy=\"1362.53\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1547.54\" cy=\"1338.46\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1547.54\" cy=\"1338.46\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1904.92\" cy=\"1343.28\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1904.92\" cy=\"1343.28\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1904.92\" cy=\"1280.69\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1904.92\" cy=\"1280.69\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"654.108\" cy=\"1352.91\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"654.108\" cy=\"1352.91\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"654.108\" cy=\"1352.91\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"654.108\" cy=\"1352.91\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"654.108\" cy=\"1367.35\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"654.108\" cy=\"1367.35\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1547.54\" cy=\"1290.32\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1547.54\" cy=\"1290.32\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1547.54\" cy=\"1328.83\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1547.54\" cy=\"1328.83\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"2262.29\" cy=\"1304.76\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"2262.29\" cy=\"1304.76\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1190.17\" cy=\"1328.83\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1190.17\" cy=\"1328.83\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"2262.29\" cy=\"1237.36\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"2262.29\" cy=\"1237.36\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1011.48\" cy=\"1338.46\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1011.48\" cy=\"1338.46\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1368.86\" cy=\"1319.2\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1368.86\" cy=\"1319.2\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1547.54\" cy=\"1324.02\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1547.54\" cy=\"1324.02\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1368.86\" cy=\"1401.05\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1368.86\" cy=\"1401.05\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"296.734\" cy=\"1386.61\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"296.734\" cy=\"1386.61\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1904.92\" cy=\"1328.83\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1904.92\" cy=\"1328.83\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1190.17\" cy=\"1304.76\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1190.17\" cy=\"1304.76\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"832.796\" cy=\"1304.76\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"832.796\" cy=\"1304.76\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1726.23\" cy=\"1251.8\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1726.23\" cy=\"1251.8\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"832.796\" cy=\"1372.16\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"832.796\" cy=\"1372.16\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1011.48\" cy=\"1357.72\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1011.48\" cy=\"1357.72\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1547.54\" cy=\"1285.5\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1547.54\" cy=\"1285.5\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1547.54\" cy=\"1352.91\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1547.54\" cy=\"1352.91\" r=\"14\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#000000; stroke:none; fill-opacity:1\" cx=\"1011.48\" cy=\"1299.95\" r=\"18\"/>\n",
"<circle clip-path=\"url(#clip8203)\" style=\"fill:#009af9; stroke:none; fill-opacity:1\" cx=\"1011.48\" cy=\"1299.95\" r=\"14\"/>\n",
"<polyline clip-path=\"url(#clip8203)\" style=\"stroke:#e26f46; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 296.734,404.437 475.421,356.291 654.108,303.331 832.796,298.516 1011.48,288.887 1190.17,274.443 1368.86,255.185 1547.54,231.112 1726.23,202.225 1904.92,168.523 \n",
" 2083.61,130.006 2262.29,86.6754 \n",
" \"/>\n",
"</svg>\n"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"min_g2, max_g2 = extrema(g_vectors[:,1])\n",
"ub = [polytope.pseudopower(pm_Integer(g2), 2) for g2 in min_g2:max_g2]\n",
"plot!(min_g2:max_g2, ub)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Compare with the maximal g-vector from McMullen's upper bound theorem shows that the random polytopes have rather few faces."
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"pm::Vector<pm::Integer>\n",
"1 13 91 455"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"polytope.upper_bound_theorem(6,n_vertices).G_VECTOR"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"The lesson to learn here is the following.\n",
"\n",
"By just looking at this class of random polytopes, one cannot get an adequate intuition about the set of all 6-polytopes with 20 vertices, not even the simplicial ones."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Cubic Tropical Hypersurfaces"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"On a classical smooth cubic surface are 27 lines\n",
"\n",
"<img src=\"https://blogs.ams.org/visualinsight/files/2018/08/clebsch_diagonal_cubic-1-1.gif\" style=\"display: block; margin-left: auto; margin-right: auto; width: 25%;\"/>\n",
"\n",
"(Credit [Greg Egan](http://www.gregegan.net/))\n",
"\n",
"\n",
"What about a tropical cubic hypersurface?"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"We start with a triangulation of the simplex"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"type: SubdivisionOfPoints<Rational>\n",
"\n",
"POINTS\n",
"1 0 0 0\n",
"1 0 0 1\n",
"1 0 0 2\n",
"1 0 0 3\n",
"1 0 1 0\n",
"1 0 1 1\n",
"1 0 1 2\n",
"1 0 2 0\n",
"1 0 2 1\n",
"1 0 3 0\n",
"1 1 0 0\n",
"1 1 0 1\n",
"1 1 0 2\n",
"1 1 1 0\n",
"1 1 1 1\n",
"1 1 2 0\n",
"1 2 0 0\n",
"1 2 0 1\n",
"1 2 1 0\n",
"1 3 0 0\n",
"\n",
"\n",
"MAXIMAL_CELLS\n",
"{0 1 4 10}\n",
"{10 11 13 16}\n",
"{14 15 16 17}\n",
"{15 16 17 18}\n",
"{16 17 18 19}\n",
"{2 3 6 12}\n",
"{2 6 8 12}\n",
"{11 12 14 17}\n",
"{8 9 11 14}\n",
"{9 11 14 15}\n",
"{9 11 13 15}\n",
"{11 13 15 16}\n",
"{7 10 11 13}\n",
"{7 9 11 13}\n",
"{1 4 7 10}\n",
"{5 8 9 11}\n",
"{5 7 9 11}\n",
"{2 5 8 11}\n",
"{11 14 16 17}\n",
"{11 14 15 16}\n",
"{5 7 10 11}\n",
"{1 5 7 10}\n",
"{2 11 12 14}\n",
"{2 8 12 14}\n",
"{2 8 11 14}\n",
"{2 5 10 11}\n",
"{1 2 5 10}\n",
"\n"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"simplex = polytope.simplex(3, 3)\n",
"lattice_points = polytope.LATTICE_POINTS(simplex)\n",
"maximal_cells = [[0,1,4,10],[10,11,13,16],[14,15,16,17],[15,16,17,18],[16,17,18,19],[2,3,6,12],[2,6,8,12],[11,12,14,17],[8,9,11,14],[9,11,14,15],[9,11,13,15],[11,13,15,16],[7,10,11,13],[7,9,11,13],[1,4,7,10],[5,8,9,11],[5,7,9,11],[2,5,8,11],[11,14,16,17],[11,14,15,16],[5,7,10,11],[1,5,7,10],[2,11,12,14],[2,8,12,14],[2,8,11,14],[2,5,10,11],[1,2,5,10]];\n",
"Δ = perlobj(\"fan::SubdivisionOfPoints\", POINTS=lattice_points, MAXIMAL_CELLS=maximal_cells)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"And compute from this the secondary cone"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"type: Cone<Rational>\n",
"\n",
"INEQUALITIES\n",
"(20) (0 1) (4 -2) (7 1)\n",
"(20) (10 1) (13 -2) (15 1)\n",
"(20) (7 1) (13 -2) (16 1)\n",
"(20) (14 1) (15 -1) (17 -1) (18 1)\n",
"(20) (11 1) (14 -2) (15 1) (16 -1) (17 1)\n",
"(20) (11 1) (14 -2) (15 1) (16 -1) (17 1)\n",
"(20) (15 1) (18 -2) (19 1)\n",
"(20) (3 1) (6 -2) (8 1)\n",
"(20) (6 1) (8 -1) (12 -1) (14 1)\n",
"(20) (11 -1) (12 1) (16 1) (17 -1)\n",
"(20) (2 1) (11 -1) (12 -1) (17 1)\n",
"(20) (8 1) (9 -1) (14 -1) (15 1)\n",
"(20) (5 1) (8 -1) (11 -1) (14 1)\n",
"(20) (2 1) (8 -2) (9 1) (11 -1) (14 1)\n",
"(20) (11 -1) (13 1) (14 1) (15 -1)\n",
"(20) (9 1) (11 -1) (14 1) (15 -2) (16 1)\n",
"(20) (9 1) (13 -1) (15 -1) (16 1)\n",
"(20) (7 1) (9 -1) (13 -1) (15 1)\n",
"(20) (11 -1) (13 1) (14 1) (15 -1)\n",
"(20) (7 -1) (9 1) (10 1) (13 -1)\n",
"(20) (5 1) (7 -1) (11 -1) (13 1)\n",
"(20) (5 1) (7 -1) (11 -1) (13 1)\n",
"(20) (1 -1) (4 1) (5 1) (7 -1)\n",
"(20) (5 -1) (7 1) (8 1) (9 -1)\n",
"(20) (2 1) (5 -1) (8 -1) (9 1)\n",
"(20) (5 1) (7 -2) (9 1) (10 1) (11 -1)\n",
"(20) (5 1) (8 -1) (11 -1) (14 1)\n",
"(20) (2 1) (5 -2) (8 1) (10 1) (11 -1)\n",
"(20) (11 1) (14 -2) (15 1) (16 -1) (17 1)\n",
"(20) (1 1) (5 -2) (7 1) (10 -1) (11 1)\n",
"(20) (2 1) (5 -2) (7 1)\n",
"(20) (2 1) (5 -2) (7 1)\n",
"(20) (2 -1) (8 1) (11 1) (12 1) (14 -2)\n",
"(20) (2 -1) (8 1) (11 1) (12 1) (14 -2)\n",
"(20) (2 -1) (8 1) (11 1) (12 1) (14 -2)\n",
"(20) (1 1) (2 -1) (10 -1) (11 1)\n",
"\n",
"\n",
"EQUATIONS\n",
"\n",
"\n",
"CONE_AMBIENT_DIM\n",
"20\n"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"scΔ = fan.secondary_cone(Δ)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"As the coefficients of our tropical polynomial we pick an interior point in the sceondary cone"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"pm::Vector<pm::Rational>\n",
"0 -23/26 -151/104 0 -1/20 -441/520 0 -11/260 3/26 207/260 -189/260 -613/520 -9/52 -1/260 0 267/260 21/65 211/260 122/65 719/260"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"coefficients = scΔ.REL_INT_POINT"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"And we need to homogenize the monomials"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"20×4 Array{pm_Integer,2}:\n",
" 3 0 0 0\n",
" 2 0 0 1\n",
" 1 0 0 2\n",
" 0 0 0 3\n",
" 2 0 1 0\n",
" 1 0 1 1\n",
" 0 0 1 2\n",
" 1 0 2 0\n",
" 0 0 2 1\n",
" 0 0 3 0\n",
" 2 1 0 0\n",
" 1 1 0 1\n",
" 0 1 0 2\n",
" 1 1 1 0\n",
" 0 1 1 1\n",
" 0 1 2 0\n",
" 1 2 0 0\n",
" 0 2 0 1\n",
" 0 2 1 0\n",
" 0 3 0 0"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"monomials = copy(lattice_points)\n",
"for i in 1:size(lattice_points, 1)\n",
" monomials[i] = 3 - sum(monomials[i, 2:4])\n",
"end\n",
"monomials"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Now we can compute the tropical hypersurface"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"type: Hypersurface<Min>\n",
"\n",
"MONOMIALS\n",
"3 0 0 0\n",
"2 0 0 1\n",
"1 0 0 2\n",
"0 0 0 3\n",
"2 0 1 0\n",
"1 0 1 1\n",
"0 0 1 2\n",
"1 0 2 0\n",
"0 0 2 1\n",
"0 0 3 0\n",
"2 1 0 0\n",
"1 1 0 1\n",
"0 1 0 2\n",
"1 1 1 0\n",
"0 1 1 1\n",
"0 1 2 0\n",
"1 2 0 0\n",
"0 2 0 1\n",
"0 2 1 0\n",
"0 3 0 0\n",
"\n",
"\n",
"COEFFICIENTS\n",
"0 -23/26 -151/104 0 -1/20 -441/520 0 -11/260 3/26 207/260 -189/260 -613/520 -9/52 -1/260 0 267/260 21/65 211/260 122/65 719/260\n"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"V = perlobj(\"tropical::Hypersurface<Min>\", MONOMIALS=monomials, COEFFICIENTS=coefficients)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"V.POLYNOMIAL"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Using A-Tint in polymake we can compute all lines on the cubic"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"┌ Warning: The return value contains pm::Polynomial<pm::TropicalNumber<pm::Min, pm::Rational>, int> which has not been wrapped yet\n",
"└ @ Polymake /Users/sascha/coding/Polymake/src/functions.jl:62\n",
"polymake: used package atint\n",
" a-tint is an extension for tropical intersection theory.\n",
" (C) 2011 - 2015 Simon Hampe, [email protected]\n",
" See also: https://github.com/simonhampe/atint \n",
"\n"
]
},
{
"data": {
"text/plain": [
"pm_Array{pm_perl_Object} of size 27"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"lines = tropical.lines_in_cubic(V.POLYNOMIAL)\n",
"isolated = tropical.all_isolated(lines)"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"text/html": [
"<!--\n",
"polymake for sascha\n",
"Fri Jan 25 12:00:01 2019\n",
"unnamed\n",
"-->\n",
"\n",
"\n",
"<html>\n",
" <head>\n",
" <title>unnamed</title>\n",
" <style>\n",
"/*\n",
"// COMMON_CODE_BLOCK_BEGIN\n",
"*/\n",
" html{overflow: scroll;}\n",
" body { font-family: Arial, Helvetica, sans-serif}\n",
" strong{font-size: 18px;}\n",
" canvas { z-index: 8; }\n",
" input[type='range'] {}\n",
" input[type='radio'] {margin-left:0;}\n",
" input[type='checkbox'] {margin-right:7px; margin-left: 0px; padding-left:0px;}\n",
" .group{padding-bottom: 40px;}\n",
" .settings * {z-index: 11; }\n",
" .settings{z-index: 10; margin-left: 30px; display: none; width: 14em; height: 90%; border: solid 1px silver; padding: 2px; overflow-y: scroll; background-color: white }\n",
" .indented{margin-left: 20px; margin-top: 15px; padding-bottom: 0px;} \n",
" .shownObjectsList{overflow: auto; max-width: 150px; max-height: 150px;}\n",
" .showSettingsButton{display: block; z-index: 12; position: absolute }\n",
" .hideSettingsButton{display: none; z-index: 12; position: absolute; opacity: 0.5}\n",
" .resetButton{margin-top: 20px;}\n",
" button{margin-left: 0;}\n",
" img{cursor: pointer;}\n",
" .suboption{padding-top: 30px;}\n",
" .transparency{display: none;}\n",
" .labelsCheckbox{margin-top: 10px;}\n",
"\n",
"\n",
" input[type=range] {\n",
" -webkit-appearance: none;\n",
" padding:0; \n",
" width:90%; \n",
" margin-left: auto;\n",
" margin-right: auto;\n",
" margin-top: 20px;\n",
" display: block;\t\n",
" }\n",
" input[type=range]:focus {\n",
" outline: none;\n",
" }\n",
" input[type=range]::-webkit-slider-runnable-track {\n",
" height: 4px;\n",
" cursor: pointer;\n",
" animate: 0.2s;\n",
" box-shadow: 0px 0px 0px #000000;\n",
" background: #E3E3E3;\n",
" border-radius: 0px;\n",
" border: 0px solid #000000;\n",
" }\n",
" input[type=range]::-webkit-slider-thumb {\n",
" box-shadow: 1px 1px 2px #B8B8B8;\n",
" border: 1px solid #ABABAB;\n",
" height: 13px;\n",
" width: 25px;\n",
" border-radius: 20px;\n",
" background: #E0E0E0;\n",
" cursor: pointer;\n",
" -webkit-appearance: none;\n",
" margin-top: -5px;\n",
" }\n",
" input[type=range]:focus::-webkit-slider-runnable-track {\n",
" background: #E3E3E3;\n",
" }\n",
" input[type=range]::-moz-range-track {\n",
" height: 4px;\n",
" cursor: pointer;\n",
" animate: 0.2s;\n",
" box-shadow: 0px 0px 0px #000000;\n",
" background: #E3E3E3;\n",
" border-radius: 0px;\n",
" border: 0px solid #000000;\n",
" }\n",
" input[type=range]::-moz-range-thumb {\n",
" box-shadow: 1px 1px 2px #B8B8B8;\n",
" border: 1px solid #ABABAB;\n",
" height: 13px;\n",
" width: 25px;\n",
" border-radius: 20px;\n",
" background: #E0E0E0;\n",
" cursor: pointer;\n",
" }\n",
" input[type=range]::-ms-track {\n",
" height: 4px;\n",
" cursor: pointer;\n",
" animate: 0.2s;\n",
" background: transparent;\n",
" border-color: transparent;\n",
" color: transparent;\n",
" }\n",
" input[type=range]::-ms-fill-lower {\n",
" background: #E3E3E3;\n",
" border: 0px solid #000000;\n",
" border-radius: 0px;\n",
" box-shadow: 0px 0px 0px #000000;\n",
" }\n",
" input[type=range]::-ms-fill-upper {\n",
" background: #E3E3E3;\n",
" border: 0px solid #000000;\n",
" border-radius: 0px;\n",
" box-shadow: 0px 0px 0px #000000;\n",
" }\n",
" input[type=range]::-ms-thumb {\n",
" box-shadow: 1px 1px 2px #B8B8B8;\n",
" border: 1px solid #ABABAB;\n",
" height: 13px;\n",
" width: 25px;\n",
" border-radius: 20px;\n",
" background: #E0E0E0;\n",
" cursor: pointer;\n",
" }\n",
" input[type=range]:focus::-ms-fill-lower {\n",
" background: #E3E3E3;\n",
" }\n",
" input[type=range]:focus::-ms-fill-upper {\n",
" background: #E3E3E3;\n",
" }\n",
"/*\n",
"// COMMON_CODE_BLOCK_END\n",
"*/\n",
"\t\t</style>\n",
" </head>\n",
"\n",
"<body>\n",
"\n",
"\t\t<div id='settings_0' class='settings'>\n",
"\t\t\t<div class=group id='explode_0'>\n",
"\t\t\t\t<strong>Explode</strong>\n",
"\t\t\t\t<input id='explodeRange_0' type='range' min=0 max=6 step=0.01 value=0>\n",
"\t\t\t\t<div class=indented><input id='explodeCheckbox_0' type='checkbox'>Automatic explosion</div>\n",
"\t\t\t\t<div class=suboption>Exploding speed</div>\n",
"\t\t\t\t<input id='explodingSpeedRange_0' type='range' min=0 max=0.5 step=0.001 value=0.05>\n",
"\t\t\t</div>\n",
"\n",
"\t\t\t\n",
"\t\t\t<div class=group id='transparency_0' class='transparency'>\n",
"\t\t\t\t<strong>Transparency</strong>\n",
"\t\t\t\t<input id='transparencyRange_0' type='range' min=0 max=1 step=0.01 value=0>\n",
"\t\t\t</div>\n",
"\t\t\t\n",
"\t\t\t<div class=group id='rotation_0'>\n",
"\t\t\t\t<strong>Rotation</strong>\n",
"\t\t\t\t<div class=indented>\n",
"\t\t\t\t\t<div><input type='checkbox' id='changeRotationX_0'> x-axis</div>\n",
"\t\t\t\t\t<div><input type='checkbox' id='changeRotationY_0'> y-axis</div>\n",
"\t\t\t\t\t<div><input type='checkbox' id='changeRotationZ_0'> z-axis</div>\n",
"\t\t\t\t\t<button id='resetButton_0' class='resetButton' >Reset</button>\n",
"\t\t\t\t</div>\n",
"\n",
"\t\t\t\t<div class=suboption>Rotation speed</div>\n",
"\t\t\t\t<input id='rotationSpeedRange_0' type='range' min=0 max=5 step=0.01 value=2>\n",
"\n",
"\t\t\t</div>\n",
"\n",
"\n",
"\t\t\t<div class=group id='display_0'>\n",
"\t\t\t\t<strong>Display</strong>\n",
"\t\t\t\t<div class=indented>\n",
"\t\t\t\t\t<div id='shownObjectsList_0' class='shownObjectsList'></div>\n",
"\t\t\t\t\t<div class='labelsCheckbox'><input type='checkbox' id='labelsCheckboxInput_0' checked>Labels</div>\n",
"\t\t\t\t</div>\n",
"\t\t\t</div>\n",
"\n",
"\n",
"\t\t\t<div class=group id='svg_0'>\n",
"\t\t\t\t<strong>SVG</strong>\n",
"\t\t\t\t<div class=indented>\n",
"\t\t\t\t\t<form>\n",
"\t\t\t\t\t\t<input type=\"radio\" name='screenshotMode' value='download' id='download_0' checked> Download<br>\n",
"\t\t\t\t\t\t<input type=\"radio\" name='screenshotMode' value='tab' id='tab_0' > New tab<br>\n",
"\t\t\t\t\t</form>\n",
"\t\t\t\t\t<button id='takeScreenshot_0'>Screenshot</button>\n",
"\t\t\t\t</div>\n",
"\t\t\t</div>\n",
"\n",
"\t\t</div>\t<!-- end of settings -->\n",
"\t\t<img id='hideSettingsButton_0' style=\"display: none\" class='hideSettingsButton' src='/kernelspecs/julia-1.0/close.svg' width=20px\">\n",
"\t\t<img id='showSettingsButton_0' class='showSettingsButton' src='/kernelspecs/julia-1.0/menu.svg' width=20px\">\n",
"<div id=\"model4648818478\"></div>\n",
"\n",
"<script>\n",
"requirejs.config({\n",
" paths: {\n",
" three: '/kernelspecs/julia-1.0/three',\n",
" Detector: '/kernelspecs/julia-1.0/Detector',\n",
" SVGRenderer: '/kernelspecs/julia-1.0/SVGRenderer',\n",
" CanvasRenderer: '/kernelspecs/julia-1.0/CanvasRenderer',\n",
" Projector: '/kernelspecs/julia-1.0/Projector',\n",
" TrackballControls: '/kernelspecs/julia-1.0/TrackballControls'\n",
" },\n",
" shim: {\n",
" 'three':\n",
" {\n",
" exports: 'THREE'\n",
" },\n",
" 'Detector':\n",
" {\n",
" deps: [ 'three' ],\n",
" exports: 'Detector'\n",
" },\n",
" 'SVGRenderer':\n",
" {\n",
" deps: [ 'three' ],\n",
" exports: 'THREE.SVGRenderer'\n",
" },\n",
" 'CanvasRenderer':\n",
" {\n",
" deps: [ 'three' ],\n",
" exports: 'THREE.CanvasRenderer'\n",
" },\n",
" 'Projector':\n",
" {\n",
" deps: [ 'three' ],\n",
" exports: 'THREE.Projector'\n",
" },\n",
" 'TrackballControls':\n",
" {\n",
" deps: [ 'three' ],\n",
" exports: 'THREE.TrackballControls'\n",
" }\n",
" }\n",
"});\n",
"require(['three'],function(THREE){\n",
" window.THREE = THREE;\n",
" require(['Detector','SVGRenderer','CanvasRenderer','Projector','TrackballControls'],function(Detector,SVGRenderer,CanvasRenderer,Projector,TrackballControls){\n",
" THREE.SVGRenderer = SVGRenderer;\n",
" THREE.CanvasRenderer = CanvasRenderer;\n",
" THREE.Projector = Projector;\n",
" THREE.TrackballControls = TrackballControls;\n",
"\n",
"// COMMON_CODE_BLOCK_BEGIN\n",
"\tvar foldable = false;\n",
" var container = document.getElementById( 'model4648818478' );\n",
" var renderer = Detector.webgl? new THREE.WebGLRenderer({antialias: true}): new THREE.CanvasRenderer({antialias: true});\n",
"\tvar svgRenderer = new THREE.SVGRenderer({antialias: true});\n",
" var box = document.getElementsByClassName( 'output_subarea' )[0];\n",
" var notebook = document.getElementById( 'notebook_panel' );\n",
"\n",
" var width = box.clientWidth - 25;\n",
" var height = notebook.clientHeight * 0.8;\n",
" renderer.setSize(width, height);\n",
" svgRenderer.setSize(width, height);\n",
" renderer.setClearColor(0xFFFFFF, 1);\n",
" svgRenderer.setClearColor(0xFFFFFF, 1);\n",
"\n",
" container.appendChild(renderer.domElement);\n",
"\n",
" var scene = new THREE.Scene();\n",
" var camera = new THREE.PerspectiveCamera(75, width/height, 0.1, 1000);\n",
"\n",
" var renderid;\n",
"\n",
" camera.position.set(0, 0, 5);\n",
" camera.lookAt(0, 0, 0);\n",
" camera.up.set(0, 1, 0);\n",
"\n",
" // class to allow move points together with labels and spheres\n",
" var PMPoint = function (x,y,z) {\n",
" this.vector = new THREE.Vector3(x,y,z);\n",
" this.sprite = null;\n",
" this.sphere = null;\n",
" }\n",
" PMPoint.prototype.makelabel = function(label) {\n",
" this.sprite = textSprite( label );\n",
" this.sprite.position.copy(this.vector);\n",
" }\n",
" PMPoint.prototype.makesphere = function(radius,material) {\n",
" this.sphere = new THREE.Mesh(new THREE.SphereGeometry(radius), material);\n",
" this.sphere.position.copy(this.vector);\n",
" }\n",
"\n",
" PMPoint.prototype.setX = function(x) {\n",
" this.vector.setX(x);\n",
" if (this.sprite) {\n",
" this.sprite.position.setX(x);\n",
" }\n",
" if (this.sphere) {\n",
" this.sphere.position.setX(x);\n",
" }\n",
" };\n",
" PMPoint.prototype.setY = function(y) {\n",
" this.vector.setY(y);\n",
" if (this.sprite) {\n",
" this.sprite.position.setY(y);\n",
" }\n",
" if (this.sphere) {\n",
" this.sphere.position.setY(y);\n",
" }\n",
" };\n",
" PMPoint.prototype.setZ = function(z) {\n",
" this.vector.setZ(z);\n",
" if (this.sprite) {\n",
" this.sprite.position.setZ(z);\n",
" }\n",
" if (this.sphere) {\n",
" this.sphere.position.setZ(z);\n",
" }\n",
" };\n",
" PMPoint.prototype.set = function(x,y,z) {\n",
" this.vector.set(x,y,z);\n",
" if (this.sprite) {\n",
" this.sprite.position.set(x,y,z);\n",
" }\n",
" if (this.sphere) {\n",
" this.sphere.position.set(x,y,z);\n",
" }\n",
" };\n",
" PMPoint.prototype.add = function(o) {\n",
" if (this.sprite) {\n",
" o.add(this.sprite);\n",
" }\n",
" if (this.sphere) {\n",
" o.add(this.sphere);\n",
" }\n",
" };\n",
"\n",
"\n",
" var controls = new THREE.TrackballControls(camera, container);\n",
"\tcontrols.zoomSpeed = 0.2;\n",
"\tcontrols.rotateSpeed = 4;\n",
"\n",
" var all_objects = [];\n",
" var centroids = [];\n",
" // select the target node\n",
" var target = document.querySelector('#model4648818478');\n",
"\n",
" // create an observer instance\n",
" var observer = new MutationObserver(function(mutations) {\n",
" mutations.forEach(function(mutation) {\n",
" if (mutation.removedNodes && mutation.removedNodes.length > 0) {\n",
" cancelAnimationFrame(renderId);\n",
" observer.disconnect();\n",
" console.log(\"cancelled frame \"+renderId);\n",
" }\n",
" });\n",
" });\n",
"\n",
" // configuration of the observer:\n",
" var config = { childList: true, characterData: true }\n",
"\n",
" // pass in the target node, as well as the observer options\n",
" while (target) {\n",
" if (target.className==\"output\") {\n",
" observer.observe(target, config);\n",
" break;\n",
" }\n",
" target = target.parentNode;\n",
" }\n",
"\n",
"// COMMON_CODE_BLOCK_END\n",
"\n",
" var objectnames = [\"unnamed__1\",\"unnamed__2\",\"unnamed__3\",\"unnamed__4\",\"unnamed__5\",\"unnamed__6\",\"unnamed__7\",\"unnamed__8\",\"unnamed__9\",\"unnamed__10\",\"unnamed__11\",\"unnamed__12\",\"unnamed__13\",\"unnamed__14\",\"unnamed__15\",\"unnamed__16\",\"unnamed__17\",\"unnamed__18\",\"unnamed__19\",\"unnamed__20\",\"unnamed__21\",\"unnamed__22\",\"unnamed__23\",\"unnamed__24\",\"unnamed__25\",\"unnamed__26\",\"unnamed__27\",\"unnamed__28\",\"unnamed__29\",\"unnamed__30\",\"unnamed__31\",\"unnamed__32\",\"unnamed__33\",\"unnamed__34\",\"unnamed__35\",\"unnamed__36\",\"unnamed__37\",\"unnamed__38\",\"unnamed__39\",\"unnamed__40\",\"unnamed__41\",\"unnamed__42\",\"unnamed__43\",\"unnamed__44\",\"unnamed__45\",\"unnamed__46\",\"unnamed__47\",\"unnamed__48\",\"unnamed__49\",\"unnamed__50\",\"unnamed__51\",\"unnamed__52\",\"unnamed__53\",\"unnamed__54\",\"unnamed__55\",\"unnamed__56\",\"unnamed__57\",\"unnamed__58\",\"unnamed__59\",\"unnamed__60\",\"unnamed__61\",\"unnamed__62\",\"unnamed__63\",\"unnamed__64\",\"unnamed__65\",\"unnamed__66\",\"unnamed__67\",\"unnamed__68\",\"unnamed__69\",\"unnamed__70\",\"unnamed__71\",\"unnamed__72\",\"unnamed__73\",\"unnamed__74\",\"unnamed__75\",\"unnamed__76\",\"unnamed__77\",\"unnamed__78\",\"unnamed__79\",\"unnamed__80\",\"unnamed__81\",\"unnamed__82\",\"unnamed__83\",\"unnamed__84\",\"unnamed__85\",\"unnamed__86\",\"unnamed__87\",\"unnamed__88\",\"unnamed__89\",\"unnamed__90\",\"unnamed__91\",\"unnamed__92\",\"unnamed__93\",\"unnamed__94\",\"unnamed__95\",\"unnamed__96\",\"unnamed__97\",\"unnamed__98\",\"unnamed__99\",\"unnamed__100\",\"unnamed__101\",\"unnamed__102\",\"unnamed__103\",\"unnamed__104\",\"unnamed__105\",\"unnamed__106\",\"unnamed__107\",\"unnamed__108\",\"unnamed__109\",\"unnamed__110\",\"unnamed__111\",\"unnamed__112\",\"unnamed__113\",\"unnamed__114\",\"unnamed__115\",\"unnamed__116\",\"unnamed__117\",\"unnamed__118\",\"unnamed__119\",\"unnamed__120\",\"unnamed__121\",\"unnamed__122\",\"unnamed__123\",\"unnamed__124\",\"unnamed__125\",\"unnamed__126\",\"unnamed__127\",\"unnamed__128\",\"unnamed__129\",\"unnamed__130\",\"unnamed__131\",\"unnamed__132\",\"unnamed__133\",\"unnamed__134\",\"unnamed__135\",\"unnamed__136\",\"unnamed__137\",\"unnamed__138\",\"unnamed__139\",\"unnamed__140\",\"unnamed__141\",\"unnamed__142\",\"unnamed__143\",\"unnamed__144\",\"unnamed__145\",\"unnamed__146\",\"unnamed__147\",\"unnamed__148\",\"unnamed__149\",\"unnamed__150\",\"unnamed__151\",\"unnamed__152\",\"unnamed__153\",\"unnamed__154\",\"unnamed__155\",\"unnamed__156\",\"unnamed__157\",\"unnamed__158\",\"unnamed__159\",\"unnamed__160\",\"unnamed__161\",\"unnamed__162\",\"unnamed__163\",\"unnamed__164\",\"unnamed__165\",\"unnamed__166\",\"unnamed__167\",\"unnamed__168\",\"unnamed__169\",\"unnamed__170\",\"unnamed__171\",\"unnamed__172\",\"unnamed__173\",\"unnamed__174\",\"unnamed__175\",\"unnamed__176\",\"unnamed__177\",\"unnamed__178\",\"unnamed__179\",\"unnamed__180\",\"unnamed__181\",\"unnamed__182\",\"unnamed__183\",\"unnamed__184\",\"unnamed__185\",\"unnamed__186\",\"unnamed__187\",\"unnamed__188\",\"unnamed__189\",\"unnamed__190\",\"unnamed__191\",\"unnamed__192\",\"unnamed__193\",\"unnamed__194\",\"unnamed__195\",\"unnamed__196\",\"unnamed__197\",\"unnamed__198\",\"unnamed__199\"];\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, 0.05, 0.884615));\n",
" allpoints.push(new PMPoint(1.72692, 1.05, 0.884615));\n",
" allpoints.push(new PMPoint(0.726923, 1.05, 0.884615));\n",
" allpoints.push(new PMPoint(0.726923, 0.05, 0.884615));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.0365385, 0.567308));\n",
" allpoints.push(new PMPoint(1.72692, 1.05, 0.567308));\n",
" allpoints.push(new PMPoint(0.409615, 1.05, 0.567308));\n",
" allpoints.push(new PMPoint(0.409615, -0.0365385, 0.567308));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -1.45192, -1.45192));\n",
" allpoints.push(new PMPoint(1.72692, 1.05, -1.45192));\n",
" allpoints.push(new PMPoint(-1.27885, 1.05, -1.45192));\n",
" allpoints.push(new PMPoint(-1.27885, -1.45192, -1.45192));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, 0.05, 1.88462));\n",
" allpoints.push(new PMPoint(1.72692, 0.05, 0.884615));\n",
" allpoints.push(new PMPoint(0.726923, 0.05, 0.884615));\n",
" allpoints.push(new PMPoint(0.726923, 0.05, 1.88462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.00769231, 0.826923));\n",
" allpoints.push(new PMPoint(1.72692, 0.05, 0.884615));\n",
" allpoints.push(new PMPoint(0.726923, 0.05, 0.884615));\n",
" allpoints.push(new PMPoint(0.669231, -0.00769231, 0.826923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.0365385, 0.567308));\n",
" allpoints.push(new PMPoint(1.72692, -0.0365385, 0.769231));\n",
" allpoints.push(new PMPoint(0.611538, -0.0365385, 0.769231));\n",
" allpoints.push(new PMPoint(0.409615, -0.0365385, 0.567308));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.0365385, 0.567308));\n",
" allpoints.push(new PMPoint(1.72692, -0.963462, -0.359615));\n",
" allpoints.push(new PMPoint(-0.632692, -0.963462, -0.359615));\n",
" allpoints.push(new PMPoint(0.178846, -0.151923, 0.451923));\n",
" allpoints.push(new PMPoint(0.409615, -0.0365385, 0.567308));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
" faces.vertices.push(allpoints[4].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 4, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 4, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[4].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -1.45192, -1.33654));\n",
" allpoints.push(new PMPoint(1.72692, -1.45192, -1.45192));\n",
" allpoints.push(new PMPoint(-1.27885, -1.45192, -1.45192));\n",
" allpoints.push(new PMPoint(-1.27885, -1.45192, -1.33654));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -2.45192, -2.45192));\n",
" allpoints.push(new PMPoint(1.72692, -1.45192, -1.45192));\n",
" allpoints.push(new PMPoint(-1.27885, -1.45192, -1.45192));\n",
" allpoints.push(new PMPoint(-2.27885, -2.45192, -2.45192));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.0365385, 0.769231));\n",
" allpoints.push(new PMPoint(1.72692, -0.00769231, 0.826923));\n",
" allpoints.push(new PMPoint(0.669231, -0.00769231, 0.826923));\n",
" allpoints.push(new PMPoint(0.611538, -0.0365385, 0.769231));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.00769231, 0.826923));\n",
" allpoints.push(new PMPoint(1.72692, -0.00769231, 1.88462));\n",
" allpoints.push(new PMPoint(0.669231, -0.00769231, 1.88462));\n",
" allpoints.push(new PMPoint(0.669231, -0.00769231, 0.826923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.838462, -0.0326923));\n",
" allpoints.push(new PMPoint(1.72692, -0.0365385, 0.769231));\n",
" allpoints.push(new PMPoint(0.611538, -0.0365385, 0.769231));\n",
" allpoints.push(new PMPoint(-0.0230769, -0.353846, 0.451923));\n",
" allpoints.push(new PMPoint(-0.507692, -0.838462, -0.0326923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
" faces.vertices.push(allpoints[4].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(3, 2, 1, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(3, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(3, 0, 4, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[4].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.963462, -0.359615));\n",
" allpoints.push(new PMPoint(1.72692, -1.45192, -1.33654));\n",
" allpoints.push(new PMPoint(-1.27885, -1.45192, -1.33654));\n",
" allpoints.push(new PMPoint(-1.27885, -1.39423, -1.22115));\n",
" allpoints.push(new PMPoint(-1.06346, -1.17885, -0.790385));\n",
" allpoints.push(new PMPoint(-0.632692, -0.963462, -0.359615));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
" faces.vertices.push(allpoints[4].vector);\n",
" faces.vertices.push(allpoints[5].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(4, 3, 2, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(4, 2, 1, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(4, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(4, 0, 5, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[4].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[5].vector);\n",
" line.vertices.push(allpoints[4].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.963462, -0.282692));\n",
" allpoints.push(new PMPoint(1.72692, -0.963462, -0.359615));\n",
" allpoints.push(new PMPoint(-0.632692, -0.963462, -0.359615));\n",
" allpoints.push(new PMPoint(-0.632692, -0.963462, -0.282692));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -1.45192, -1.33654));\n",
" allpoints.push(new PMPoint(1.72692, -2.55385, -2.43846));\n",
" allpoints.push(new PMPoint(-2.38077, -2.55385, -2.43846));\n",
" allpoints.push(new PMPoint(-1.27885, -1.45192, -1.33654));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.838462, -0.0326923));\n",
" allpoints.push(new PMPoint(1.72692, -0.963462, -0.282692));\n",
" allpoints.push(new PMPoint(-0.632692, -0.963462, -0.282692));\n",
" allpoints.push(new PMPoint(-0.507692, -0.838462, -0.0326923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.838462, 1.88462));\n",
" allpoints.push(new PMPoint(1.72692, -0.838462, -0.0326923));\n",
" allpoints.push(new PMPoint(-0.876923, -0.838462, 1.88462));\n",
" allpoints.push(new PMPoint(-0.876923, -0.838462, 0.336538));\n",
" allpoints.push(new PMPoint(-0.507692, -0.838462, -0.0326923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
" faces.vertices.push(allpoints[4].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(3, 2, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(3, 0, 1, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(3, 1, 4, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[4].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -2.55385, -1.87308));\n",
" allpoints.push(new PMPoint(1.72692, -0.963462, -0.282692));\n",
" allpoints.push(new PMPoint(-2.43846, -2.55385, -1.87308));\n",
" allpoints.push(new PMPoint(-1.06346, -1.17885, -0.498077));\n",
" allpoints.push(new PMPoint(-0.632692, -0.963462, -0.282692));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
" faces.vertices.push(allpoints[4].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 0, 1, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 1, 4, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 4, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[4].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(0.726923, 1.05, 0.884615));\n",
" allpoints.push(new PMPoint(0.726923, 0.05, 0.884615));\n",
" allpoints.push(new PMPoint(0.726923, 0.05, 1.88462));\n",
" allpoints.push(new PMPoint(0.726923, 1.05, 1.88462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(1, 0, 3, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(1, 3, 2, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(0.611538, -0.0365385, 0.769231));\n",
" allpoints.push(new PMPoint(0.726923, 0.05, 0.884615));\n",
" allpoints.push(new PMPoint(0.669231, -0.00769231, 0.826923));\n",
" allpoints.push(new PMPoint(0.726923, 1.05, 0.884615));\n",
" allpoints.push(new PMPoint(0.409615, 1.05, 0.567308));\n",
" allpoints.push(new PMPoint(0.409615, -0.0365385, 0.567308));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
" faces.vertices.push(allpoints[4].vector);\n",
" faces.vertices.push(allpoints[5].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(1, 3, 4, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(1, 4, 5, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(1, 5, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(1, 0, 2, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[4].vector);\n",
" line.vertices.push(allpoints[5].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(0.409615, -0.0365385, 0.567308));\n",
" allpoints.push(new PMPoint(0.409615, 1.05, 0.567308));\n",
" allpoints.push(new PMPoint(0.178846, 1.05, 0.451923));\n",
" allpoints.push(new PMPoint(0.178846, -0.151923, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(0.669231, -0.00769231, 0.826923));\n",
" allpoints.push(new PMPoint(0.669231, -0.00769231, 1.88462));\n",
" allpoints.push(new PMPoint(0.726923, 0.05, 1.88462));\n",
" allpoints.push(new PMPoint(0.726923, 0.05, 0.884615));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(0, 3, 2, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(0, 2, 1, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(0.611538, -0.0365385, 0.769231));\n",
" allpoints.push(new PMPoint(-0.0230769, -0.353846, 0.451923));\n",
" allpoints.push(new PMPoint(0.178846, -0.151923, 0.451923));\n",
" allpoints.push(new PMPoint(0.409615, -0.0365385, 0.567308));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(1, 0, 3, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(1, 3, 2, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(0.669231, -0.00769231, 1.88462));\n",
" allpoints.push(new PMPoint(-0.0230769, -0.353846, 0.451923));\n",
" allpoints.push(new PMPoint(0.611538, -0.0365385, 0.769231));\n",
" allpoints.push(new PMPoint(0.669231, -0.00769231, 0.826923));\n",
" allpoints.push(new PMPoint(-0.761538, -0.723077, 0.451923));\n",
" allpoints.push(new PMPoint(-0.761538, -0.723077, 1.88462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
" faces.vertices.push(allpoints[4].vector);\n",
" faces.vertices.push(allpoints[5].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(4, 1, 2, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(4, 2, 3, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(4, 3, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(4, 0, 5, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[4].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[5].vector);\n",
" line.vertices.push(allpoints[4].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(0.178846, -0.151923, 0.451923));\n",
" allpoints.push(new PMPoint(-1.27885, -1.17885, -1.00577));\n",
" allpoints.push(new PMPoint(-1.06346, -1.17885, -0.790385));\n",
" allpoints.push(new PMPoint(-0.632692, -0.963462, -0.359615));\n",
" allpoints.push(new PMPoint(-1.27885, 1.05, -1.00577));\n",
" allpoints.push(new PMPoint(0.178846, 1.05, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
" faces.vertices.push(allpoints[4].vector);\n",
" faces.vertices.push(allpoints[5].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(1, 2, 3, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(1, 3, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(1, 0, 5, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(1, 5, 4, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[5].vector);\n",
" line.vertices.push(allpoints[4].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.0230769, -0.353846, 0.451923));\n",
" allpoints.push(new PMPoint(0.178846, -0.151923, 0.451923));\n",
" allpoints.push(new PMPoint(-0.632692, -0.963462, -0.359615));\n",
" allpoints.push(new PMPoint(-0.632692, -0.963462, -0.282692));\n",
" allpoints.push(new PMPoint(-0.507692, -0.838462, -0.0326923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
" faces.vertices.push(allpoints[4].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 4, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 4, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[4].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.0230769, -0.353846, 0.451923));\n",
" allpoints.push(new PMPoint(-0.507692, -0.838462, -0.0326923));\n",
" allpoints.push(new PMPoint(-0.876923, -0.838462, 0.336538));\n",
" allpoints.push(new PMPoint(-0.761538, -0.723077, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.632692, -0.963462, -0.282692));\n",
" allpoints.push(new PMPoint(-0.632692, -0.963462, -0.359615));\n",
" allpoints.push(new PMPoint(-1.06346, -1.17885, -0.790385));\n",
" allpoints.push(new PMPoint(-1.06346, -1.17885, -0.498077));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.507692, -0.838462, -0.0326923));\n",
" allpoints.push(new PMPoint(-0.632692, -0.963462, -0.282692));\n",
" allpoints.push(new PMPoint(-0.876923, -0.838462, 0.336538));\n",
" allpoints.push(new PMPoint(-1.06346, -1.17885, -0.498077));\n",
" allpoints.push(new PMPoint(-1.40962, -1.17885, -0.151923));\n",
" allpoints.push(new PMPoint(-1.26154, -1.03077, 0.144231));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
" faces.vertices.push(allpoints[4].vector);\n",
" faces.vertices.push(allpoints[5].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(4, 3, 1, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(4, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(4, 0, 2, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(4, 2, 5, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[4].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[5].vector);\n",
" line.vertices.push(allpoints[4].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.761538, -0.723077, 0.451923));\n",
" allpoints.push(new PMPoint(0.178846, -0.151923, 0.451923));\n",
" allpoints.push(new PMPoint(0.178846, 1.05, 0.451923));\n",
" allpoints.push(new PMPoint(-0.0230769, -0.353846, 0.451923));\n",
" allpoints.push(new PMPoint(-1.05, 1.05, 0.451923));\n",
" allpoints.push(new PMPoint(-1.05, -0.723077, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
" faces.vertices.push(allpoints[4].vector);\n",
" faces.vertices.push(allpoints[5].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(4, 2, 1, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(4, 1, 3, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(4, 3, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(4, 0, 5, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[4].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[5].vector);\n",
" line.vertices.push(allpoints[4].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.27885, -1.45192, -1.33654));\n",
" allpoints.push(new PMPoint(-1.27885, -1.39423, -1.22115));\n",
" allpoints.push(new PMPoint(-1.27885, -1.45192, -1.45192));\n",
" allpoints.push(new PMPoint(-1.27885, 1.05, -1.45192));\n",
" allpoints.push(new PMPoint(-1.27885, 1.05, -1.00577));\n",
" allpoints.push(new PMPoint(-1.27885, -1.17885, -1.00577));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
" faces.vertices.push(allpoints[4].vector);\n",
" faces.vertices.push(allpoints[5].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(3, 2, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(3, 0, 1, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(3, 1, 5, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(3, 5, 4, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[5].vector);\n",
" line.vertices.push(allpoints[4].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-2.27885, 1.05, -2.45192));\n",
" allpoints.push(new PMPoint(-1.27885, 1.05, -1.45192));\n",
" allpoints.push(new PMPoint(-1.27885, -1.45192, -1.45192));\n",
" allpoints.push(new PMPoint(-2.27885, -2.45192, -2.45192));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(0, 3, 2, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(0, 2, 1, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-2.27885, -2.45192, -2.45192));\n",
" allpoints.push(new PMPoint(-2.38077, -2.55385, -2.45192));\n",
" allpoints.push(new PMPoint(-1.27885, -1.45192, -1.45192));\n",
" allpoints.push(new PMPoint(-1.27885, -1.45192, -1.33654));\n",
" allpoints.push(new PMPoint(-2.38077, -2.55385, -2.43846));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
" faces.vertices.push(allpoints[4].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(1, 0, 2, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(1, 2, 3, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(1, 3, 4, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[4].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.27885, -1.45192, -1.33654));\n",
" allpoints.push(new PMPoint(-2.38077, -2.55385, -2.43846));\n",
" allpoints.push(new PMPoint(-2.43846, -2.55385, -2.38077));\n",
" allpoints.push(new PMPoint(-1.27885, -1.39423, -1.22115));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(1, 0, 3, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(1, 3, 2, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.27885, -1.17885, -1.00577));\n",
" allpoints.push(new PMPoint(-1.27885, 1.05, -1.00577));\n",
" allpoints.push(new PMPoint(-1.99038, 1.05, -1.00577));\n",
" allpoints.push(new PMPoint(-1.99038, -1.17885, -1.00577));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.761538, -0.723077, 1.88462));\n",
" allpoints.push(new PMPoint(-0.876923, -0.838462, 1.88462));\n",
" allpoints.push(new PMPoint(-0.876923, -0.838462, 0.336538));\n",
" allpoints.push(new PMPoint(-0.761538, -0.723077, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.876923, -0.838462, 1.88462));\n",
" allpoints.push(new PMPoint(-0.876923, -0.838462, 0.336538));\n",
" allpoints.push(new PMPoint(-1.26154, -1.03077, 0.144231));\n",
" allpoints.push(new PMPoint(-1.26154, -1.03077, 1.88462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(1, 0, 3, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(1, 3, 2, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.761538, -0.723077, 0.451923));\n",
" allpoints.push(new PMPoint(-0.761538, -0.723077, 1.88462));\n",
" allpoints.push(new PMPoint(-1.05, -0.723077, 1.88462));\n",
" allpoints.push(new PMPoint(-1.05, -0.723077, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(0, 1, 2, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(0, 2, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.26154, -1.03077, 0.144231));\n",
" allpoints.push(new PMPoint(-0.761538, -0.723077, 0.451923));\n",
" allpoints.push(new PMPoint(-0.876923, -0.838462, 0.336538));\n",
" allpoints.push(new PMPoint(-1.05, -0.723077, 0.451923));\n",
" allpoints.push(new PMPoint(-1.35769, -1.03077, 0.144231));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
" faces.vertices.push(allpoints[4].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(0, 2, 1, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(0, 1, 3, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(0, 3, 4, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[4].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.27885, -1.39423, -1.22115));\n",
" allpoints.push(new PMPoint(-1.06346, -1.17885, -0.790385));\n",
" allpoints.push(new PMPoint(-1.27885, -1.17885, -1.00577));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(1, 0, 2, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.27885, -1.39423, -1.22115));\n",
" allpoints.push(new PMPoint(-1.06346, -1.17885, -0.790385));\n",
" allpoints.push(new PMPoint(-2.43846, -2.55385, -2.38077));\n",
" allpoints.push(new PMPoint(-2.43846, -2.55385, -1.87308));\n",
" allpoints.push(new PMPoint(-1.06346, -1.17885, -0.498077));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
" faces.vertices.push(allpoints[4].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 0, 1, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 1, 4, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 4, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[4].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-2.43846, -2.55385, -1.87308));\n",
" allpoints.push(new PMPoint(-1.06346, -1.17885, -0.498077));\n",
" allpoints.push(new PMPoint(-1.40962, -1.17885, -0.151923));\n",
" allpoints.push(new PMPoint(-2.78462, -2.55385, -1.52692));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.40962, -1.17885, -0.151923));\n",
" allpoints.push(new PMPoint(-1.06346, -1.17885, -0.498077));\n",
" allpoints.push(new PMPoint(-1.27885, -1.17885, -1.00577));\n",
" allpoints.push(new PMPoint(-1.06346, -1.17885, -0.790385));\n",
" allpoints.push(new PMPoint(-1.99038, -1.17885, -1.00577));\n",
" allpoints.push(new PMPoint(-1.99038, -1.17885, -0.488462));\n",
" allpoints.push(new PMPoint(-1.65385, -1.17885, -0.151923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
" faces.vertices.push(allpoints[4].vector);\n",
" faces.vertices.push(allpoints[5].vector);\n",
" faces.vertices.push(allpoints[6].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(4, 2, 3, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(4, 3, 1, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(4, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(4, 0, 6, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(4, 6, 5, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[4].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[6].vector);\n",
" line.vertices.push(allpoints[5].vector);\n",
" line.vertices.push(allpoints[4].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.27885, -1.17885, -1.00577));\n",
" allpoints.push(new PMPoint(-2.43846, -2.55385, -2.38077));\n",
" allpoints.push(new PMPoint(-1.27885, -1.39423, -1.22115));\n",
" allpoints.push(new PMPoint(-3.36538, -2.55385, -2.38077));\n",
" allpoints.push(new PMPoint(-1.99038, -1.17885, -1.00577));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
" faces.vertices.push(allpoints[4].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(3, 1, 2, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(3, 2, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(3, 0, 4, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[4].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.26154, -1.03077, 1.88462));\n",
" allpoints.push(new PMPoint(-2.78462, -2.55385, 1.88462));\n",
" allpoints.push(new PMPoint(-2.78462, -2.55385, -1.52692));\n",
" allpoints.push(new PMPoint(-1.40962, -1.17885, -0.151923));\n",
" allpoints.push(new PMPoint(-1.26154, -1.03077, 0.144231));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
" faces.vertices.push(allpoints[4].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 4, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 4, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[4].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.40962, -1.17885, -0.151923));\n",
" allpoints.push(new PMPoint(-1.26154, -1.03077, 0.144231));\n",
" allpoints.push(new PMPoint(-1.35769, -1.03077, 0.144231));\n",
" allpoints.push(new PMPoint(-1.65385, -1.17885, -0.151923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(0, 1, 2, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(0, 2, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.26154, -1.03077, 0.144231));\n",
" allpoints.push(new PMPoint(-1.26154, -1.03077, 1.88462));\n",
" allpoints.push(new PMPoint(-1.35769, -1.03077, 1.88462));\n",
" allpoints.push(new PMPoint(-1.35769, -1.03077, 0.144231));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(0, 1, 2, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(0, 2, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.40962, -1.17885, -0.151923));\n",
" allpoints.push(new PMPoint(-2.78462, -2.55385, -1.52692));\n",
" allpoints.push(new PMPoint(-1.65385, -1.17885, -0.151923));\n",
" allpoints.push(new PMPoint(-2.32692, -1.51538, -0.488462));\n",
" allpoints.push(new PMPoint(-3.36538, -2.55385, -1.52692));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
" faces.vertices.push(allpoints[4].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(1, 0, 2, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(1, 2, 3, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(1, 3, 4, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[4].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.05, 1.05, 1.88462));\n",
" allpoints.push(new PMPoint(-1.05, -0.723077, 1.88462));\n",
" allpoints.push(new PMPoint(-1.05, -0.723077, 0.451923));\n",
" allpoints.push(new PMPoint(-1.05, 1.05, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.05, -0.723077, 0.451923));\n",
" allpoints.push(new PMPoint(-1.35769, -1.03077, 0.144231));\n",
" allpoints.push(new PMPoint(-1.99038, -1.17885, -0.488462));\n",
" allpoints.push(new PMPoint(-1.65385, -1.17885, -0.151923));\n",
" allpoints.push(new PMPoint(-1.99038, 1.05, -0.488462));\n",
" allpoints.push(new PMPoint(-1.05, 1.05, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
" faces.vertices.push(allpoints[4].vector);\n",
" faces.vertices.push(allpoints[5].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 3, 1, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 5, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 5, 4, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[5].vector);\n",
" line.vertices.push(allpoints[4].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.05, -0.723077, 1.88462));\n",
" allpoints.push(new PMPoint(-1.35769, -1.03077, 1.88462));\n",
" allpoints.push(new PMPoint(-1.35769, -1.03077, 0.144231));\n",
" allpoints.push(new PMPoint(-1.05, -0.723077, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-2.32692, -1.51538, -0.488462));\n",
" allpoints.push(new PMPoint(-1.65385, -1.17885, -0.151923));\n",
" allpoints.push(new PMPoint(-1.99038, -1.17885, -0.488462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(1, 0, 2, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.35769, -1.03077, 1.88462));\n",
" allpoints.push(new PMPoint(-1.35769, -1.03077, 0.144231));\n",
" allpoints.push(new PMPoint(-1.65385, -1.17885, -0.151923));\n",
" allpoints.push(new PMPoint(-2.32692, -1.51538, -0.488462));\n",
" allpoints.push(new PMPoint(-2.40385, -1.55385, -0.488462));\n",
" allpoints.push(new PMPoint(-2.40385, -1.55385, 1.88462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
" faces.vertices.push(allpoints[4].vector);\n",
" faces.vertices.push(allpoints[5].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(1, 0, 5, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(1, 5, 4, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(1, 4, 3, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(1, 3, 2, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[5].vector);\n",
" line.vertices.push(allpoints[4].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.99038, 1.05, -1.00577));\n",
" allpoints.push(new PMPoint(-1.99038, -1.17885, -1.00577));\n",
" allpoints.push(new PMPoint(-1.99038, -1.17885, -0.488462));\n",
" allpoints.push(new PMPoint(-1.99038, 1.05, -0.488462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(1, 0, 3, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(1, 3, 2, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-3.36538, -2.55385, -2.38077));\n",
" allpoints.push(new PMPoint(-3.43654, 1.05, -2.45192));\n",
" allpoints.push(new PMPoint(-3.43654, -2.55385, -2.45192));\n",
" allpoints.push(new PMPoint(-1.99038, 1.05, -1.00577));\n",
" allpoints.push(new PMPoint(-1.99038, -1.17885, -1.00577));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
" faces.vertices.push(allpoints[4].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(1, 3, 4, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(1, 4, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(1, 0, 2, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[4].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-3.36538, -2.55385, -2.38077));\n",
" allpoints.push(new PMPoint(-3.36538, -2.55385, -1.52692));\n",
" allpoints.push(new PMPoint(-2.32692, -1.51538, -0.488462));\n",
" allpoints.push(new PMPoint(-1.99038, -1.17885, -0.488462));\n",
" allpoints.push(new PMPoint(-1.99038, -1.17885, -1.00577));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
" faces.vertices.push(allpoints[4].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(3, 2, 1, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(3, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(3, 0, 4, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[4].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-2.32692, -1.51538, -0.488462));\n",
" allpoints.push(new PMPoint(-3.36538, -2.55385, -1.52692));\n",
" allpoints.push(new PMPoint(-3.40385, -2.55385, -1.48846));\n",
" allpoints.push(new PMPoint(-2.40385, -1.55385, -0.488462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(1, 0, 3, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(1, 3, 2, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-2.40385, -1.55385, -0.488462));\n",
" allpoints.push(new PMPoint(-1.99038, -1.17885, -0.488462));\n",
" allpoints.push(new PMPoint(-1.99038, 1.05, -0.488462));\n",
" allpoints.push(new PMPoint(-2.32692, -1.51538, -0.488462));\n",
" allpoints.push(new PMPoint(-2.44231, 1.05, -0.488462));\n",
" allpoints.push(new PMPoint(-2.44231, -1.55385, -0.488462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
" faces.vertices.push(allpoints[4].vector);\n",
" faces.vertices.push(allpoints[5].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(1, 3, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(1, 0, 5, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(1, 5, 4, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(1, 4, 2, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[5].vector);\n",
" line.vertices.push(allpoints[4].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-3.40385, -2.55385, 1.88462));\n",
" allpoints.push(new PMPoint(-3.40385, -2.55385, -1.48846));\n",
" allpoints.push(new PMPoint(-2.40385, -1.55385, -0.488462));\n",
" allpoints.push(new PMPoint(-2.40385, -1.55385, 1.88462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(0, 3, 2, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(0, 2, 1, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-2.40385, -1.55385, 1.88462));\n",
" allpoints.push(new PMPoint(-2.40385, -1.55385, -0.488462));\n",
" allpoints.push(new PMPoint(-2.44231, -1.55385, -0.488462));\n",
" allpoints.push(new PMPoint(-2.44231, -1.55385, 1.88462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(2, 1, 0, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(2, 0, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-3.44231, -2.55385, -1.48846));\n",
" allpoints.push(new PMPoint(-3.40385, -2.55385, -1.48846));\n",
" allpoints.push(new PMPoint(-2.40385, -1.55385, -0.488462));\n",
" allpoints.push(new PMPoint(-2.44231, -1.55385, -0.488462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(0, 3, 2, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(0, 2, 1, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-2.44231, 1.05, -0.488462));\n",
" allpoints.push(new PMPoint(-2.44231, -1.55385, -0.488462));\n",
" allpoints.push(new PMPoint(-2.44231, -1.55385, 1.88462));\n",
" allpoints.push(new PMPoint(-2.44231, 1.05, 1.88462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(1, 0, 3, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(1, 3, 2, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-3.44231, -2.55385, -1.48846));\n",
" allpoints.push(new PMPoint(-2.44231, -1.55385, -0.488462));\n",
" allpoints.push(new PMPoint(-2.44231, 1.05, -0.488462));\n",
" allpoints.push(new PMPoint(-3.44231, 1.05, -1.48846));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(0, 1, 2, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(0, 2, 3, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-3.44231, -2.55385, 1.88462));\n",
" allpoints.push(new PMPoint(-3.44231, -2.55385, -1.48846));\n",
" allpoints.push(new PMPoint(-2.44231, -1.55385, -0.488462));\n",
" allpoints.push(new PMPoint(-2.44231, -1.55385, 1.88462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" var faces = new THREE.Geometry();\n",
"\n",
" <!-- VERTICES -->\n",
" faces.vertices.push(allpoints[0].vector);\n",
" faces.vertices.push(allpoints[1].vector);\n",
" faces.vertices.push(allpoints[2].vector);\n",
" faces.vertices.push(allpoints[3].vector);\n",
"\n",
" centroids.push(computeCentroid(faces));\n",
"\n",
" <!-- Facet style -->\n",
" var faces_material = new THREE.MeshBasicMaterial ( {color: 0x77EC9E, transparent: true, opacity: 0.3, side: THREE.DoubleSide , depthWrite: false, depthTest: false, } );\n",
"\n",
" faces_material.side = THREE.DoubleSide;\n",
" faces_material.transparent = true;\n",
"\n",
" <!-- FACETS --> \n",
" faces.faces.push(new THREE.Face3(0, 3, 2, undefined, undefined, 0));\n",
" faces.faces.push(new THREE.Face3(0, 2, 1, undefined, undefined, 0));\n",
"\n",
"\n",
" faces.computeFaceNormals();\n",
" faces.computeVertexNormals();\n",
"\n",
" var object = new THREE.Mesh(faces, faces_material);\n",
" obj.add(object);\n",
"\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x000000, linewidth: 1.5, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES --> \n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[0].vector);\n",
" line.vertices.push(allpoints[3].vector);\n",
" line.vertices.push(allpoints[2].vector);\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.65385, -1.39423, -1.22115));\n",
" allpoints.push(new PMPoint(-1.65385, -1.17885, -1.00577));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x7DB662, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-2.81346, -2.55385, -2.38077));\n",
" allpoints.push(new PMPoint(-1.65385, -1.39423, -1.22115));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x7DB662, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -1.39423, -1.22115));\n",
" allpoints.push(new PMPoint(-1.65385, -1.39423, -1.22115));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x7DB662, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.65385, 1.05, -1.00577));\n",
" allpoints.push(new PMPoint(-1.65385, -1.17885, -1.00577));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x7DB662, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.65385, -1.17885, -1.00577));\n",
" allpoints.push(new PMPoint(-1.65385, -1.17885, 1.88462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x7DB662, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.40962, -1.39423, -1.22115));\n",
" allpoints.push(new PMPoint(-1.40962, -1.17885, -1.00577));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xA2D86B, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-2.56923, -2.55385, -2.38077));\n",
" allpoints.push(new PMPoint(-1.40962, -1.39423, -1.22115));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xA2D86B, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -1.39423, -1.22115));\n",
" allpoints.push(new PMPoint(-1.40962, -1.39423, -1.22115));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xA2D86B, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.40962, 1.05, -1.00577));\n",
" allpoints.push(new PMPoint(-1.40962, -1.17885, -1.00577));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xA2D86B, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.40962, -1.17885, -1.00577));\n",
" allpoints.push(new PMPoint(-1.40962, -1.17885, 1.88462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xA2D86B, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.06923, -0.742308, 0.432692));\n",
" allpoints.push(new PMPoint(-1.06923, -0.838462, 0.336538));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xC87AB1, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-2.78462, -2.55385, -1.37885));\n",
" allpoints.push(new PMPoint(-1.06923, -0.838462, 0.336538));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xC87AB1, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.838462, 0.336538));\n",
" allpoints.push(new PMPoint(-1.06923, -0.838462, 0.336538));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xC87AB1, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.06923, 1.05, 0.432692));\n",
" allpoints.push(new PMPoint(-1.06923, -0.742308, 0.432692));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xC87AB1, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.06923, -0.742308, 1.88462));\n",
" allpoints.push(new PMPoint(-1.06923, -0.742308, 0.432692));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xC87AB1, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.99038, -1.17885, -0.834615));\n",
" allpoints.push(new PMPoint(-1.65385, -1.17885, -0.498077));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x65359C, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-3.36538, -2.55385, -2.20962));\n",
" allpoints.push(new PMPoint(-1.99038, -1.17885, -0.834615));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x65359C, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.99038, 1.05, -0.834615));\n",
" allpoints.push(new PMPoint(-1.99038, -1.17885, -0.834615));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x65359C, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -1.17885, -0.498077));\n",
" allpoints.push(new PMPoint(-1.65385, -1.17885, -0.498077));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x65359C, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.65385, -1.17885, -0.498077));\n",
" allpoints.push(new PMPoint(-1.65385, -1.17885, 1.88462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x65359C, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.625, -1.17885, -1.00577));\n",
" allpoints.push(new PMPoint(-1.40962, -1.17885, -0.790385));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x09FE8D, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-3, -2.55385, -2.38077));\n",
" allpoints.push(new PMPoint(-1.625, -1.17885, -1.00577));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x09FE8D, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.625, 1.05, -1.00577));\n",
" allpoints.push(new PMPoint(-1.625, -1.17885, -1.00577));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x09FE8D, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -1.17885, -0.790385));\n",
" allpoints.push(new PMPoint(-1.40962, -1.17885, -0.790385));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x09FE8D, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.40962, -1.17885, -0.790385));\n",
" allpoints.push(new PMPoint(-1.40962, -1.17885, 1.88462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x09FE8D, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.86923, -1.17885, -1.00577));\n",
" allpoints.push(new PMPoint(-1.65385, -1.17885, -0.790385));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xA93D5A, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-3.24423, -2.55385, -2.38077));\n",
" allpoints.push(new PMPoint(-1.86923, -1.17885, -1.00577));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xA93D5A, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.86923, 1.05, -1.00577));\n",
" allpoints.push(new PMPoint(-1.86923, -1.17885, -1.00577));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xA93D5A, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -1.17885, -0.790385));\n",
" allpoints.push(new PMPoint(-1.65385, -1.17885, -0.790385));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xA93D5A, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.65385, -1.17885, -0.790385));\n",
" allpoints.push(new PMPoint(-1.65385, -1.17885, 1.88462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xA93D5A, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.91731, -1.17885, -1.00577));\n",
" allpoints.push(new PMPoint(-1.40962, -1.17885, -0.498077));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x06A35B, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-3.29231, -2.55385, -2.38077));\n",
" allpoints.push(new PMPoint(-1.91731, -1.17885, -1.00577));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x06A35B, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.91731, 1.05, -1.00577));\n",
" allpoints.push(new PMPoint(-1.91731, -1.17885, -1.00577));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x06A35B, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -1.17885, -0.498077));\n",
" allpoints.push(new PMPoint(-1.40962, -1.17885, -0.498077));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x06A35B, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.40962, -1.17885, -0.498077));\n",
" allpoints.push(new PMPoint(-1.40962, -1.17885, 1.88462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x06A35B, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.723077, -0.838462, -0.45));\n",
" allpoints.push(new PMPoint(-0.507692, -0.838462, -0.234615));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x3F3821, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.723077, -0.838462, -0.45));\n",
" allpoints.push(new PMPoint(-2.43846, -2.55385, -2.16538));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x3F3821, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.723077, 1.05, -0.45));\n",
" allpoints.push(new PMPoint(-0.723077, -0.838462, -0.45));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x3F3821, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.838462, -0.234615));\n",
" allpoints.push(new PMPoint(-0.507692, -0.838462, -0.234615));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x3F3821, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.507692, -0.838462, -0.234615));\n",
" allpoints.push(new PMPoint(-0.507692, -0.838462, 1.88462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x3F3821, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(0.380769, -0.151923, 0.653846));\n",
" allpoints.push(new PMPoint(-0.0365385, -0.151923, 0.236538));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xCFF7A5, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.0365385, -0.151923, 0.236538));\n",
" allpoints.push(new PMPoint(-2.43846, -2.55385, -2.16538));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xCFF7A5, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.0365385, 1.05, 0.236538));\n",
" allpoints.push(new PMPoint(-0.0365385, -0.151923, 0.236538));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xCFF7A5, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.151923, 0.653846));\n",
" allpoints.push(new PMPoint(0.380769, -0.151923, 0.653846));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xCFF7A5, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(0.380769, -0.151923, 1.88462));\n",
" allpoints.push(new PMPoint(0.380769, -0.151923, 0.653846));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xCFF7A5, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.0230769, -0.353846, 0.25));\n",
" allpoints.push(new PMPoint(-0.238462, -0.353846, 0.0346154));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x5E80B1, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.238462, -0.353846, 0.0346154));\n",
" allpoints.push(new PMPoint(-2.43846, -2.55385, -2.16538));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x5E80B1, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.238462, 1.05, 0.0346154));\n",
" allpoints.push(new PMPoint(-0.238462, -0.353846, 0.0346154));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x5E80B1, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.353846, 0.25));\n",
" allpoints.push(new PMPoint(-0.0230769, -0.353846, 0.25));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x5E80B1, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.0230769, -0.353846, 1.88462));\n",
" allpoints.push(new PMPoint(-0.0230769, -0.353846, 0.25));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x5E80B1, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.16538, -0.838462, 0.336538));\n",
" allpoints.push(new PMPoint(-1.31346, -0.838462, 0.188462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xC9CB6A, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-3.02885, -2.55385, -1.52692));\n",
" allpoints.push(new PMPoint(-1.31346, -0.838462, 0.188462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xC9CB6A, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.31346, 1.05, 0.188462));\n",
" allpoints.push(new PMPoint(-1.31346, -0.838462, 0.188462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xC9CB6A, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.838462, 0.336538));\n",
" allpoints.push(new PMPoint(-1.16538, -0.838462, 0.336538));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xC9CB6A, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.16538, -0.838462, 1.88462));\n",
" allpoints.push(new PMPoint(-1.16538, -0.838462, 0.336538));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xC9CB6A, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.16538, -0.838462, 0.336538));\n",
" allpoints.push(new PMPoint(-1.65, -0.838462, -0.148077));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x528ECA, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-3.36538, -2.55385, -1.86346));\n",
" allpoints.push(new PMPoint(-1.65, -0.838462, -0.148077));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x528ECA, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.65, 1.05, -0.148077));\n",
" allpoints.push(new PMPoint(-1.65, -0.838462, -0.148077));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x528ECA, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.838462, 0.336538));\n",
" allpoints.push(new PMPoint(-1.16538, -0.838462, 0.336538));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x528ECA, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.16538, -0.838462, 1.88462));\n",
" allpoints.push(new PMPoint(-1.16538, -0.838462, 0.336538));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x528ECA, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.05, -0.353846, 0.451923));\n",
" allpoints.push(new PMPoint(-1.16538, -0.353846, 0.336538));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x186131, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-3.36538, -2.55385, -1.86346));\n",
" allpoints.push(new PMPoint(-1.16538, -0.353846, 0.336538));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x186131, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.16538, 1.05, 0.336538));\n",
" allpoints.push(new PMPoint(-1.16538, -0.353846, 0.336538));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x186131, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.353846, 0.451923));\n",
" allpoints.push(new PMPoint(-1.05, -0.353846, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x186131, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.05, -0.353846, 1.88462));\n",
" allpoints.push(new PMPoint(-1.05, -0.353846, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x186131, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.938462, -0.838462, -0.665385));\n",
" allpoints.push(new PMPoint(-0.507692, -0.838462, -0.234615));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x93CAA6, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-2.65385, -2.55385, -2.38077));\n",
" allpoints.push(new PMPoint(-0.938462, -0.838462, -0.665385));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x93CAA6, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.938462, 1.05, -0.665385));\n",
" allpoints.push(new PMPoint(-0.938462, -0.838462, -0.665385));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x93CAA6, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.838462, -0.234615));\n",
" allpoints.push(new PMPoint(-0.507692, -0.838462, -0.234615));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x93CAA6, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.507692, -0.838462, -0.234615));\n",
" allpoints.push(new PMPoint(-0.507692, -0.838462, 1.88462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x93CAA6, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(0.380769, -0.151923, 0.653846));\n",
" allpoints.push(new PMPoint(-0.251923, -0.151923, 0.0211538));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xDDD0C2, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-2.65385, -2.55385, -2.38077));\n",
" allpoints.push(new PMPoint(-0.251923, -0.151923, 0.0211538));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xDDD0C2, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.251923, 1.05, 0.0211538));\n",
" allpoints.push(new PMPoint(-0.251923, -0.151923, 0.0211538));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xDDD0C2, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.151923, 0.653846));\n",
" allpoints.push(new PMPoint(0.380769, -0.151923, 0.653846));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xDDD0C2, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(0.380769, -0.151923, 1.88462));\n",
" allpoints.push(new PMPoint(0.380769, -0.151923, 0.653846));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xDDD0C2, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.0230769, -0.353846, 0.25));\n",
" allpoints.push(new PMPoint(-0.453846, -0.353846, -0.180769));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x1DEC3E, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-2.65385, -2.55385, -2.38077));\n",
" allpoints.push(new PMPoint(-0.453846, -0.353846, -0.180769));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x1DEC3E, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.453846, 1.05, -0.180769));\n",
" allpoints.push(new PMPoint(-0.453846, -0.353846, -0.180769));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x1DEC3E, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.353846, 0.25));\n",
" allpoints.push(new PMPoint(-0.0230769, -0.353846, 0.25));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x1DEC3E, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.0230769, -0.353846, 1.88462));\n",
" allpoints.push(new PMPoint(-0.0230769, -0.353846, 0.25));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x1DEC3E, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(0.226923, -0.228846, 0.576923));\n",
" allpoints.push(new PMPoint(0.101923, -0.228846, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x5B5116, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(0.101923, -0.228846, 0.451923));\n",
" allpoints.push(new PMPoint(-2.22308, -2.55385, -1.87308));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x5B5116, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(0.101923, 1.05, 0.451923));\n",
" allpoints.push(new PMPoint(0.101923, -0.228846, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x5B5116, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.228846, 0.576923));\n",
" allpoints.push(new PMPoint(0.226923, -0.228846, 0.576923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x5B5116, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(0.226923, -0.228846, 1.88462));\n",
" allpoints.push(new PMPoint(0.226923, -0.228846, 0.576923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x5B5116, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-2.20577, -1.39423, -1.22115));\n",
" allpoints.push(new PMPoint(-2.32692, -1.51538, -1.22115));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x1E3B21, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-3.36538, -2.55385, -2.25962));\n",
" allpoints.push(new PMPoint(-2.32692, -1.51538, -1.22115));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x1E3B21, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-2.32692, -1.51538, -1.22115));\n",
" allpoints.push(new PMPoint(-2.32692, -1.51538, 1.88462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x1E3B21, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -1.39423, -1.22115));\n",
" allpoints.push(new PMPoint(-2.20577, -1.39423, -1.22115));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x1E3B21, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-2.20577, 1.05, -1.22115));\n",
" allpoints.push(new PMPoint(-2.20577, -1.39423, -1.22115));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x1E3B21, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.99038, -1.17885, -0.790385));\n",
" allpoints.push(new PMPoint(-2.32692, -1.51538, -0.790385));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xFB59EC, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-3.36538, -2.55385, -1.82885));\n",
" allpoints.push(new PMPoint(-2.32692, -1.51538, -0.790385));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xFB59EC, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-2.32692, -1.51538, -0.790385));\n",
" allpoints.push(new PMPoint(-2.32692, -1.51538, 1.88462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xFB59EC, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -1.17885, -0.790385));\n",
" allpoints.push(new PMPoint(-1.99038, -1.17885, -0.790385));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xFB59EC, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.99038, 1.05, -0.790385));\n",
" allpoints.push(new PMPoint(-1.99038, -1.17885, -0.790385));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xFB59EC, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.99038, -1.17885, -0.498077));\n",
" allpoints.push(new PMPoint(-2.32692, -1.51538, -0.498077));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x5BD547, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-3.36538, -2.55385, -1.53654));\n",
" allpoints.push(new PMPoint(-2.32692, -1.51538, -0.498077));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x5BD547, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-2.32692, -1.51538, -0.498077));\n",
" allpoints.push(new PMPoint(-2.32692, -1.51538, 1.88462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x5BD547, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -1.17885, -0.498077));\n",
" allpoints.push(new PMPoint(-1.99038, -1.17885, -0.498077));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x5BD547, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.99038, 1.05, -0.498077));\n",
" allpoints.push(new PMPoint(-1.99038, -1.17885, -0.498077));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x5BD547, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.382692, -0.151923, 0.451923));\n",
" allpoints.push(new PMPoint(-0.953846, -0.723077, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xD74EC1, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-2.78462, -2.55385, -1.37885));\n",
" allpoints.push(new PMPoint(-0.953846, -0.723077, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xD74EC1, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.953846, -0.723077, 1.88462));\n",
" allpoints.push(new PMPoint(-0.953846, -0.723077, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xD74EC1, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.151923, 0.451923));\n",
" allpoints.push(new PMPoint(-0.382692, -0.151923, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xD74EC1, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.382692, 1.05, 0.451923));\n",
" allpoints.push(new PMPoint(-0.382692, -0.151923, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xD74EC1, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.584615, -0.353846, 0.451923));\n",
" allpoints.push(new PMPoint(-0.953846, -0.723077, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x7EB2DD, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-2.78462, -2.55385, -1.37885));\n",
" allpoints.push(new PMPoint(-0.953846, -0.723077, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x7EB2DD, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.953846, -0.723077, 1.88462));\n",
" allpoints.push(new PMPoint(-0.953846, -0.723077, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x7EB2DD, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.353846, 0.451923));\n",
" allpoints.push(new PMPoint(-0.584615, -0.353846, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x7EB2DD, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.584615, 1.05, 0.451923));\n",
" allpoints.push(new PMPoint(-0.584615, -0.353846, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x7EB2DD, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.430769, -0.761538, -0.157692));\n",
" allpoints.push(new PMPoint(-0.507692, -0.838462, -0.157692));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xF152CC, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.507692, -0.838462, -0.157692));\n",
" allpoints.push(new PMPoint(-2.22308, -2.55385, -1.87308));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xF152CC, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.507692, -0.838462, -0.157692));\n",
" allpoints.push(new PMPoint(-0.507692, -0.838462, 1.88462));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xF152CC, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.761538, -0.157692));\n",
" allpoints.push(new PMPoint(-0.430769, -0.761538, -0.157692));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xF152CC, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.430769, 1.05, -0.157692));\n",
" allpoints.push(new PMPoint(-0.430769, -0.761538, -0.157692));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xF152CC, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(0.0538462, -0.276923, 0.326923));\n",
" allpoints.push(new PMPoint(-0.0230769, -0.353846, 0.326923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xEB1A44, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.0230769, -0.353846, 0.326923));\n",
" allpoints.push(new PMPoint(-2.22308, -2.55385, -1.87308));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xEB1A44, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.0230769, -0.353846, 1.88462));\n",
" allpoints.push(new PMPoint(-0.0230769, -0.353846, 0.326923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xEB1A44, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.276923, 0.326923));\n",
" allpoints.push(new PMPoint(0.0538462, -0.276923, 0.326923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xEB1A44, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(0.0538462, 1.05, 0.326923));\n",
" allpoints.push(new PMPoint(0.0538462, -0.276923, 0.326923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0xEB1A44, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.626923, -0.151923, 0.451923));\n",
" allpoints.push(new PMPoint(-1.05, -0.575, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x9B0C92, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-3.02885, -2.55385, -1.52692));\n",
" allpoints.push(new PMPoint(-1.05, -0.575, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x9B0C92, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.05, -0.575, 1.88462));\n",
" allpoints.push(new PMPoint(-1.05, -0.575, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x9B0C92, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.151923, 0.451923));\n",
" allpoints.push(new PMPoint(-0.626923, -0.151923, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x9B0C92, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.626923, 1.05, 0.451923));\n",
" allpoints.push(new PMPoint(-0.626923, -0.151923, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x9B0C92, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.828846, -0.353846, 0.451923));\n",
" allpoints.push(new PMPoint(-1.05, -0.575, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x865B86, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-3.02885, -2.55385, -1.52692));\n",
" allpoints.push(new PMPoint(-1.05, -0.575, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x865B86, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.05, -0.575, 1.88462));\n",
" allpoints.push(new PMPoint(-1.05, -0.575, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x865B86, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.353846, 0.451923));\n",
" allpoints.push(new PMPoint(-0.828846, -0.353846, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x865B86, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.828846, 1.05, 0.451923));\n",
" allpoints.push(new PMPoint(-0.828846, -0.353846, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x865B86, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.963462, -0.151923, 0.451923));\n",
" allpoints.push(new PMPoint(-1.05, -0.238462, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x728431, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-3.36538, -2.55385, -1.86346));\n",
" allpoints.push(new PMPoint(-1.05, -0.238462, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x728431, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-1.05, -0.238462, 1.88462));\n",
" allpoints.push(new PMPoint(-1.05, -0.238462, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x728431, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(1.72692, -0.151923, 0.451923));\n",
" allpoints.push(new PMPoint(-0.963462, -0.151923, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x728431, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
" var obj = new THREE.Object3D();\n",
" var allpoints = [];\n",
" allpoints.push(new PMPoint(-0.963462, 1.05, 0.451923));\n",
" allpoints.push(new PMPoint(-0.963462, -0.151923, 0.451923));\n",
"\n",
" for (index = 0; index < allpoints.length; ++index) {\n",
" allpoints[index].add(obj);\n",
" }\n",
" <!-- Edge style -->\n",
" var line_material = new THREE.LineBasicMaterial ( {color: 0x728431, linewidth: 2, } );\n",
"\n",
" line_material.side = THREE.DoubleSide;\n",
" line_material.transparent = true;\n",
"\n",
" <!-- EDGES -->\n",
" var line = new THREE.Geometry();\n",
" line.vertices.push(allpoints[1].vector);\n",
" line.vertices.push(allpoints[0].vector);\n",
" obj.add(new THREE.Line(line, line_material));\n",
"\n",
" scene.add(obj);\n",
" all_objects.push(obj);\n",
"\n",
"// COMMON_CODE_BLOCK_BEGIN\n",
"var xRotationEnabled = false;\n",
"var yRotationEnabled = false;\n",
"var zRotationEnabled = false;\n",
"var rotationSpeedFactor = 1;\n",
"var settingsShown = false;\n",
"var labelsShown = true;\n",
"var intervals = [];\n",
"var timeouts = [];\n",
"var explodingSpeed = 0.05;\n",
"var explodeScale = 0;\n",
"var XMLS = new XMLSerializer();\n",
"var svgElement;\n",
"var renderId;\n",
"\n",
"\tvar render = function () {\n",
"\n",
"\t\trenderId = requestAnimationFrame(render);\n",
"\n",
"//\t\tcomment in for automatic explosion\n",
"//\t\texplode(updateFactor());\n",
"\n",
"\t\tvar phi = 0.02 * rotationSpeedFactor;\n",
"\n",
"\t\tif (xRotationEnabled){\n",
"\t\t\tscene.rotation.x += phi;\n",
"\t\t}\n",
"\t\tif(yRotationEnabled){\n",
"\t\t\tscene.rotation.y += phi;\n",
"\t\t}\n",
"\t\tif(zRotationEnabled){\n",
"\t\t\tscene.rotation.z += phi;\n",
"\t\t}\n",
"\n",
"\t\tcontrols.update();\n",
"\t\trenderer.render(scene, camera);\n",
"\t};\n",
"\n",
"\trender();\n",
"\n",
"\tfunction computeCentroid(geom) {\n",
"\t\tcentroid = new THREE.Vector3();\n",
"\t\tgeom.vertices.forEach(function(v) {\n",
"\t\t\tcentroid.add(v);\t\t\t\n",
"\t\t});\n",
"\t\tcentroid.divideScalar(geom.vertices.length);\n",
"\t\treturn centroid;\n",
"\t}\n",
"\n",
"\tfunction changeTransparency(event){\n",
"\t\tvar opacity = 1-Number(event.currentTarget.value);\n",
"\t\tfor (var i=0; i<all_objects.length; i++){\n",
"\t\t\tfor (var j=0; j<all_objects[i].children.length; j++){\n",
"\t\t\t\tif (all_objects[i].children[j].material.type == \"MultiMaterial\") {\n",
"\t\t\t\t\tfor (var k=0; k<all_objects[i].children[j].material.materials.length; k++){\n",
"\t\t\t\t\t\tall_objects[i].children[j].material.materials[k].opacity = opacity;\n",
"\t\t\t\t\t\tall_objects[i].children[j].material.materials[k].depthWrite = opacity < 0.5 ? false : true;\n",
"\t\t\t\t\t\tall_objects[i].children[j].material.materials[k].depthTest = opacity < 0.5 ? false : true;\n",
"\t\t\t\t\t}\n",
"\t\t\t\t} else if (all_objects[i].children[j].material.transparent && \n",
"\t\t\t\t\t\t\t all_objects[i].children[j].material.type == \"MeshBasicMaterial\" &&\n",
"\t\t\t\t\t\t\t all_objects[i].children[j].geometry.type == \"Geometry\"){\n",
"\t\t\t\t\tall_objects[i].children[j].material.opacity = opacity;\n",
"\t\t\t\t\tall_objects[i].children[j].material.depthWrite = opacity < 0.5 ? false : true;\n",
"\t\t\t\t\tall_objects[i].children[j].material.depthTest = opacity < 0.5 ? false : true;\n",
"\t\t\t\t}\n",
"\t\t\t}\n",
"\t\t}\n",
"\t}\n",
"\n",
"\tfunction changeRotationX(event){\n",
"\t\txRotationEnabled = event.currentTarget.checked;\n",
"\t}\t\n",
"\n",
"\tfunction changeRotationY(event){\n",
"\t\tyRotationEnabled = event.currentTarget.checked;\n",
"\t}\t\n",
"\n",
"\tfunction changeRotationZ(event){\n",
"\t\tzRotationEnabled = event.currentTarget.checked;\n",
"\t}\t\n",
"\n",
"\n",
"\tfunction changeRotationSpeedFactor(event){\n",
"\t\trotationSpeedFactor = Number(event.currentTarget.value);\n",
"\t}\n",
"\n",
"\tfunction resetScene(){\n",
"\t\tscene.rotation.set(0,0,0);\n",
"\t\tcamera.position.set(0,0,5);\n",
"\t\tcamera.up.set(0,1,0);\n",
"\t}\n",
"\n",
"\tfunction showSettings(event){\n",
"\t\tevent.currentTarget.style.display = 'none';\n",
"\t\tdocument.getElementById('settings_0').style.position = 'absolute';\n",
"\t\tdocument.getElementById('settings_0').style.display = 'block';\n",
"\t\tdocument.getElementById('showSettingsButton_0').style.display = 'none';\n",
"\t\tdocument.getElementById('hideSettingsButton_0').style.display = 'block';\n",
"\t\tsettingsShown = true;\n",
"\t}\n",
"\n",
"\tfunction hideSettings(event){\n",
"\t\tevent.currentTarget.style.display = 'none';\n",
"\t\tdocument.getElementById('settings_0').style.display = 'none';\n",
"\t\tdocument.getElementById('hideSettingsButton_0').style.display = 'none';\n",
"\t\tdocument.getElementById('showSettingsButton_0').style.display = 'block';\n",
"\t\tsettingsShown = false;\n",
"\t}\n",
"\n",
"\n",
"\n",
"\tvar pos = 150* Math.PI;\n",
"\n",
"\tfunction updateFactor() {\n",
"\t\tpos++;\n",
"\t\treturn Math.sin(.01*pos)+1;\n",
"\t}\n",
"\n",
"\tfunction makelabel(message, x, y, z, params) {\n",
"\t\tvar spritey = textSprite( message, params );\n",
"\t\tspritey.position.set(x, y, z);\n",
"\t\tobj.add(spritey);\n",
"\t}\n",
"\n",
"\tfunction textSprite(message, parameters)\n",
"\t{\n",
"\t\tif ( parameters === undefined ) parameters = {};\n",
"\n",
"\t\tvar fontface = \"Helvetica\";\n",
"\n",
"\t\tvar fontsize = parameters.hasOwnProperty(\"fontsize\") ? \n",
"\t\t\tparameters[\"fontsize\"] : 18;\n",
"\t\tfontsize = fontsize*10;\n",
"\n",
"\t\tvar canvas = document.createElement('canvas');\n",
"\t\tvar size = 1024;\n",
"\t\tcanvas.width = size;\n",
"\t\tcanvas.height = size;\n",
"\t\tvar context = canvas.getContext('2d');\n",
"\t\tcontext.font = fontsize + \"px \" + fontface;\n",
"\n",
"\t\t// text color\n",
"\t\tcontext.fillStyle = \"rgba(0, 0, 0, 1.0)\";\n",
"\n",
"\t\tcontext.fillText(message, size/2, size/2);\n",
"\n",
"\t\t// canvas contents will be used for a texture\n",
"\t\tvar texture = new THREE.Texture(canvas);\n",
"\t\ttexture.needsUpdate = true;\n",
"\n",
"\t\tvar spriteMaterial = new THREE.SpriteMaterial(\n",
"\t\t\t{map: texture, useScreenCoordinates: false});\n",
"\t\tvar sprite = new THREE.Sprite(spriteMaterial);\n",
"\t\treturn sprite;\n",
"\t}\n",
"\n",
"\tfunction takeSvgScreenshot(){\n",
"\t\tif (labelsShown){\n",
"\t\t\thideLabels();\n",
"\t\t}\n",
"\t\tsvgRenderer.render(scene,camera);\n",
"\t\tsvgElement = XMLS.serializeToString(svgRenderer.domElement);\n",
"\t\t\n",
"\t\tif (labelsShown){\n",
"\t\t\tdisplayLabels();\n",
"\t\t}\n",
"\n",
"\t\tif (document.getElementById('tab_0').checked){\n",
"\t\t\t//show in new tab\n",
"\t\t\tvar myWindow = window.open(\"\",\"\");\n",
"\t\t\tmyWindow.document.body.innerHTML = svgElement;\n",
"\t\t} else{\n",
"\t\t\t// download svg file \n",
"\t\t\tdownload(\"screenshot.svg\", svgElement);\n",
"\t\t}\n",
"\t}\n",
"\t\t\n",
"\n",
"\tfunction showOrHideObject(event){\n",
"\t\tvar nr = Number(event.currentTarget.name);\n",
"\t\tall_objects[nr].visible = event.currentTarget.checked;\n",
"\t}\n",
"\n",
"\tfunction displayOrHideOptionsRecursive( obj ) {\n",
"\t\tfor (var j=0; j<obj.children.length; j++) {\n",
"\t\t\tvar child = obj.children[j];\n",
"\t\t\tif (child.material===undefined && child) {\n",
"\t\t\t\tdisplayOrHideOptionsRecursive( child );\n",
"\t\t\t} else {\n",
"\t\t\t\tif (child.material.type == \"MultiMaterial\") {\n",
"\t\t\t\t\tfor (var k=0; k<child.material.materials.length; k++) {\n",
"\t\t\t\t\t\tif (child.material.materials[k].transparent) {\n",
"\t\t\t\t\t\t\tdocument.getElementById('transparency_0').style.display = 'block';\n",
"\t\t\t\t\t\t\tdocument.getElementById('transparencyRange_0').value = 1 - \n",
"\t\t\t\t\t\t\t\tchild.material.materials[k].opacity;\n",
"\t\t\t\t\t\t\treturn;\n",
"\t\t\t\t\t\t}\n",
"\t\t\t\t\t}\n",
"\t\t\t\t} else if (\tchild.material.transparent && \n",
"\t\t\t\t\t\t\t\tchild.material.type == \"MeshBasicMaterial\" &&\n",
"\t\t\t\t\t\t\t\tchild.geometry.type == \"Geometry\"){\n",
"\t\t\t\t\tdocument.getElementById('transparency_0').style.display = 'block';\n",
"\t\t\t\t\treturn;\n",
"\t\t\t\t}\n",
"\t\t\t}\n",
"\t\t}\n",
"\t}\n",
"\n",
"\tfunction displayOrHideOptions() {\n",
"\t\tfor (var i=0; i<all_objects.length; i++) {\n",
"\t\t\tvar obj = all_objects[i];\n",
"\t\t\tdisplayOrHideOptionsRecursive( obj );\n",
"\t\t}\n",
"\t}\n",
"\n",
"\tdisplayOrHideOptions()\n",
"\n",
"\n",
"\n",
"\n",
"// ---------------------- EXPLOSION ------------------------------------------------\n",
"// ---------------------------------------------------------------------------------\n",
"\n",
"\tfunction explode(factor) {\n",
"\t\tvar obj, c;\n",
"\t\tvar c0 = centroids[0];\n",
"\t\tfor (var i = 0; i<centroids.length; ++i) {\n",
"\t\t\tc = centroids[i];\n",
"\t\t\tobj = all_objects[all_objects.length - centroids.length + i];\n",
"\t\t\tobj.position.set(c.x*factor, c.y*factor, c.z*factor);\n",
"\t\t}\t\n",
"\t}\n",
"\n",
"\tfunction triggerExplode(event){\n",
"\t\texplodeScale = Number(event.currentTarget.value);\n",
"\t\texplode(explodeScale);\n",
"\t}\n",
"\n",
"\tfunction setExplodingSpeed(event){\n",
"\t\texplodingSpeed = Number(event.currentTarget.value);\n",
"\t}\n",
"\n",
"\tfunction triggerAutomaticExplode(event){\n",
"\t\tif (event.currentTarget.checked){\n",
"\t\t\tstartExploding();\n",
"\t\t} else {\n",
"\t\t\tclearIntervals();\n",
"\t\t}\t\n",
"\t}\n",
"\n",
"\tfunction startExploding(){\n",
"\t\tintervals.push(setInterval(explodingInterval, 25));\n",
"\t}\n",
"\n",
"\n",
"\tfunction explodingInterval(){\n",
"\t\texplodeScale += explodingSpeed;\n",
"\t\tif (explodeScale <= 6){ \n",
"\t\t\texplode(explodeScale);\n",
"\t\t}\n",
"\t\telse{\n",
"\t\t\texplode(6);\n",
"\t\t\texplodeScale = 6;\n",
"\t\t\tclearIntervals();\n",
"\t\t\ttimeouts.push(setTimeout(startUnexploding, 3000));\n",
"\t\t}\n",
"\t\tdocument.getElementById('explodeRange_0').value = explodeScale;\n",
"\t}\n",
"\n",
"\n",
"\tfunction startUnexploding(){\n",
"\t\tintervals.push(setInterval(unexplodingInterval, 25));\n",
"\t}\n",
"\n",
"\tfunction unexplodingInterval(){\n",
"\t\texplodeScale -= explodingSpeed;\n",
"\t\tif (explodeScale >= 0){\t\n",
"\t\t\texplode(explodeScale);\n",
"\t\t}\n",
"\t\telse {\n",
"\t\t\texplode(0);\n",
"\t\t\texplodeScale = 0;\n",
"\t\t\tclearIntervals();\n",
"\t\t\ttimeouts.push(setTimeout(startExploding, 3000));\n",
"\t\t}\n",
"\t\tdocument.getElementById('explodeRange_0').value = explodeScale;\n",
"\t}\n",
"\n",
"\tfunction clearIntervals(){\n",
"\t\tintervals.forEach(function(interval){\n",
"\t\t\tclearInterval(interval);\n",
"\t\t});\n",
"\t\tintervals = [];\n",
"\t\ttimeouts.forEach(function(timeout){\n",
"\t\t\tclearTimeout(timeout);\n",
"\t\t});\n",
"\t\ttimeouts = [];\n",
"\t}\n",
"\n",
"\t\t\t\n",
"\n",
"\t// append checkboxes for displaying or hiding objects\n",
"\tvar shownObjectsList = document.getElementById('shownObjectsList_0');\n",
"\tfor (var i=0; i<all_objects.length; i++){\n",
"\t\tvar objNode = document.createElement('span');\n",
"\t\tobjNode.innerHTML = objectnames[i] + '<br>';\n",
"\t\tvar checkbox = document.createElement('input');\n",
"\t\tcheckbox.type = 'checkbox';\n",
"\t\tcheckbox.checked = true;\n",
"\t\tcheckbox.name = String(i);\n",
"\t\tcheckbox.onchange = showOrHideObject;\n",
"\t\tshownObjectsList.appendChild(checkbox);\n",
"\t\tshownObjectsList.appendChild(objNode);\n",
"\t}\n",
"\n",
"\tfunction displayLabels(){\n",
"\t\tfor (var i=0; i<all_objects.length; i++){\n",
"\t\t\tfor (var j=0; j<all_objects[i].children.length; j++){\n",
"\t\t\t\tvar child = all_objects[i].children[j];\n",
"\t\t\t\tif (child.type == 'Sprite'){\n",
"\t\t\t\t\tchild.visible = true;\n",
"\t\t\t\t}\n",
"\t\t\t}\n",
"\t\t}\n",
"\t}\n",
"\n",
"\tfunction hideLabels(){\n",
"\t\tfor (var i=0; i<all_objects.length; i++){\n",
"\t\t\tfor (var j=0; j<all_objects[i].children.length; j++){\n",
"\t\t\t\tvar child = all_objects[i].children[j];\n",
"\t\t\t\tif (child.type == 'Sprite'){\n",
"\t\t\t\t\tchild.visible = false;\n",
"\t\t\t\t}\n",
"\t\t\t}\n",
"\t\t}\n",
"\t}\n",
"\n",
"\tfunction displayOrHideLabels(event){\n",
"\t\tif (event.currentTarget.checked){\n",
"\t\t\tdisplayLabels();\n",
"\t\t\tlabelsShown = true;\n",
"\t\t} else {\n",
"\t\t\thideLabels();\n",
"\t\t\tlabelsShown = false;\n",
"\t\t}\n",
"\t}\n",
"\n",
"\tfunction download(filename, text) {\n",
"\t var element = document.createElement('a');\n",
"\t element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));\n",
"\t element.setAttribute('download', filename);\n",
"\n",
"\t element.style.display = 'none';\n",
"\t document.body.appendChild(element);\n",
"\n",
"\t element.click();\n",
"\n",
"\t document.body.removeChild(element);\n",
"\t}\n",
"\n",
"var tempobj;\n",
"tempobj = document.getElementById('explodeRange_0');\n",
"if (tempobj) {\n",
" tempobj.oninput = triggerExplode;\n",
" document.getElementById('explodeCheckbox_0').onchange = triggerAutomaticExplode;\n",
" document.getElementById('explodingSpeedRange_0').oninput = setExplodingSpeed;\n",
"}\n",
"tempobj = document.getElementById('foldRange_0');\n",
"if (tempobj) {\n",
" tempobj.oninput = fold;\n",
"}\n",
"document.getElementById('transparencyRange_0').oninput = changeTransparency;\n",
"document.getElementById('changeRotationX_0').onchange = changeRotationX;\n",
"document.getElementById('changeRotationY_0').onchange = changeRotationY;\n",
"document.getElementById('changeRotationZ_0').onchange = changeRotationZ;\n",
"document.getElementById('resetButton_0').onclick = resetScene;\n",
"document.getElementById('rotationSpeedRange_0').oninput = changeRotationSpeedFactor;\n",
"document.getElementById('labelsCheckboxInput_0').onchange = displayOrHideLabels;\n",
"document.getElementById('takeScreenshot_0').onclick = takeSvgScreenshot;\n",
"document.getElementById('showSettingsButton_0').onclick = showSettings;\n",
"document.getElementById('hideSettingsButton_0').onclick = hideSettings;\n",
"\n",
"\t\n",
"\n",
"// ------------------ SHORTCUTS --------------------------------------------\n",
"// -------------------------------------------------------------------------\n",
"\n",
"/**\n",
" * http://www.openjs.com/scripts/events/keyboard_shortcuts/\n",
" * Version : 2.01.B\n",
" * By Binny V A\n",
" * License : BSD\n",
" */\n",
"shortcut = {\n",
"\t'all_shortcuts':{},//All the shortcuts are stored in this array\n",
"\t'add': function(shortcut_combination,callback,opt) {\n",
"\t\t//Provide a set of default options\n",
"\t\tvar default_options = {\n",
"\t\t\t'type':'keydown',\n",
"\t\t\t'propagate':false,\n",
"\t\t\t'disable_in_input':false,\n",
"\t\t\t'target':document,\n",
"\t\t\t'keycode':false\n",
"\t\t}\n",
"\t\tif(!opt) opt = default_options;\n",
"\t\telse {\n",
"\t\t\tfor(var dfo in default_options) {\n",
"\t\t\t\tif(typeof opt[dfo] == 'undefined') opt[dfo] = default_options[dfo];\n",
"\t\t\t}\n",
"\t\t}\n",
"\n",
"\t\tvar ele = opt.target;\n",
"\t\tif(typeof opt.target == 'string') ele = document.getElementById(opt.target);\n",
"\t\tvar ths = this;\n",
"\t\tshortcut_combination = shortcut_combination.toLowerCase();\n",
"\n",
"\t\t//The function to be called at keypress\n",
"\t\tvar func = function(e) {\n",
"\t\t\te = e || window.event;\n",
"\t\t\t\n",
"\t\t\tif(opt['disable_in_input']) { //Don't enable shortcut keys in Input, Textarea fields\n",
"\t\t\t\tvar element;\n",
"\t\t\t\tif(e.target) element=e.target;\n",
"\t\t\t\telse if(e.srcElement) element=e.srcElement;\n",
"\t\t\t\tif(element.nodeType==3) element=element.parentNode;\n",
"\n",
"\t\t\t\tif(element.tagName == 'INPUT' || element.tagName == 'TEXTAREA') return;\n",
"\t\t\t}\n",
"\t\n",
"\t\t\t//Find Which key is pressed\n",
"\t\t\tif (e.keyCode) code = e.keyCode;\n",
"\t\t\telse if (e.which) code = e.which;\n",
"\t\t\tvar character = String.fromCharCode(code).toLowerCase();\n",
"\t\t\t\n",
"\t\t\tif(code == 188) character=\",\"; //If the user presses , when the type is onkeydown\n",
"\t\t\tif(code == 190) character=\".\"; //If the user presses , when the type is onkeydown\n",
"\n",
"\t\t\tvar keys = shortcut_combination.split(\"+\");\n",
"\t\t\t//Key Pressed - counts the number of valid keypresses - if it is same as the number of keys, the shortcut function is invoked\n",
"\t\t\tvar kp = 0;\n",
"\t\t\t\n",
"\t\t\t//Work around for stupid Shift key bug created by using lowercase - as a result the shift+num combination was broken\n",
"\t\t\tvar shift_nums = {\n",
"\t\t\t\t\"`\":\"~\",\n",
"\t\t\t\t\"1\":\"!\",\n",
"\t\t\t\t\"2\":\"@\",\n",
"\t\t\t\t\"3\":\"#\",\n",
"\t\t\t\t\"4\":\"$\",\n",
"\t\t\t\t\"5\":\"%\",\n",
"\t\t\t\t\"6\":\"^\",\n",
"\t\t\t\t\"7\":\"&\",\n",
"\t\t\t\t\"8\":\"*\",\n",
"\t\t\t\t\"9\":\"(\",\n",
"\t\t\t\t\"0\":\")\",\n",
"\t\t\t\t\"-\":\"_\",\n",
"\t\t\t\t\"=\":\"+\",\n",
"\t\t\t\t\";\":\":\",\n",
"\t\t\t\t\"'\":\"\\\"\",\n",
"\t\t\t\t\",\":\"<\",\n",
"\t\t\t\t\".\":\">\",\n",
"\t\t\t\t\"/\":\"?\",\n",
"\t\t\t\t\"\\\\\":\"|\"\n",
"\t\t\t}\n",
"\t\t\t//Special Keys - and their codes\n",
"\t\t\tvar special_keys = {\n",
"\t\t\t\t'esc':27,\n",
"\t\t\t\t'escape':27,\n",
"\t\t\t\t'tab':9,\n",
"\t\t\t\t'space':32,\n",
"\t\t\t\t'return':13,\n",
"\t\t\t\t'enter':13,\n",
"\t\t\t\t'backspace':8,\n",
"\t\n",
"\t\t\t\t'scrolllock':145,\n",
"\t\t\t\t'scroll_lock':145,\n",
"\t\t\t\t'scroll':145,\n",
"\t\t\t\t'capslock':20,\n",
"\t\t\t\t'caps_lock':20,\n",
"\t\t\t\t'caps':20,\n",
"\t\t\t\t'numlock':144,\n",
"\t\t\t\t'num_lock':144,\n",
"\t\t\t\t'num':144,\n",
"\t\t\t\t\n",
"\t\t\t\t'pause':19,\n",
"\t\t\t\t'break':19,\n",
"\t\t\t\t\n",
"\t\t\t\t'insert':45,\n",
"\t\t\t\t'home':36,\n",
"\t\t\t\t'delete':46,\n",
"\t\t\t\t'end':35,\n",
"\t\t\t\t\n",
"\t\t\t\t'pageup':33,\n",
"\t\t\t\t'page_up':33,\n",
"\t\t\t\t'pu':33,\n",
"\t\n",
"\t\t\t\t'pagedown':34,\n",
"\t\t\t\t'page_down':34,\n",
"\t\t\t\t'pd':34,\n",
"\t\n",
"\t\t\t\t'left':37,\n",
"\t\t\t\t'up':38,\n",
"\t\t\t\t'right':39,\n",
"\t\t\t\t'down':40,\n",
"\t\n",
"\t\t\t\t'f1':112,\n",
"\t\t\t\t'f2':113,\n",
"\t\t\t\t'f3':114,\n",
"\t\t\t\t'f4':115,\n",
"\t\t\t\t'f5':116,\n",
"\t\t\t\t'f6':117,\n",
"\t\t\t\t'f7':118,\n",
"\t\t\t\t'f8':119,\n",
"\t\t\t\t'f9':120,\n",
"\t\t\t\t'f10':121,\n",
"\t\t\t\t'f11':122,\n",
"\t\t\t\t'f12':123\n",
"\t\t\t}\n",
"\t\n",
"\t\t\tvar modifiers = { \n",
"\t\t\t\tshift: { wanted:false, pressed:false},\n",
"\t\t\t\tctrl : { wanted:false, pressed:false},\n",
"\t\t\t\talt : { wanted:false, pressed:false},\n",
"\t\t\t\tmeta : { wanted:false, pressed:false}\t//Meta is Mac specific\n",
"\t\t\t};\n",
" \n",
"\t\t\tif(e.ctrlKey)\tmodifiers.ctrl.pressed = true;\n",
"\t\t\tif(e.shiftKey)\tmodifiers.shift.pressed = true;\n",
"\t\t\tif(e.altKey)\tmodifiers.alt.pressed = true;\n",
"\t\t\tif(e.metaKey) modifiers.meta.pressed = true;\n",
" \n",
"\t\t\tfor(var i=0; k=keys[i],i<keys.length; i++) {\n",
"\t\t\t\t//Modifiers\n",
"\t\t\t\tif(k == 'ctrl' || k == 'control') {\n",
"\t\t\t\t\tkp++;\n",
"\t\t\t\t\tmodifiers.ctrl.wanted = true;\n",
"\n",
"\t\t\t\t} else if(k == 'shift') {\n",
"\t\t\t\t\tkp++;\n",
"\t\t\t\t\tmodifiers.shift.wanted = true;\n",
"\n",
"\t\t\t\t} else if(k == 'alt') {\n",
"\t\t\t\t\tkp++;\n",
"\t\t\t\t\tmodifiers.alt.wanted = true;\n",
"\t\t\t\t} else if(k == 'meta') {\n",
"\t\t\t\t\tkp++;\n",
"\t\t\t\t\tmodifiers.meta.wanted = true;\n",
"\t\t\t\t} else if(k.length > 1) { //If it is a special key\n",
"\t\t\t\t\tif(special_keys[k] == code) kp++;\n",
"\t\t\t\t\t\n",
"\t\t\t\t} else if(opt['keycode']) {\n",
"\t\t\t\t\tif(opt['keycode'] == code) kp++;\n",
"\n",
"\t\t\t\t} else { //The special keys did not match\n",
"\t\t\t\t\tif(character == k) kp++;\n",
"\t\t\t\t\telse {\n",
"\t\t\t\t\t\tif(shift_nums[character] && e.shiftKey) { //Stupid Shift key bug created by using lowercase\n",
"\t\t\t\t\t\t\tcharacter = shift_nums[character]; \n",
"\t\t\t\t\t\t\tif(character == k) kp++;\n",
"\t\t\t\t\t\t}\n",
"\t\t\t\t\t}\n",
"\t\t\t\t}\n",
"\t\t\t}\n",
"\t\t\t\n",
"\t\t\tif(kp == keys.length && \n",
"\t\t\t\t\t\tmodifiers.ctrl.pressed == modifiers.ctrl.wanted &&\n",
"\t\t\t\t\t\tmodifiers.shift.pressed == modifiers.shift.wanted &&\n",
"\t\t\t\t\t\tmodifiers.alt.pressed == modifiers.alt.wanted &&\n",
"\t\t\t\t\t\tmodifiers.meta.pressed == modifiers.meta.wanted) {\n",
"\t\t\t\tcallback(e);\n",
"\t\n",
"\t\t\t\tif(!opt['propagate']) { //Stop the event\n",
"\t\t\t\t\t//e.cancelBubble is supported by IE - this will kill the bubbling process.\n",
"\t\t\t\t\te.cancelBubble = true;\n",
"\t\t\t\t\te.returnValue = false;\n",
"\t\n",
"\t\t\t\t\t//e.stopPropagation works in Firefox.\n",
"\t\t\t\t\tif (e.stopPropagation) {\n",
"\t\t\t\t\t\te.stopPropagation();\n",
"\t\t\t\t\t\te.preventDefault();\n",
"\t\t\t\t\t}\n",
"\t\t\t\t\treturn false;\n",
"\t\t\t\t}\n",
"\t\t\t}\n",
"\t\t}\n",
"\t\tthis.all_shortcuts[shortcut_combination] = {\n",
"\t\t\t'callback':func, \n",
"\t\t\t'target':ele, \n",
"\t\t\t'event': opt['type']\n",
"\t\t};\n",
"\t\t//Attach the function with the event\n",
"\t\tif(ele.addEventListener) ele.addEventListener(opt['type'], func, false);\n",
"\t\telse if(ele.attachEvent) ele.attachEvent('on'+opt['type'], func);\n",
"\t\telse ele['on'+opt['type']] = func;\n",
"\t},\n",
"\n",
"\t//Remove the shortcut - just specify the shortcut and I will remove the binding\n",
"\t'remove':function(shortcut_combination) {\n",
"\t\tshortcut_combination = shortcut_combination.toLowerCase();\n",
"\t\tvar binding = this.all_shortcuts[shortcut_combination];\n",
"\t\tdelete(this.all_shortcuts[shortcut_combination])\n",
"\t\tif(!binding) return;\n",
"\t\tvar type = binding['event'];\n",
"\t\tvar ele = binding['target'];\n",
"\t\tvar callback = binding['callback'];\n",
"\n",
"\t\tif(ele.detachEvent) ele.detachEvent('on'+type, callback);\n",
"\t\telse if(ele.removeEventListener) ele.removeEventListener(type, callback, false);\n",
"\t\telse ele['on'+type] = false;\n",
"\t}\n",
"}\n",
"\n",
"shortcut.add(\"Alt+Left\",function() {\n",
"\tvar event = new Event('click');\n",
"\tif (settingsShown){\n",
"\t\tdocument.getElementById('hideSettingsButton_0').dispatchEvent(event);\n",
"\t} else{\n",
"\t\tdocument.getElementById('showSettingsButton_0').dispatchEvent(event);\n",
"\t}\n",
"});\n",
"\n",
"if (foldable) moveToBaryCenter();\n",
"\n",
"\n",
"});});\n",
"// COMMON_CODE_BLOCK_END\n",
"</script>\n",
"\n",
"</body>\n",
"</html>\n"
],
"text/plain": []
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"polymake: used package threejs\n",
" Three.js is a lightweight cross-browser JavaScript library/API used to create and display animated 3D computer graphics on a Web browser.\n",
" See http://github.com/mrdoob for the source code.\n",
"\n"
]
}
],
"source": [
"call_function(:visualize_in_surface, V, isolated)"
]
}
],
"metadata": {
"celltoolbar": "Slideshow",
"kernelspec": {
"display_name": "Julia 1.0.3",
"language": "julia",
"name": "julia-1.0"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "1.0.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment