b"\n_START_ARTICLE_\nGeometria s\xc3\xb3lida construtiva\n_START_PARAGRAPH_\nGeometria S\xc3\xb3lida Construtiva (ou Constructive Solid Geometry, CSG, em ingl\xc3\xaas) \xc3\xa9 uma das t\xc3\xa9cnica para modelagem de s\xc3\xb3lidos por meio de opera\xc3\xa7\xc3\xb5es boolianas. O princ\xc3\xadpio b\xc3\xa1sico implica a constru\xc3\xa7\xc3\xa3o de um modelo complexo a partir de um conjunto de primitivas recorrendo-se de uma s\xc3\xa9rie de opera\xc3\xa7\xc3\xb5es boolianas sequenciais alternadas ou n\xc3\xa3o, tipicamente a Uni\xc3\xa3o, Intersec\xc3\xa7\xc3\xa3o e a Diferen\xc3\xa7a._NEWLINE_A modelagem atrav\xc3\xa9s do uso de CSG possui in\xc3\xbameras aplica\xc3\xa7\xc3\xb5es, entre elas \xc3\xa9 claro jogos, estando presente tanto na engine do jogo Unreal, assim como o Editor do Quake.\n_START_SECTION_\nT\xc3\xa9cnicas de constru\xc3\xa7\xc3\xa3o\n_START_PARAGRAPH_\nExistem v\xc3\xa1rias maneiras para modelarmos uma primitivas usando CSG:\n_START_SECTION_\nSMC\n_START_PARAGRAPH_\nSMC, ou Set Membership Classification, consiste em tra\xc3\xa7armos uma s\xc3\xa9rie de segmentos paralelos atrav\xc3\xa9s figura, identificando 3 regi\xc3\xb5es importantes pertinentes a cada segmento: o conjunto de pontos na fronteira, o conjuntos de pontos dentro da figura e o conjunto de pontos fora da figura._NEWLINE_Uma outra alternativa \xc3\xa9 verificarmos exaustivamente ponto a ponto, os mesmos tr\xc3\xaas conjuntos, tamb\xc3\xa9m chamado de PMC ou Point Membership Classification, contudo esta t\xc3\xa9cnica embora mais precisa \xc3\xa9 mais onerosa que a anterior.\n_START_SECTION_\nImplementa\xc3\xa7\xc3\xa3o\n_START_PARAGRAPH_\nExemplo de algoritmo de CSG com SMC em C:_NEWLINE_typedef struct arvoreCSG{_NEWLINE_char operacao;_NEWLINE_void *desenho;_NEWLINE_struct arvoreCSG *direita;_NEWLINE_struct arvoreCSG *esquerda;_NEWLINE_} TarvoreCSG;_NEWLINE__NEWLINE_TpilhaSegmentos* combine(TpilhaSegmentos* A, TpilhaSegmentos* B, char op) {}_NEWLINE_TpilhaSegmentos* constroiCSG(TarvoreCSG *C, Tponto *P){_NEWLINE__NEWLINE_switch((*C).operacao){_NEWLINE_   case 'E': return smc_Esfera(NULL, (Tesfera*)((*C).desenho), P);_NEWLINE_case 'C': return smc_Hexaedro(NULL, (Thexaedro*)((*C).desenho), P);_NEWLINE_default:  return combine( constroiCSG((*C).esquerda, P),_NEWLINE_ constroiCSG((*C).direita, P),_NEWLINE_ (*C).operacao );_NEWLINE_}_NEWLINE_}"