void Segmento::cohenSutherland(const PV2f &tl, const PV2f &br) { int codigoA = codigo(m_a, tl, br); int codigoB = codigo(m_b, tl, br); for (int frontera = 0; frontera < 4; ++frontera) { if (!(codigoA | codigoB)) { return; } else if (codigoA & codigoB) { m_a = PV2f(0, 0); m_b = PV2f(0, 0); return; } if (!codigoA) { const int caux = codigoA; codigoA = codigoB; codigoB = caux; const PV2f aux = m_a; m_a = m_b; m_b = aux; } else if ((codigoA & IZQUIERDA) == IZQUIERDA) { m_a.setY(m_b.getY() - ((m_b.getY() - m_a.getY()) / (m_b.getX() - m_a.getX())) * (m_b.getX() - tl.getX())); m_a.setX(tl.getX()); } else if ((codigoA & DERECHA) == DERECHA) { m_a.setY(m_b.getY() - ((m_b.getY() - m_a.getY()) / (m_b.getX() - m_a.getX())) * (m_b.getX() - br.getX())); m_a.setX(br.getX()); } else if ((codigoA & ARRIBA) == ARRIBA) { m_a.setX(m_b.getX() - ((m_b.getY() - tl.getY()) * (m_b.getX() - m_a.getX()) / (m_b.getY() - m_a.getY()))); m_a.setY(tl.getY()); } else if ((codigoA & ABAJO) == ABAJO) { m_a.setX(m_b.getX() - ((m_b.getY() - br.getY()) * (m_b.getX() - m_a.getX()) / (m_b.getY() - m_a.getY()))); m_a.setY(br.getY()); } codigoA = codigo(m_a, tl, br); } }
int main(void){ char nombre_completo[TAM], A[N+1]; int i; for(i=0;i<TAM;i++) nombre_completo[i]='\0'; for(i=0;i<N;i++) A[i]='\0'; gets(nombre_completo); codigo(nombre_completo,A); puts(A); return 0; }