2016-09-13 18 views
11

previous question adresindeki cevabı aldım. Ancak, bu koordinatları (axis equal durumunda eksen kutusunun büyüklüğü ve konumu) almak için, bazı nispeten hantal hesaplamalar yapmamız gerekir. Ancak, MATLAB grafikler Java'ya dayandığından, Java özelliklerine erişebiliriz.Eksen kutusunun sınırları bir JFrame'de nasıl elde edilir?

jFrame = get(gcf,'JavaFrame'); 
BoxHeight = jFrame.getAxisComponent.getHeight; 
BoxWidth = jFrame.getAxisComponent.getWidth; 

(belki bu eksen bileşenleri ile ilişkili olabilir), Şekil pencerelerin bir genişlik ve yükseklik elde edebilirsiniz: Biz bu MATLAB kullanmak durumunda olduğunu bulduk. Ancak, piksel birimleri durumunda get(gcf, 'Position') veya get(gca, 'Position') değerlerinden farklıdırlar. Java konusunda uzman değilim (aynı zamanda Altman'ın findjobj'u kullanarak bu özellikleri bulmayı denemedim).

Böylece, iki soru vardır:

MATLAB ve Java özelliklerinden elde edilen şekil pencerenin yüksekliği ve genişliği (belki bu eksen kutusudur) (aynı değildir neden
  1. en azından bunlar Java'da tamsayılar ve MATLAB'da kayan nokta sayılarıdır)?
Örneğin

:

hf=figure('units','pixels'); ha=gca(hf); 
set(ha,'units','pixels'); 
get(hf,'position') 
get(ha,'position') 

ans =

488 342 560 420 
73.8000 47.2000 434.0000 342.3000` 

BoxHeight=525, BoxWidth=700 ve vites değiştirme, her zaman sıfır (alignmentX=0.0 ve alignmentY=0.0) bulunur.

    Java kullanarak MATLAB çizilmiştir pencere eksenlerinin tam boyutunu ve konumunu elde etme
  1. ? MATLAB'de
+1

Şekle göre bahsettiğiniz çerçeve değil mi? Gördüğüm örneklerden, java çerçeve bileşenleri her zaman şeklin boyutlarıyla eşleşti. Eksenin yükseklik/genişliğine gelince (şekle göre normalize edilmiş birimlerde), ha.pozisyonda olmalıdır, burada "ha" karşılık gelen eksen sapıdır. Matlab'ı kullanarak, pikselleri tam boyutta alabilirsiniz. Ha.Units = 'piksel' ve istediğiniz boyutta ha.Position = [x y genişlik yükseklik] – serigado

+1

Hangi işletim sistemini kullanıyorsunuz? Linux'ta aynı boyutta geri dönerler. – Suever

+1

Merhaba serigado! İlginiz için çok teşekkürler. Matlab'ım (get (gca, 'Position')) pikseller için kayan noktalı sayılar verir (set (gca, 'Units', 'Pixels')). Soruma bir örnek ekledim. –

cevap

1

, hem figure ve axesPosition adlı bir özellik var ama aynı şey değil:

get(hf,'position') size position of the figure window on screen verecektir.
get(ha,'position'), position of the axes within the figure window'u döndürecektir. Bu nedenle

kod çıktısı

hf=figure('units','pixels'); 
ha=gca(hf); 
set(ha,'units','pixels'); 
hfPos = get(hf,'position') 
haPos = get(ha,'position') 

ans =

hfPos = 520 378 560 420 
haPos = 73.8000 47.2000 434.0000 342.3000 

böyle yorumlanmalıdır: this

Ancak, ben get(ha,'position') döner yüzen neden hiçbir fikrim yok nokta sayıları.

get(gcf,'JavaFrame'); 
Warning: figure JavaFrame property will be obsoleted in a future release. For more information see the JavaFrame resource on the MathWorks web site. 

Bu yüzden bunu kullanarak itimat olmaz: Benim sistemde

(Win7 Pro, MATLAB R2016a Java 1.7.0_60-b19) Aşağıdaki kod bir uyarı verir. Bunun yerine, MATLAB'de çizilen eksenlerin boyutunu ve konumunu elde etmek için yukarıdaki bilgileri kullanırdım.

+1

Cevabınız için teşekkürler. Önceki sorumu okudun mu? (Http://stackoverflow.com/questions/39395912/matlab-the-exact-size-and-position-of-the-axis-box-in-the-case-of-axis - Eşit) ve cevap? Asıl sorun 'get (ha, 'position')' 'axis equal' durumunda gerçek eksen kutusuyla uyuşmamasıdır. Uyarı hakkında endişelenmeyin, sadece bir uyarıdır. Onu tazeleyebiliriz: 'uyarı ('kapalı', 'MATLAB: HandleGraphics: ObsoletedProperty: JavaFrame')' –

+0

Başka bir soru, pencereyi hareket ettirdikten veya yeniden boyutlandırdıktan sonra 'hfPos'da' int's ifadesinin çift olarak gösterilmesinin nedenidir. – toshiomagic

İlgili konular