Hallo zusammen
Im Moment Informatiktudent und in einem Projekteam tätig, habe ich folgende Frage. Wir entwickeln zurzeit eine iPad App, die im Grunde einem Probanden ermöglicht, eine Linie auf einer Skala zu machen. Dafür berechnen wir den Schnittpunkt zwischen der PanGesture (Mittels Anfangs und Schlusspunkt) und der schwarzen Linie auf dem Screen.
Das Problem ist nun, dass dieser Schnittpunkt nicht immer sauber berechnet wird. Wird der Pan schräg gemacht (also nicht schön vertikal von oben nach unten), dann stimmt der Schnittpunkt nicht und die rote Linie erscheint am falschen Ort.
Was machen wir im Code bei der Berechnung falsch? Wo stolpert der Algorithmus? Ich finds einfach nicht raus... :/
Wär echt toll, wenn uns jemand einen Tipp geben könnte!
Anbei der Code und ein Screenshot, damit ihr euch das besser vorstellen könnt.
[Blockierte Grafik: http://i.imgur.com/bKKaKpn.png]
Alles anzeigen
Alles anzeigen
Alles anzeigen
Alles anzeigen
Im Moment Informatiktudent und in einem Projekteam tätig, habe ich folgende Frage. Wir entwickeln zurzeit eine iPad App, die im Grunde einem Probanden ermöglicht, eine Linie auf einer Skala zu machen. Dafür berechnen wir den Schnittpunkt zwischen der PanGesture (Mittels Anfangs und Schlusspunkt) und der schwarzen Linie auf dem Screen.
Das Problem ist nun, dass dieser Schnittpunkt nicht immer sauber berechnet wird. Wird der Pan schräg gemacht (also nicht schön vertikal von oben nach unten), dann stimmt der Schnittpunkt nicht und die rote Linie erscheint am falschen Ort.
Was machen wir im Code bei der Berechnung falsch? Wo stolpert der Algorithmus? Ich finds einfach nicht raus... :/
Wär echt toll, wenn uns jemand einen Tipp geben könnte!
Anbei der Code und ein Screenshot, damit ihr euch das besser vorstellen könnt.
[Blockierte Grafik: http://i.imgur.com/bKKaKpn.png]
Quellcode
Quellcode
- //Get coordinates of starting and ending point of pan
- - (IBAction)getPanCoordinates:(UIPanGestureRecognizer*)sender {
- CGPoint start;
- CGPoint stop;
- //check if gesture done
- if (didDrawLine==NO
- &&sender.state == UIGestureRecognizerStateBegan) {
- start = [sender locationInView:self.touchView];
- startX=start.x;
- startY=start.y;
- }
- else if (didDrawLine==NO
- &&sender.state == UIGestureRecognizerStateEnded) {
- stop = [sender locationInView:self.touchView];
- stopX=stop.x;
- stopY=stop.y;
- int value=[self getIntersection];
- [self didPan];
- [self drawIntersectionAtValue:value];
- NSLog(@"Did Pan: %d", didPan);
- NSLog(@"Did Draw: %d", didDrawLine);
- }
- }
Quellcode
- - (int) getIntersection{
- int m; //Gradient
- int b;
- int result;
- if (startX - stopX == 0){
- result = startX;
- }
- // Calculate Intersection
- else {
- m = (stopY - startY) / (startX - stopX);
- b = startY - (m * startX);
- result = ((touchView.frame.size.height/2) - b) / m;
- }
- self.prozent = 100 / touchView.frame.size.width * result;
- // self.prozent++;
- NSLog(@"Intersection: %i Prozent", self.prozent);
- return self.prozent;
- }
Quellcode
- - (void) drawIntersectionAtValue:(int)value{
- int height = 50;
- //convert percental value into pixel value
- int value2=value*touchView.frame.size.width/100;
- //calculate start point of line
- int start=(touchView.frame.size.height/2)-(height/2);
- //generate line
- intersectionLine = [[UIView alloc] initWithFrame:CGRectMake(value2, start, 5, height)];
- intersectionLine.backgroundColor = [UIColor colorWithRed:0.824 green:0.243 blue:0.322 alpha:1]; /*#d23e52*/
- //draw line if Yes
- if (didPan==YES) {
- [touchView addSubview:intersectionLine];
- didDrawLine=YES;
- }