WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Koordinaten eines gezeichneten Rechtecks im Achsensystem

 

Nicolas S.
Forum-Century

Forum-Century


Beiträge: 143
Anmeldedatum: 15.07.09
Wohnort: ---
Version: R2014a/b
     Beitrag Verfasst am: 29.01.2019, 09:05     Titel: Koordinaten eines gezeichneten Rechtecks im Achsensystem
  Antworten mit Zitat      
Hallo zusammen,

ich will in einem Plot Rechtecke zeigen können, um Werte auswählen zu können und diese Auswahl auch sichtbar speichern zu können. "brush" nützt mir nichts, weil das viel händisches Arbeiten erfordert, weil immer nur eine Variable in den Workspace gespeichert werden kann.

Mein Ansatz bisher: Ich erzeuge einen Plot, und zeichne ein Rechteck hinein.

Ich lade den Plot in einem Skript und bestimme die Rechteck-Koordinaten im AnnotationPane-Koordinatensystem, von dem ich hoffe, dass es mit dem Figure-Koordinatensystem identisch ist.

Dann bestimme ich aus der Position im Figure-Koordinatensystem und der Position des Axes-Koordinatensystems und der Limits die Position im angezeigten Koordinatensystem.

Als Matlab-Script so:
Code:

%% Test: X-Koordinate eines Rechtecks aus Plot
% 29.01.2019 Nicolas

% Generate plot to draw rectangle
%t = 0:0.1:10;
%plot(t, sin(t))

close all
clear all

hFigure = openfig('sinWithRect.fig', 'new');

% Rectangle
hRect = findall(hFigure, 'Type', 'rectangleshape');
posRect = get(hRect, 'Position');
xRect = posRect([1 3]);

% Axe
hAxe = get(hFigure, 'Children');
assert(numel(hAxe) == 1);
posAxe = get(hAxe, 'Position');
xLimAxe = get(hAxe, 'XLim');
xPosAxe = posAxe([1 3]);

% x-co-ordinates of rectangle in figure
xf = [xRect(1) sum(xRect)];

% x-co-ordinates of rectangle in axe [0 1]
xa = (xf - xPosAxe(1))./(xPosAxe(2)-xPosAxe(1));

% x-co-ordinates of rectangle in axe [xLim]
x = xLimAxe(1) + (xLimAxe(2)-xLimAxe(1))*xa;

% Check matching
hold on
plot(x, 0*x, 'o')
 


Und dann kommt grober Unfug heraus:



Angehängt sind das Figure, das Matlab-Script und das Plot-Ergebnis, auf dem man den Fehler sieht.

Wo liegt mein Denkfehler? Welchen Teil der Koordinatensysteme habe ich nicht beachtet?

Viele Grüße
Nicolas

Test_rectfromplot.m
 Beschreibung:

Download
 Dateiname:  Test_rectfromplot.m
 Dateigröße:  809 Bytes
 Heruntergeladen:  270 mal
sinWithRect.fig
 Beschreibung:

Download
 Dateiname:  sinWithRect.fig
 Dateigröße:  22.33 KB
 Heruntergeladen:  295 mal
sinWithRect.png
 Beschreibung:

Download
 Dateiname:  sinWithRect.png
 Dateigröße:  21.36 KB
 Heruntergeladen:  283 mal

_________________

--
The programmer suggested it.
Private Nachricht senden Benutzer-Profile anzeigen


Nicolas S.
Themenstarter

Forum-Century

Forum-Century


Beiträge: 143
Anmeldedatum: 15.07.09
Wohnort: ---
Version: R2014a/b
     Beitrag Verfasst am: 30.01.2019, 08:42     Titel:
  Antworten mit Zitat      
Ich habe den Fehler gefunden. Der Positionsvektor enthält ja die Breite des Plots, nicht die Position der zweiten Kante.

Die Zeile
Code:

% x-co-ordinates of rectangle in axe [0 1]
xa = (xf - xPosAxe(1))./(xPosAxe(2)-xPosAxe(1))
 


Müßte eigentlich so lauten
Code:

% x-co-ordinates of rectangle in axe [0 1]
xa = (xf - xPosAxe(1))./xPosAxe(2)
 

und schon funktioniert es.

Danke fürs Lesen und Tschüß
Nicolas
_________________

--
The programmer suggested it.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.