Point begrenzt durch Polygon < Mathematica < Mathe-Software < Mathe < Vorhilfe
|
Ich habe diese Frage in auch http://forums.wolfram.com/student-support/discussions/4/ gestellt.
Wie kann der Punkt durch die Landesgrenzen beschränkt werden?
Auf einer Karte (von Spanien) soll ein Punkt an der stelle {-3.71, 40.42} erstellt werden.
Jetzt soll der Punkt vergrößert werden. Dazu wird die Funktion Manipulate[] verwendet, welche die Variable "punktgröße" in PointSize[] steuert. Der Punkt soll jedoch nicht über die Landesgrenzen hinaus vergößert werden.
Trifft also der Punkt an der Westküste auf die Landesgrenze soll er an dieser Stelle nicht weiter laufen, an allen anderen Stellen jedoch schon.
Am Ende soll fast ganz Spanien rot sein.
Hier der Code für die Landdesgrenzen und den Punkt.
Manipulate[ Show[Graphics[{
(*Farbe des Hintergrundes.*)
Background -> RGBColor[0.9, 0.9, 0.9],
(*Farbe des Landes.*)
RGBColor[0.4, 0.4, 0.4],
(*Landesgrenzen und zugehöriges Polygon*)
CountryData["Spain", "Polygon"],
(*Punkt an den Koordinaten {-3.71',40.42'}.*)
Red, {PointSize[punktgröße], Point[{-3.71', 40.42'}]}
}]], {punktgröße, 0, 1}]
Meine Lösungsidee war, statt der Funktion Point[] lieber RecTangle[] zu verwenden und diesen durch ein {xmax, ymax} = CountryData["Spain", "Polygon"] zu beschränken - hat aber nicht geklappt.
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 20:20 Fr 29.06.2012 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 03:59 Mo 07.01.2013 | Autor: | hieron |
statt: Point[{-3.71', 40.42'}]
so: Point[{-3.71, 40.42}]
Das Hochkomma ist überflüssig
Lg hieron
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 04:03 Mo 07.01.2013 | Autor: | hieron |
statt: Point[{-3.71', 40.42'}]
so: Point[{-3.71, 40.42}]
Das Hochkomma ist überflüssig
Lg hieron
Lösung:
Manipulate[
Show[Graphics[{(*Farbe des Hintergrundes.*)
Background -> RGBColor[0.9, 0.9, 0.9],(*Farbe des Landes.*)
RGBColor[0.4, 0.4, 0.4],(*Landesgrenzen und zugehöriges Polygon*)
CountryData["Spain",
"Polygon"],(*Punkt an den Koordinaten {-3.71',40.42'}.*)
Red, {PointSize[punktgröße],
Point[{-3.71, 40.42}]}}]], {punktgröße, 0, .4}]
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 13:53 Sa 02.02.2013 | Autor: | hieron |
Die Frage ist äusserst missverstaendlich gestellt.
Problem1:
Das "Hochkomma" bei den Punktkoordinaten "{-3.71', 40.42'}" wird nach Vorschau von der ForenSoftware von "accent grave" (welches in Mathematica "Precision" definiert) in ein Hochkomma umgewandelt. Nach dem zurueck kopieren in Mathematica erhaelt man daher eine Fehlermeldung. Wie gesagt das Hochkomma ist ueberfluessig und irrefuehrend, da in Mathematica das "senkrechte" Hochkomma Derivative (') bedeutet.
Problem2:
(* Zitat: "Trifft also der Punkt an der Westküste auf die Landesgrenze soll er an dieser Stelle nicht weiter laufen, an allen anderen Stellen jedoch schon. Am Ende soll fast ganz Spanien rot sein."
Kann man so verstehen, Antwort 1 *)
Manipulate[
Show[Graphics[{(*Farbe des Hintergrundes.*)
Background -> RGBColor[0.9, 0.9, 0.9],(*Farbe des Landes.*)
RGBColor[0.4, 0.4, 0.4],(*Landesgrenzen und zugehöriges Polygon*)
CountryData["Spain", "Polygon"],(*Punkt an den Koordinaten {-3.71,
40.42}.*)
offsetOsten = If[punktgröße > .4, 180 (punktgröße - .4), 0];
{Red, PointSize[punktgröße],
Point[Offset[{offsetOsten, 0}, {-3.71, 40.42}]]}}],
PlotRangeClipping -> True], {punktgröße, 0, 1}]
Tatsächlich wolltest du aber folgende Frage stellen:
"Wie kann ich einen roten Punkt radial vergrössern, sodass er nur die dunkelgraue Landmasse rot einfärbt, ohne das hellgraue Meer zu färben? Am Ende soll ganz Spanien rot gefärbt sein."
(* Antwort 2 (Student Support)*)
Manipulate[
ImageAdd[ImageMultiply[
Image@Graphics[{RGBColor[0.4, 0.4, 0.4],
CountryData["Spain", "Polygon"],
Red, {PointSize[pointSize], Point[{-3.71, 40.42}]}},
PlotRangeClipping -> True],
Image@Graphics[{GrayLevel[1], CountryData["Spain", "Polygon"]},
Background -> GrayLevel[0]]],
Image@Graphics[{GrayLevel[0], CountryData["Spain", "Polygon"]},
Background -> GrayLevel[0.9]]], {pointSize, 0, 1.1}]
Obwohl die Frage bereits abgelaufen ist, ist sie doch aeusserst lehrreich, und daher habe ich eine laengere Antwort gegeben.
lg hieron
|
|
|
|