Grafik mit Qt

Alles rund um die Programmierung mit Qt
Antworten
jc-denton
Beiträge: 9
Registriert: 5. Dezember 2006 11:35

Grafik mit Qt

Beitrag von jc-denton »

Hallo,

Ich moechte gerne ein kleines Programm schreiben, das folgende Funktionalitaet erfuellt:

Der Benutzer clickt irgendwo in ein Feld, danach entstehen daraus Punkte, auf welche man (z.B. ueber ein Array zugreiffen kann). Daraus wird dann eine Gerade mit der "Least Sqare Method" [1] berechnet und gezeichnet.

Ich brauche dann also etwas um die Koordinaten der Clicks zu kriegen und etwas um Geraden und Punkten zu Zeichnen (aehnlich wie das Graphics Objekt in Java).

Kennt jemand ein kleines Beispiel, das die Verwendung der Entsprechenden Klassen erklaert und welche Qt Klassen sind dazu geignet?

Update:

Ich hab schon herausgefunden, wie ich Zeichnen kann:

Code: Alles auswählen

QPainter painter = new QPainter(this);
QPen p = new QPen();
painter.setPen(p);
painter.drawLine()
Nils

---
[1] http://en.wikipedia.org/wiki/Least_squares[/code]
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Beschäftige dich mit QGraphicsScene, QGraphicsView und QGraphicsItem. (Im übrigen erklärt auch die deutsche Wikipedia dein mathematisches Problem.)
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag von Volker »

Oder guck dir auch mal QWT an http://qwt.sourceforge.net/
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
jc-denton
Beiträge: 9
Registriert: 5. Dezember 2006 11:35

Beitrag von jc-denton »

humm danke, aber ich moechte eigentlich erst mal etwas moeglichst einfaches.. (wie zB processing[1])

[1] http://www.processing.org
jc-denton
Beiträge: 9
Registriert: 5. Dezember 2006 11:35

Beitrag von jc-denton »

Ich habe das ganze nun mal mit processing gemacht (aus Zeitmangel). Werde aber versuchen es noch auf Qt zu porten..

Code: Alles auswählen

import processing.core.*;

public class Lsa extends PApplet 
{
	double[][] points;
	int n;  // number of points
	double m;
	double b;
	double avgx, avgy;
	
	public void setup() {
		
		 n = 0;
		 points = new double[2][5];
		 size(200,200);
		 fill(0,0,0,0);
		 noStroke(); fill(1,1,1);
		
	}
	
	// has to be defined, not sure why
	public void draw() {}
	
	public void mouseReleased() {
		  
		 if(n < 5) {
		   
		     rect(mouseX-1, mouseY-1, 2, 2);
		     points[0][n] = mouseX;
		     points[1][n] = mouseY;
		     System.out.println("X: " + mouseX + "Y: " + mouseY);
		     n++;
		     
		 } else {
		   
		   lsa_m();
		   lsa_b();
		   
		   int x0 = 0;
		   int y0 = (int)b;
		   
		   int x1 = 180;
		   int y1 = (int)(m*x1 + b);
		   
		   System.out.println(y0+ " " + y1);
		   
		   stroke(0,0,0);
		   line(x0, y0, x1, y1);
		 }
	 
	}
	
	void lsa_m() {
		  double s1=0; 
		  double s2=0;
		  
		  avgx = avg(points[0]);
		  avgy = avg(points[1]);
		  
		  for(int i=0; i<n; i++) {
		    s1 += points[0][i] * points[1][i];   
		    s2 += points[0][i] * points[0][i];
		  }
		  s1 -= n*avgx*avgy;
		  s2 -= n*avgx*avgx;
		  
		  m = s1/s2;
		}
	
	public void lsa_b() {
	  b = avgy - m * avgx;
	} 
	
	public double avg(double[] a) {
	  double s = 0;
	  for(int i=0; i<a.length; i++)
	    s += a[i];
	  return s/a.length; 
	}
	
	static public void main(String args[]) {  
		PApplet.main(new String[] { "lsa" });
	}
}
Antworten