sto disegnando la linea utilizzando seguente codice, funziona semplicemente fantastico,Linea Disegno + Intersezione di quella linea con l'auto e anche rilevare CCSprites dentro quella linea disegnato
http://www.merowing.info/2012/04/drawing-smooth-lines-with-cocos2d-ios-inspired-by-paper/
Ora voglio ... ..
1> Rileva se la linea si interseca con se stessa. 2) Rileva se CCSprite si trova all'interno di questa linea chiusa o meno.
Durante la ricerca mi sono imbattuto in molte logiche per LineIntersection ma nessuna di esse è accurata. Ne sto dando uno che rileva un'intersezione, ma lo rileva anche quando non c'è un'intersezione di linea.
Primo metodo
- (BOOL) lineIntersectOccured:(CGPoint)t1 pointEnd:(CGPoint)t2 { BOOL result = NO; int pointsCount = [arrlinePoints count]; CGPoint cp1; CGPoint cp2; for(int i = 0, j = 1; j < pointsCount; i++,j++) { [[arrlinePoints objectAtIndex:i] getValue:&cp1]; [[arrlinePoints objectAtIndex:j] getValue:&cp2]; // lines connected do not need to be included. if((cp2.x == t1.x && cp2.y == t1.y) || (cp1.x == t2.x && cp1.y == t2.y)) { continue; } CGPoint diffLA = CGPointMake(cp2.x - cp1.x,cp2.y - cp1.y); CGPoint diffLB = CGPointMake(t2.x - t1.x, t2.y - t1.y); float compA = diffLA.x*cp1.y - diffLA.y * cp1.x; float compB = diffLB.x*t1.y - diffLB.y*t1.x; BOOL compA1 = (diffLA.x*t1.y - diffLA.y*t1.x) < compA; BOOL compA2 = (diffLA.x*t2.y - diffLA.y*t2.x) < compA; BOOL compB1 = (diffLB.x*cp1.y - diffLB.y*cp1.x) < compB; BOOL compB2 = (diffLB.x*cp2.y - diffLB.y*cp2.x) < compB; if(((!compA1 && compA2) || (compA1 && !compA2)) && ((!compB1 && compB2) || (compB1 && !compB2))) { result = YES; } } return result; }
Ed è così che io chiamo questo metodo, ho conservato i miei punti nelle arrLinePoints dal metodo pangesture riconoscitore
if ([self lineIntersectOccured:[[arrlinePoints objectAtIndex:0] CGPointValue] pointEnd:[[arrlinePoints objectAtIndex:[arrlinePoints count] - 1] CGPointValue]])
{
NSLog(@"Line Intersected");
}
questo dà me vero anche con la seguente situazione
Ho anche provato la stessa funzionalità con approccio diverso con l'aggiunta di vista nel punto di vista di CCDirector
Ma questo è dare problemi di prestazioni, il mio fps ridotto a quasi 3 a 6. E anche questo problema di intersezione rimane lo stesso.
la situazione ideale per intersezione è
Si prega di aiutare il più presto possibile! Grazie per tutto il supporto.
Voglio rilevare l'intersezione della stessa linea in Cocos2d. – Anand
Non implementato, penso che sia possibile rilevare il valore del pixel della linea tracciata con il valore del pixel della linea disegnata all'interno del metodo 'touchesMoved'. – NiKKi
Dai un'occhiata a scribus/lib2geom functionfind_self_intersections http://www.scribus.net/svn/Scribus/branches/ScribusOTF/scribus/plugins/tools/2geomtools/lib2geom/basic-intersection.cpp. Può essere istruttivo –