Sunteți pe pagina 1din 149

UNIVERSIDAD PONTIFICIA COMILLAS

ESCUELA TCNICA SUPERIOR DE INGENIERA (ICAI)


INGENIERO INDUSTRIAL

PROYECTO FIN DE CARRERA

Programa grfico para el posicionamiento de seguidores en huertas solares fotovoltaicas conectadas a red

AUTOR: Paula Calles Ayastuy MADRID, Septiembre de 2007

Resumen

Actualmente existen muchos factores que estn provocando una grave crisis tanto energtica como medioambiental. Por un lado, el cercano agotamiento de los combustibles fsiles evidencia la necesidad de disponer de otros sistemas eficientes de generacin de energa. Adems, el crecimiento desproporcionado de la demanda que no se corresponde con el de la generacin plantea la necesidad de diversificar las fuentes de energa y la posibilidad de su uso a pequea escala que no precisen de sistemas de distribucin de electricidad (especialmente recomendable en el caso de las energas renovables). Finalmente el cambio climtico est impulsando una elevada restriccin medioambiental orientada a aumentar las inversiones en energas renovables. Dentro de las energas renovables encontramos la Solar fotovoltaica para la que Espaa, por su privilegiada situacin y climatologa, est especialmente indicada. El presente proyecto trata de facilitar la instalacin de sistemas de generacin de energas renovables, concretamente de huertas solares fotovoltaicas conectadas a red las cuales se realizan mediante seguidores solares. Este tipo de instalaciones est experimentando un gran desarrollo en Espaa debido a las propicias condiciones en que est situado dado que las compaas distribuidoras estn obligadas a comprar la energa generada por este tipo de instalaciones. El problema que presenta este tipo de instalaciones es el de calcular las distancias entre seguidores. Hasta el momento, el clculo de la proyeccin de sombras entre seguidores debe realizarse manualmente lo que implica una gran prdida de tiempo. Algunos fabricantes de seguidores solares adjuntan recomendaciones sobre las distancias a guardar segn el tipo de seguidor; sin embargo, estas distancias son muy genricas y en muchos casos, muy conservadoras. En el caso de que el fabricante no realice ninguna recomendacin, el valor de la distancia que suele utilizarse es el que se obtiene de calcular la sombra que proyecta un seguidor a las 12 del medioda solar del da correspondiente al solsticio de invierno (21 de Diciembre); da en el que la sombra es ms alargada.

Sin embargo, este clculo es muy poco preciso puesto que no permite saber a lo largo del ao la cantidad de sombra que va a recibir cada seguidor, dato que permitira realizar un diseo ms preciso segn las necesidades. El problema de las sombras es especialmente importante en el caso de la energa solar fotovoltaica debido a su funcionamiento. La capacidad de generar energa elctrica de una clula fotovoltaica est supeditada a la presencia de radiacin solar incidente sobre ella, por lo que en el momento en el que sta desaparezca, la clula dejar de generar. Lo que pretende el presente proyecto es facilitar una herramienta que permita realizar dichos clculos de forma clara y rpida con la finalidad de que el responsable de disear la instalacin pueda escoger, en base a los criterios propios de cada proyecto, la disposicin que ms le convenga. Primero se hizo un estudio del problema con el fin de decidir las mejoras que se podan conseguir. Por un lado, la dificultad que supona la utilizacin de las ecuaciones tridimensionales del movimiento del Sol se simplifica enormemente mediante la programacin. Adems, manualmente resulta inviable hacer el clculo de la sombra proyectada por un seguidor a lo largo de todo el ao y ms an si se tiene en cuenta que para ver la sombra que incide sobre un seguidor habr que calcular la que proyectan todos los que le rodean. En programacin, mediante bucles resulta bastante sencillo realizar esta operacin. Al irse desarrollando el diseo del proyecto ha habido que hacer frente a diferentes problemas derivados de la programacin. Lo que implica un mayor nmero de problemas es el hecho de que el diseo debe realizarse para un caso lo ms genrico posible. El resultado final es un programa que, introducindole los datos referentes al seguidor: Base de la parrilla de mdulos, Altura de la parrilla de mdulos, Altura de la columna del seguidor y ngulo mximo de inclinacin del seguidor, una disposicin de la huerta mediante un plano de AutoCAD y la ubicacin de la instalacin, muestra la sombra que va a incidir sobre cada seguidor cada mes del ao. La herramienta utilizada para presentar los resultados es Microsoft Excel puesto que permite al usuario, una vez finalizado el programa utilizar y manipular los datos obtenidos.

Dada la facilidad de uso del programa y la rapidez con la que permite realizar estos clculos, el usuario puede probar fcilmente varias disposiciones distintas y varios seguidores diferentes para despus, con ayuda de los valores obtenidos, decidir cul es la que ms le interesa. Como conclusin cabe destacar que este programa por s mismo resulta una herramienta muy til a la hora de disear la disposicin de los seguidores fotovoltaicos en huertas solares conectadas a red; sin embargo, tambin puede utilizarse como base para desarrollar programas ms complejos en este mismo mbito. Por ejemplo para realizar un programa que dibuje las sombras en cada uno de los seguidores o uno que calcule dichas sombras pudiendo colocar en cada posicin seguidores diferentes bastara con ampliar el presente proyecto.

Summary

Many of circumstances are currently leading up to a serious crisis in both, the energy and environmental fields. On the one hand, the imminent running out of fossil fuels shows that other efficient energy generating systems are required. Besides the fact that the huge increase in the demand of energy which is not consistent with the generation, gives raise to the need of diversifying the energy sources and the need of using such sources on a small scale which do not require an electricity supply network (strongly recommended in case of renewable energy). Finally, many environmental restrictions in support of increasing the investment in renewable energy are being caused by the climatic change. Within the renewable energies the photovoltaic energy is included. Due to the geographical circumstances and the climatic conditions of Spain, this energy is specially suitable in this country. The purpose of this project is to make easier the instalment of renewable

energys generating systems. In particular, the installation of photovoltaic farms connected to the network which are carried out by means of sun trackers. This kind of installations are growing and developing in Spain due to the fact that the energy supply companies are bound to purchase the energy produced by such installations. The calculation of the distance that must be kept between the sun trackers would be the most inconvenience identified in this kind of installations. So far, the estimation of the shadow projected between sun trackers must be carried out manually, this leading up to an important waste of time. A number of sun trackers manufacturers do attach their advises on the distance that should be kept depending on the type of sun trakers.Albeit this advise is commonly a generic distance and, in many occasions, very conservative. In cases where no advise is given by the manufacturer, the distance is commonly obtained from calculating the shadow which is projected by a sun tracker at 12 p.m. in the winter solstice (i.e. 21st December). This is the day of the year with the most extended shadow. However, this calculation is not very precise since there is no way to be aware of the quantity of shadow that each of

the sun trackers would receive during the year. This data would allow to carry out a more precise design depending on the particular needs. Because of the operation of the solar photovoltaic energy, the problem of the shadow is specially relevant. The electricity generating capacity of a photovoltaic cell is subject to the solar radiation affecting the cell. For that reason, the cell will stop generating as soon as the radiation disappears. The aim of this project is to provide a tool which enables calculating on a clear and quick manner. This way, the person in charge of designing the installation will be able to choose the most convenience layout/arrangement in view of the criteria to be followed in each project. At a previous step, the problem was analyzed in order to evaluate the improvements that could be achieved. By way of programming, the difficulty of using the equations of the Suns movement was simplified. Additionally, it is unfeasible to calculate the shadow which is projected by a sun tracker during the whole year. Even more considering that for the shadow affecting a particular sun tracker to be obtained, it is required to calculate the one projected by the other sun trackers nearby. In programming, this operation is quite easy by means of loops. Whilst developing the design of this project, a number of problems arising out of programming have been faced. The most relevant inconvenience being that the design must be carried out for a single case, as more generic as possible. The final result is a program which, by including the data in connection with the sun tracker: the base and the height of the sun trackers, iii) height of the sun trackers column and the maximum inclination angle of the sun trackers, iv) the layout of the farm by an AutoCAD design and v) the arrangement of the installation, shows the shadow that will be affecting each of the sun trakers during each month in a year. Given that Microsoft Excel enables the user changing and manipulating the data obtained once the program has been finalized, this tool has been chosen to show the results. Provided the easiness of the program and the quick the calculus are made, the user can easily try a number of different layouts and different sun trackers. In

view of the values obtained, the user will be able to decide which of them is the most advisable one. By way of conclusion, it should be highlighted that this program appears to be a very useful tool when designing the layout of photovoltaic sun trackers in solar farms connected to the network. Additionally, appears to be also useful for developing more complex programs in this same field. This program would be the basis of the most complex one. For instance, in order to carry out a program which either draws each of the sun trackers shadow or calculates such shadows allowing the possibility of establishing different sun trakers in every position, it will be enough by extending the current project.

INDICE
1 Introduccin y planteamiento del proyecto 1
1.1 Introduccin 2 1.1.1 La energa solar.. 4 1.1.2 Energa solar fotovoltaica.. 4 1.2 Planteamiento del proyecto 8 2 3

Descripcin de las tecnologas 11 Descripcin d el modelo desarrollado 15

3.1 Objetivos y especificacin 16 3.1.1 Objetivos. 16 3.1.2 Especificacin 16 3.1.2.1 Especificaciones del seguidor 16 3.1.2.2 Especificaciones de la disposicin 16 3.1.2.3 Especificaciones de la ubicacin del terreno 17 3.2 Datos.. 17 3.2.1 Introduccin de datos. 17 3.2.1.1 Dimensiones del seguidor 17 3.2.1.2 Distribucin de los seguidores. 17 3.2.1.3 Ubicacin de la instalacin. 18 3.3 Algoritmos 18 3.3.1 Clculos previos al cdigo.. 19 3.3.1.1 Ejes fijos y ejes solidarios al seguidor 22 3.3.1.2 Coordenadas de un seguidor genrico 23 3.3.1.3 Proyeccin de la sombra 26 3.3.1.4 Calculo de sombra sobre un seguidor genrico. 27 3.3.1.4.1 Seguidor n1. 30 3.3.1.4.2 Seguidor n2. 30 3.3.1.4.3 Seguidor n3. 31 3.3.1.4.4 Seguidor n4. 31 3.3.1.4.5 Seguidor n5. 32 3.3.1.4.6 Seguidor n6. 32 3.3.1.4.7 Seguidor n7. 33 3.3.1.4.8 Seguidor n8. 33 3.3.2 Desarrollo del cdigo. 34 3.3.2.1 Obtencin de datos desde un plano de Autocad. 34 3.3.2.2 Procesamiento de los datos.. 42 3.3.2.2.1 El movimiento del Sol. 43 3.3.2.2.1.1 La Latitud. 43 3.3.2.2.1.2 La posicin del sol 45 3.3.2.2.2 Posicin del seguidor.. 52 3.3.2.2.2.1 Coordenadas locales del seguidor 53 3.3.2.2.2.2 Coordenadas globales del seguidor. 57 3.3.2.2.3 Clculo de la sombra 59 3.3.2.2.3.1 Longitud de la sombra 59 3.3.2.2.3.2 Coordenadas locales de la sombra. 62 3.3.2.2.3.3 Coordenadas globales de la sombra 63

3.3.2.2.4 Clculo de las prdidas por sombra. 64 3.3.2.2.4.1 3.3.2.2.4.2 3.3.2.2.4.3 3.3.2.2.4.4 3.3.2.2.4.5 3.3.2.2.4.6 3.3.2.2.4.7 3.3.2.2.4.8 Seguidor Seguidor Seguidor Seguidor Seguidor Seguidor Seguidor Seguidor n1 n2 n3 n4 n5 n6 n7 n8 66 68 69 70 71 72 73 74

3.3.2.2.5 Final del programa. 75 3.3.2.3 Presentacin de los resultados en tabla de Excel. 77 3.4 Implantacin numrica. 78 4

Anlisis de los resultados 83


Caso Caso Caso Caso 1. 85 1-2. 85 2-3. 87 3-4. 87

4.1 4.2 4.3 4.4 5

Conclusiones 89

5.1 Conclusiones sobre los resultados.. 90 5.2 Recomendaciones para futuros estudios. 90 6 7

Bibliografa 91 Apndice 93

7.1 Estructuras de decisin 95 7.1.1 Sentencia IF ... THEN ... ELSE ... 95 7.1.2 Sentencia SELECT CASE........... 96 7.2 Estructuras de bucle.................... 97 7.2.1 Sentencia FOR ... NEXT............ 97 7.2.2 Sentencia DOLOOP............. 98 8.

Cdigo............... 99

1 Caracterizacin de la demanda

1
Introduccin y planteamiento del proyecto

1.1 Introduccin
La energa es fundamental para el desarrollo econmico de un pas y para el bienestar de su poblacin. Forma parte del instrumental econmico, pues se la requiere para activar todo tipo de maquinaria o herramienta y, aunque no se incorpora materialmente a los bienes o servicios producidos, tiene incidencia en los costos de produccin. Adems, es un bien de consumo final que se utiliza para la satisfaccin (para el confort) humano. Esto la convierte en un bien estratgico y su disponibilidad resulta primordial. La seguridad en el abastecimiento energtico requiere de un equilibrio entre las diversas fuentes energticas, a fin de evitar o reducir nuestra exposicin a eventuales problemas en el suministro. En este sentido, a fin de contribuir a tener una mayor seguridad, es necesaria una correcta diversificacin en el suministro y distribucin de energa, tanto para los diferentes tipos de energa como de las distintas fuentes. La energa es un bien bsico y estratgico que se encuentra en la agenda actual de todos los pases o regiones comerciales. Hechos como el desajuste entre oferta y demanda de combustibles fsiles y el consiguiente efecto sobre los precios, o las restricciones en el suministro de gas, han suscitado un debate sobre el futuro energtico mundial y la elaboracin de estrategias que permitan no slo garantizar el suministro energtico a largo plazo sino tambin conforme a unos criterios de responsabilidad medioambiental. Espaa no es ajena a este contexto de preocupacin. Muy al contrario, tenemos mayores motivos de inquietud: un grado de dependencia energtica superior al 80%; inseguridad en el actual armazn regulatorio del sector; indefinicin sobre el uso en el futuro de determinadas fuentes de energa; elevada restriccin medioambiental y prdida de peso en los escenarios internacionales. Sin embargo, tambin contamos con otros elementos a favor como un mix tecnolgico bien diversificado; una posicin ventajosa en el desarrollo de energas renovables. La elevada dependencia de las importaciones para satisfacer la demanda espaola de energa pone en evidencia otra de las caractersticas de nuestro patrn energtico: su vulnerabilidad. Ms del 65% del consumo energtico en el Estado espaol descansa sobre los combustibles fsiles, de los que apenas producimos un 2%. El resto lo importamos de pases que (en total importamos un 80% de nuestros recursos energticos), en un momento dado, podran cortar el suministro; entre otros motivos, porque tengan que hacer frente a su propia demanda interna. Es por esto que para Espaa, y mas concretamente para su estructura productiva,

resulta esencial superar las debilidades que presenta el actual modelo energtico, con el fin de elevar la eficiencia y reducir la dependencia del petrleo y la consiguiente vulnerabilidad ante las fluctuaciones de los mercados internacionales de este recurso. Por otro lado, las emisiones de gases de efecto invernadero (derivadas de la combustin de estos recursos fsiles) seguirn sobrepasando con creces los compromisos fijados De todo lo expuesto se deduce que el balance energtico espaol es lamentable, por lo que resulta absolutamente necesario potenciar las energas renovables. Se denominan energas renovables a aquellas que se obtienen de fuentes naturales virtualmente inagotables, unas por la inmensa cantidad de energa que contienen, y otras porque son capaces de regenerarse por medios naturales. Las fuentes renovables de energa pueden dividirse en dos categoras: no contaminantes o limpias y contaminantes. Entre las primeras encontramos la energa solar, energa elica, energa hidrulica, energa mareomotriz, energa geotrmica. En el caso de las contaminantes, que son las realmente renovables, se obtienen a partir de la materia orgnica o biomasa, y se pueden utilizar directamente como combustible o bien convertida en bioetanol o biogs mediante procesos de fermentacin orgnica o en biodisel, mediante reacciones de transesterificacin. Hace tiempo que las energas renovables se han considerado como una alternativa a las energas tradicionales, tanto por su disponibilidad presente y futura garantizada (a diferencia de los combustibles fsiles que precisan miles de aos para su formacin) como por su menor impacto ambiental en el caso de las energas limpias Segn la Comisin Nacional de Energa espaola, la venta anual de energa del Rgimen Especial se ha multiplicado por ms de 10 en Espaa, a la vez que sus precios se han rebajado un 11 %. Se considera que el Sol abastecer estas fuentes de energa (radiacin solar, viento, lluvia, etc.) durante los prximos cuatro mil millones de aos. La primera ventaja de la mayor cantidad de fuentes de energa renovables es que no producen gases de efecto invernadero ni otras emisiones, contrariamente a lo que ocurre con los combustibles, sean fsiles o renovables. Algunas fuentes renovables no emiten dixido de carbono adicional, salvo los necesarios para su construccin y funcionamiento, y no presentan ningn riesgo suplementario, tales como el riesgo nuclear.

Adems, el uso a pequea escala de energas renovables, que a menudo puede producirse "in situ", disminuye la necesidad de disponer de sistemas de distribucin de electricidad. Los sistemas corrientes, raramente rentables econmicamente, revelaron que un hogar medio que disponga de un sistema solar con almacenamiento de energa, y paneles de un tamao suficiente, slo tiene que recurrir a fuentes de electricidad exteriores algunas horas por semana. Por lo tanto, las ventajas ms significativas derivadas del uso de las energas renovables seran: no emiten CO2 a la atmsfera y evitan as el proceso de calentamiento terrestre como consecuencia del efecto invernadero, no contribuyen a la formacin de lluvia cida, no dan lugar a la formacin de NOx , no necesitan sofisticadas medidas de seguridad dado que no producen residuos txicos de difcil o imposible tratamiento o eliminacin. Los impactos derivados de estas energas son de menor dimensin y ms localizados, por lo tanto ms fcilmente corregibles o controlables. Adems sus efectos no son permanentes ya que no se prolongan despus de la utilizacin de la fuente energtica.

1.1.1 La energa solar


El Sol, fuente de vida y origen de las dems formas de energa que el hombre ha utilizado desde los albores de la Historia, puede satisfacer todas nuestras necesidades, si aprendemos cmo aprovechar de forma racional la luz que continuamente derrama sobre el planeta. Ha brillado en el cielo desde hace unos cinco mil millones de aos, y se calcula que todava no ha llegado ni a la mitad de su existencia. Durante el presente ao, el Sol arrojar sobre la Tierra cuatro mil veces ms energa que la que vamos a consumir. Espaa, por su privilegiada situacin y climatologa, se ve particularmente favorecida respecto al resto de los pases de Europa, ya que sobre cada metro cuadrado de su suelo inciden al ao unos 1.500 kilovatios-hora de energa, cifra similar a la de muchas regiones de Amrica Central y del Sur. Esta energa puede aprovecharse directamente, o bien ser convertida en otras formas tiles como, por ejemplo, en electricidad. No sera racional no intentar aprovechar, por todos los medios tcnicamente posibles, esta fuente energtica gratuita, limpia e inagotable, que puede liberarnos definitivamente de la dependencia del petrleo o de otras alternativas poco seguras, contaminantes o, simplemente, agotables. Es preciso, no obstante, sealar que existen algunos problemas que debemos afrontar y superar.

Aparte de las dificultades que una poltica energtica solar avanzada conllevara por s misma, hay que tener en cuenta que esta energa est sometida a continuas fluctuaciones y a variaciones ms o menos bruscas. As, por ejemplo, la radiacin solar es menor en invierno, precisamente cuando ms la solemos necesitar. Es de vital importancia proseguir con el desarrollo de la incipiente tecnologa de captacin, acumulacin y distribucin de la energa solar, para conseguir las condiciones que la hagan definitivamente competitiva, a escala planetaria.

1.1.2 Energa solar fotovoltaica


Las clulas solares, dispuestas en paneles solares, ya producan

electricidad en los primeros satlites espaciales. Actualmente se perfilan como la solucin definitiva al problema de la electrificacin rural, con clara ventaja sobre otras alternativas, pues, al carecer los paneles de partes mviles, resultan totalmente inalterables al paso del tiempo, no contaminan ni producen ningn ruido en absoluto, no consumen combustible y no necesitan mantenimiento. Adems, y aunque con menos rendimiento, funcionan tambin en das nublados, puesto que captan la luz que se filtra a travs de las nubes. La electricidad que as se obtiene puede usarse de manera directa (por ejemplo para sacar agua de un pozo o para regar, mediante un motor elctrico), o bien ser almacenada en acumuladores para usarse en las horas nocturnas. Tambin es posible inyectar la electricidad generada en la red general, obteniendo un importante beneficio. Si se consigue que el precio de las clulas solares siga disminuyendo, inicindose su fabricacin a gran escala, es muy probable que, para la segunda dcada del siglo, una buena parte de la electricidad consumida en los pases ricos en sol tenga su origen en la conversin fotovoltaica. La energa solar puede ser perfectamente complementada con otras energas convencionales, para evitar la necesidad de grandes y costosos sistemas de acumulacin. As, una casa bien aislada puede disponer de agua caliente y calefaccin solares, con el apoyo de un sistema convencional a gas o elctrico que nicamente funcionara en los periodos sin sol. El coste de la factura de la luz sera slo una fraccin del que alcanzara sin la existencia de la instalacin solar.

Desde que la conservacin de las fuentes de energa no renovables empez a tratarse como una necesidad, los desarrollos que se han producido en el aprovechamiento de las energas renovables han sido espectaculares. En concreto, el actual mercado fotovoltaico crece de forma contundente y lo ms importante respaldado por un inters gubernamental.

Previsiones de potencia a instalar

Debemos remitirnos al Plan de Fomento de las Energas Renovables. El Consejo de Ministros (30/12/1999) aprob el Plan de Fomento de las Energas Renovables para el perodo 2000-2010. El Plan es una planificacin de carcter indicativo que recoge los principales elementos y orientaciones para la articulacin de una estrategia que logre que el crecimiento de cada una de las reas de energas renovables pueda cubrir, en su conjunto, al menos el 12 por 100 del consumo de energa primaria en Espaa en el ao 2010, que es el objetivo que recoge la Ley 54/1997 del Sector Elctrico. As, las energas renovables en el ao 2010 debern aportar al

abastecimiento nacional 16,6 millones de tep, frente a los 7,1 millones de tep actuales. Este objetivo implica duplicar la participacin de estas energas en el consumo de energa primaria. La planificacin propuesta tiene un marcado carcter indicativo al definirse en un contexto, en el marco de la UE, de liberacin creciente hacia un Mercado nico de la energa. Sin embargo, por su carcter estratgico y beneficios intrnsecos, presentes en diversos mbitos, a las energas renovables se les otorga un tratamiento especfico diferenciado. Con la ejecucin de este Plan, adems de cubrirse el 12,3 por 100 de la demanda total de energa en Espaa en el ao 2010 con energas renovables, se consiguen los principales objetivos trazados para la poltica energtica nacional: la diversificacin de las fuentes primarias para garantizar la seguridad en el suministro energtico, la eficiencia en su utilizacin y el respeto al medio ambiente. Por otro lado, el Plan de Fomento se revela como un instrumento indispensable para alcanzar los compromisos adquiridos por Espaa en el campo medioambiental, en concreto en materia de limitacin de las emisiones de gases de efecto invernadero.

Como principales efectos derivados de la ejecucin del Plan cabe citar: Fortalecimiento y conformacin de un moderno tejido industrial para el sector a travs del desarrollo y la puesta en el mercado de tecnologas propias que producirn unos efectos de importancia creciente sobre la exportacin. Se podra establecer en ms de 1.000 el nmero de empresas que hasta el ao 2006 pueden surgir para el aprovechamiento directo de las energas renovables, lo que contribuir de forma efectiva a la creacin de empleo. El ahorro de emisiones de CO2 derivado de la ejecucin del Plan se ha estimado entre 19,5 y 41,5 millones de toneladas en el ao 2010, segn las fuentes de energas renovables sustituyan, respectivamente, al gas natural o al carbn para la generacin de energa elctrica. Las energas y reas tcnicas que considera el Plan son: biomasa, de la cual se aprovecha su contenido energtico en una primera transformacin (residuos agrcolas, forestales, cultivos energticos, etctera) o en una segunda etapa (residuos animales transformados a biogs, biocarburante, etctera); elica; aprovechamiento de la energa cintica del viento; hidrulica, aprovechamiento de la energa potencial del agua; solar: energa solar trmica en sus diversas transformaciones (pasiva, directa y termoelctrica) y fotovoltaica; y valorizacin energtica de residuos urbanos (biogs, slidos, etctera). Los datos ms relevantes sobre solar fotovoltaica que define el Plan los encontramos resumidos en la siguiente tabla. El Plan de Fomento de las Energas Renovables tiene como previsin el instalar durante el perodo 2000-2010, 135 MWp nuevos en sistemas fotovoltaicos. De esta cantidad, aproximadamente 20 MWp podran corresponder a aplicaciones aisladas de la red y 115 MWp a aplicaciones conectadas. Detalle sobre el grfico anterior en la siguiente tabla:

Ventajas e inconvenientes

Las ventajas de la energa solar fotovoltaica son numerosas. En primer lugar, son sistemas silenciosos, limpios y respetuosos con el medio ambiente, y suponen un gran ahorro en el traslado de energa, puesto que se encuentran cerca del punto de consumo. Cuando se trata de centrales fotovoltaicas, se requiere poco tiempo para su construccin, cerca de las localidades a las que tiene que suministrar energa. En el caso de los paneles fotovoltaicos instalados en las

viviendas, stos requieren un mnimo mantenimiento ofreciendo un gran periodo de vida til, con lo que se amortiza en un breve periodo de tiempo. En definitiva, su uso ofrece un suministro de energa continuo y fiable sin tener que depender de las fuentes de energa convencional. En cuanto a los inconvenientes, las instalaciones fotovoltaicas tienen unas limitaciones que deben llevar a sus usuarios a la moderacin en el consumo y al empleo de aparatos de consumo con elevados rendimientos. Asimismo, el precio y el gran tamao de los paneles solares frenan su expansin, puesto que la tecnologa disponible actualmente requiere de una gran superficie de captacin.

1.2 Planteamiento del proyecto


El presente proyecto trata de facilitar la instalacin de sistemas de generacin de energas renovables, concretamente de huertas solares fotovoltaicas conectadas a red las cuales se realizan mediante seguidores solares. Como ya se ha comentado en la introduccin, este tipo de instalaciones est experimentando un gran desarrollo en Espaa. En este tipo de instalacin resulta especialmente importante la disposicin con la que van a instalarse los seguidores; sin embargo, dada la situacin actual, resulta especialmente difcil y tedioso obtener unos valores ptimos para la disposicin. Por lo tanto, la motivacin principal a la hora de realizar este proyecto surge de la inexistencia de un software comercial genrico para todo generador por lo que resultara interesante la implantacin de un sistema de clculo de sombras con el fin de hallar la mejor disposicin para los seguidores comerciales con la que conseguir el mximo aprovechamiento solar. Debido a la inexistencia de un software con las caractersticas comentadas, hasta el momento el clculo de la proyeccin de sombras entre seguidores deba realizarse manualmente lo que implica una gran prdida de tiempo. Para realizar un exhaustivo clculo de la sombra que incide sobre un seguidor dispuesto en una huerta solar, hay que tener en cuenta tanto la posicin del sol como la del seguidor. El problema es que ambas varan a cada momento por lo que el nmero de clculos puede ser infinito. Dado que es imposible realizarlos para cada instalacin, se utilizan algunas soluciones con sus correspondientes limitaciones.

Algunos fabricantes de seguidores solares adjuntan recomendaciones sobre las distancias a guardar segn el tipo de seguidor; sin embargo, estas distancias son muy genricas y en muchos casos, muy conservadoras. En otros casos se proponen unas distancias segn el incremento de rendimiento deseado, pero nuevamente resultan demasiado poco particulares. Adems, no permiten saber realmente los valores de incremento de rendimiento o de porcentaje de sombra. Cuando el fabricante no realiza ninguna recomendacin, los clculos debe realizarlos el propio diseador de la instalacin. En estos casos se recomienda efectuar los clculos para el da del solsticio de invierno, que es cuando la trayectoria del sol es ms baja y, por lo tanto, las sombras alcanzan su mxima longitud sobre el suelo. Concretamente, estos clculos suelen realizarse para el medioda solar de dicho da. Sin embargo, utilizando las distancias as calculadas, durante un amplio intervalo de das, especialmente en los meses de diciembre y enero, se producir sombreado en los seguidores y por lo tanto es posible que durante esos meses apenas pueda ser inyectada energa til a la red, a pesar de que los paneles puedan recibir en esos meses una apreciable cantidad de radiacin.

Este problema es exclusivo de los paneles fotovoltaicos puesto que en el caso de los colectores trmicos, el anterior sombreado no tendra ms consecuencia que una pequea disminucin en su rendimiento durante el invierno. La razn por la que la incidencia de sombras resulta tan decisiva para el rendimiento de una instalacin fotovoltaica reside en el funcionamiento de las clulas fotovoltaicas. El principio de funcionamiento de las mismas es el siguiente:

La unin de dos elementos semiconductores, uno de tipo N y otro de tipo P, provoca una diferencia de potencial en las proximidades de esa unin.

Los fotones transfieren la energa de la radiacin solar incidente a los electrones de los semiconductores, liberndolos de la red cristalina a la que estaban unidos (generacin electrn-hueco)

La diferencia de potencial existente en la unin provoca un flujo ordenado de portadores (electrones y huecos) fotogenerados, originando una diferencia neta de potencial en la clula.

Mediante

los

contactos

existentes

en

la

clula,

puede

disponerse un circuito exterior, por el que circular una corriente elctrica, la cual podr entregar potencia elctrica til. La diferencia de potencial existente entre los extremos de la clula solar fotovoltaica se debe a la separacin espacial de los portadores fotogenerados. Estos potadores slo mantienen su condicin de libres durante un tiempo limitado, al cabo del cual se recombinan y pierden su capacidad para formar parte de una corriente elctrica por lo que su funcionamiento requiere de la presencia de la radiacin solar incidente. Por todo lo expuesto, lo que pretende el presente proyecto es facilitar una herramienta que permita realizar los clculos de sombras de forma clara y rpida con la finalidad de facilitar la optimizacin de las inatalaciones de huertas solares fotovoltaicas conectadas a red.

10

2 cterizacin de la demanda

2
Descripcin de las tecnologas
3 Caracterizacin de la demanda

11

Para

el

desarrollo

del

proyecto

se

han

utilizado

tres

programas

relacionndolos entre s: o o o AutoCAD Microsoft Excel Visual Basic 6

Bsicamente, la herramienta que sirve de unin es el Visual Basic, adems es este programa el que lleva el peso del proyecto. Visual Basic es una herramienta de programacin que permite crear aplicaciones para Microsoft Windows. De cara a este proyecto, la ventaja que presenta Visual Basic frente a otras herramientas de programacin es que esta permite programar aplicaciones tanto para Excel como para AutoCAD. Adems la aplicacin terminada es un autntico .exe que utiliza una mquina virtual que se puede distribuir sin necesidad de tener el programa de Visual Basic AutoCad es una herramienta de dibujo, que en este caso va a utilizarse como entrada de datos, mediante un plano. Realmente utiliza el archivo .dxf correspondiente al plano. AutoCAD DXF (Drawing Exchange Format) es un formato de archivo desarrollado por AutoDesk para facilitar el intercambio de dibujos de AutoCAD con otros programas de CAD. Es un archivo que contiene el cdigo del dibujo de AutoCAD de tal forma que puede leerse como un archivo de texto. Esta ltima cualidad es la que se ha aprovechado en el proyecto para facilitar la obtencin de datos del plano. Microsoft Excel es un programa de hoja de clculo. En el presente proyecto, este programa se utiliza para presentar mediante una tabla el resultado obtenido mediante el programa que se ha desarrollado. Una de las razones por la que se ha elegido este programa es que, una vez obtenidos los resultados, pueden ser utilizados para realizar otras operaciones. Microsoft Excel tambin se utiliza para realizar un intercambio dinmico de datos con Visual Basic; esto permite obtener de una tabla memorizada en Excel un dato necesario para el desarrollo del programa.

12

La forma en la que se relacionan estas tres herramientas y, por lo tanto, la forma en la que se desarrolla el programa es el siguiente: o El usuario introduce los datos que el .exe le pide, entre ellos la ubicacin del plano de AutoCAD (el archivo DXF del plano) o Mediante Visual Basic se transforman los datos, los que lo necesiten, a un formato til para su manejo. Esto se realiza de dos formas: Se abre el archivo DXF del plano y mediante un archivo de texto se extraen los datos de situacin de los seguidores. Estos datos son colocados en matrices. Se abre en Excel la tabla asociada a las latitudes de las Comunidades Autnomas y se realiza un intercambio de datos entre Visual Basic y Excel de forma que se obtiene el valor de la latitud correspondiente a la Comunidad escogida. Se cierra la tabla. Se procesan todos los datos hasta obtener los

resultados deseados, los porcentajes de sombra de cada seguidor en cada mes. Se crea una tabla en Excel donde con los resultados obtenidos.

En la siguiente figura se muestra el flujo de informacin entre los programas:

13

14

3
Descripcin del modelo desarrollado

15

3.1 Objetivos y especificacin.


3.1.1 Objetivos
Establecimiento de criterios para el clculo de sombras Clculo de sombras para la generacin de seguidores Implantacin en ecuaciones tridimensionales de la geometra solar Ofrecer una herramienta que permita optimizar la energa solar en las huertas solares fotovoltaicas.

o o o o

3.1.2 Especificacin
Las especificaciones para el presente proyecto se en tres apartados. Las especificaciones de los seguidores para los que se va a disear el programa, de la disposicin de los mismos y por ltimo, la ubicacin del terreno. 3.1.2.1 Especificaciones del seguidor. A pesar de existir muchos tipos de seguidores, los que se han utilizado para disear este proyecto han sido los seguidores de dos ejes puesto que permiten realizar un seguimiento casi completo del movimiento del sol. Esto implica que la posicin del seguidor en cada momento viene determinada por la posicin del Sol o, lo que es lo mismo, las variables que la determinan. Sin embargo, hay que tener en cuenta que stos seguidores tienen algunas limitaciones. La ms importante a la hora del diseo de este proyecto es que tienen un ngulo mximo de inclinacin por lo que el seguidor no siempre se mantendr perpendicular a los rayos del sol en cuanto a lo que altura solar se refiere. Cuando la altura solar sea inferior a dicho ngulo mximo, el seguidor se mantendr con dicha inclinacin aunque la altura solar disminuya. 3.1.2.2 Especificaciones de la disposicin. Como disposicin genrica se ha utilizado una bastante habitual y que coincide con la recomendacin de los fabricantes de diseadores. Se trata de un marco de implantacin rectangular respecto a los ejes Norte-Sur y Este-Oeste.

16

Adems se ha supuesto un nico tipo de seguidor en cada caso de forma que en dicha disposicin todos los seguidores sean iguales. 3.1.2.3 Especificaciones de la ubicacin del terreno. El espacio para la ubicacin del terreno se ha limitado a las Comunidades Autnomas Espaolas. Lo que la ubicacin del terreno especifica es la latitud del lugar y por lo tanto, la posicin del sol respecto de los seguidores.

3.2 Datos

3.2.1 Introduccin de datos.


Esta es la parte del programa orientada hacia El usuario y la nica a la que el mismo tiene acceso. Aqu de lo que se trata es de definir la instalacin para la cual se quieren obtener los datos de sombra, por lo que est dividido en tres partes: las dimensiones del seguidor, la distribucin que se quiere estudiar y la ubicacin de la misma. 3.2.1.1 Dimensiones del seguidor Las dimensiones que van a definir el seguidor que se quiere estudiar el ancho y alto de la parrilla de mdulos, altura de la columna y ngulo mximo de inclinacin. En la siguiente figura puede verse a qu corresponde cada una de estas dimensiones. La funcin que cumple cada una de ellas en el desarrollo del programa se explicar ms adelante. 3.2.1.2 Distribucin de los seguidores La distribucin de los seguidores se introducir mediante un plano de Autocad. Sin embargo, este plano deber introducirse en la extensin *.dxf. Este es el Formato de intercambio de dibujos de Autocad (Drawing Interchange Format). Lo que esto supone de cara al programa que se ha desarrollado es que es un archivo de texto donde se va almacenando lo que Autocad va dibujando, de tal manera que,

17

leyendo dicho archivo, pueden obtenerse todos los datos asociados al dibujo. Para permitir que el programa pueda obtener los datos necesarios del plano, es necesario facilitar la siguiente informacin: el nombre de la capa correspondiente a la posicin de los seguidores. La funcin de estos datos se explicar ms adelante, en el apartado referente a la obtencin de datos desde Autocad. 3.2.1.3 Ubicacin de la instalacin En este caso, lo que se requiere es la Comunidad Autnoma en la que va a realizarse la instalacin. La funcin de este dato es la conocer la Latitud correspondiente para poder conocer con exactitud la posicin del sol respecto a los seguidores en cada momento. La ventana de introduccin de datos tiene la siguiente forma:

3.3 Algoritmos
Previamente al desarrollo del cdigo, se estudio la forma de llevar a cabo los clculos que se deban realizar. La base del programa es el clculo de las sombras que sobre un seguidor proyectan todos los de su alrededor; por lo tanto, la manera

18

en al que va a realizarse ese clculo ser la que defina la dinmica del programa y, en consecuencia, el desarrollo del programa.

3.3.1 Clculos previos al cdigo.


La primera decisin que se deba tomar era la forma en la que se iba a realizar el clculo de las sombras. El mtodo elegido fue el de interseccin de planos y la metodologa la siguiente: Lo que se pretende es obtener la sombra que proyecta un seguidor sobre otro; la idea es que los lmites de la sombra los definirn las sombras proyectadas por las aristas del seguidor. Por lo tanto, bastar calcular la interseccin entre la sombra proyectada por dichas aritas y la superficie del seguidor sobre el que incide la sombra. Dichas rectas interseccin estarn contenidas en la superficie del seguidor. Segn lo expuesto, lo que hay que conseguir son dos rectas. Dado que una recta se pude definir como la interseccin entre dos planos lo que tratamos es de hallar los dos planos que definan a cada una de las dos rectas. Por un lado, uno de los planos ser el plano definido por el seguidor sobre el que se proyecta lo sombra. Como en ambos casos las rectas interseccin estn contenidas en la superficie de dicho seguidor, este plano ser comn a ambas. Los otros dos planos debern contener la arista que se quiere proyectar y su sombra. Una de estas aristas ser siempre la arista superior del seguidor. La otra, que ser una de las aristas laterales, depender del lugar en el que se site un seguidor respecto al otro y de la posicin del sol respecto a ambos. Existen mltiples formas de definir un plano (tres puntos no alineados, una recta y un punto exterior a ella, dos rectas paralelas o dos rectas secantes); en este caso se ha optado por definirlo mediante tres puntos no alineados contenidos en l. A continuacin se van a detallar los pasos a seguir para la obtencin de los planos a partir de tres puntos no alineados, la interseccin entre planos y, finalmente, la interseccin entre dos lneas.

19

primero habr que definir los tres puntos que sern de la forma: R=( r1 , r2 , r3 ) S=( s1 , s 2 , s 3 ) T=( t1 , t 2 , t 3 ) Los elementos necesarios para lograr la ecuacin del plano son dos vectores directores

un

punto.

Los

dos

vectores

directores sern a ( a1 , a 2 , a 3 )y b ( b1 , b2 , b3 ) y el punto, s.

Los vectores directores se calculan a travs de los tres puntos ya definidos de la siguiente forma:

a1 = s1 t1 a2 = s2 t 2
a3 = s3 t 3

b1 = t1 r1 b2 = t 2 r2
b3 = t 3 r3

La forma del plano que se ha utilizado es la reducida, resultado de igualar a cero el determinante formado por los dos vectores y el punto genrico X=(x, y, z) con el punto dado. De esta manera la ecuacin del plano es

det[(X-P) , u , v]=0 => Ax +By +Cz +D =0 Donde (A, B, C) es un vector perpendicular al plano y coincide con el producto vectorial de los vectores u y v. En el caso particular que estamos tratando, habr que calcular tres planos:

v1 x + v 2 y + v3 z + d = 0

w1 x + w2 y + w3 z + e = 0

20

u1 x + u 2 y + u 3 z + f = 0
Desarrollando el determinante anterior, obtenemos:

v1 = (a 2 * b3 ) (a3 b2 ) v 2 = ((a1 * b3 ) (a3 b1 )) v3 = (a1 * b2 ) (a 2 b1 ) d = s1 * v1 s 2 * v 2 s 3 * v3


Este plano ser el comn a ambas rectas. Los valores de los otros dos planos se hallarn de la misma forma que el anterior sustituyendo las v y la d por lo que corresponda. Por lo tanto, las dos rectas interseccin vendrn definidas por los planos: r1: v1 x + v 2 y + v3 z + d = 0

w1 x + w2 y + w3 z + e = 0

r2: v1 x + v 2 y + v3 z + d = 0

u1 x + u 2 y + u 3 z + f = 0
De donde, operando obtenemos las siguientes rectas:

ra1 = v1

v3 * w1 w3 u 3 * w1 w3

rb1 = v 2

v3 * w2 w3 u 3 * w2 w3

rc1 = d

v3 * e w3 u3 * e w3

ra 2 = u1

rb2 = u 2

rc 2 = f

Y por lo tanto las coordenadas X e Y del punto de interseccin de ambas rectas ser:

21

rb1 * rc 2 rc1 rb 2 X = rb1 * ra 2 ra1 rb 2


Y = ( ra 2 * X ) + rc 2 rb 2

En el caso del plano definido por el seguidor, bastar con utilizar tres de los cuatro extremos del mismo y as que dar perfectamente definido el mismo. Para el caso de los otros dos planos, se ha optado por utilizar los dos puntos que corresponden al extremo de la arista que se deba emplear y la proyeccin de la sombra de uno de ellos sobre el suelo. Una vez definida la metodologa que se va a seguir, hay que ver la manera de llegar hasta ella.

3.3.1.1 Ejes fijos y ejes solidarios al seguidor. El primer paso era definir unos ejes que sirvieran como base de coordenadas para poder definir los puntos, los planos y todo lo necesario para hallar las sombras. Definir los ejes fijos es bastante sencillo. Como una de las bases de todos estos clculos es el movimiento del sol el cual se define a travs de los ejes NorteSur y Este-Oeste parece bastante lgico utilizar estos mismos ejes como ejes fijos. Adems, el tipo de instalaciones que se estn estudiando, las huertas solares conectadas a red, se suele utilizar un marco de implantacin rectangular segn esos mismos ejes. Por lo tanto adoptando los ejes N-S, E-O como fijos se facilita considerablemente el trabajo. Hay que tener en cuenta que el tipo de seguidores para los que se est diseando el programa, son seguidores con seguimiento de dos ejes. Esto significa que en todo momento permanecen perpendiculares a los rayos del sol. Como la posicin del sol se define mediante dos ngulos (Azimut solar, , y Altura solar, ), la posicin del seguidor respecto de los ejes fijos tambin estar definida por esos dos ngulos. Por lo tanto, resulta muy complicado proyectar cualquier punto del

22

seguidor directamente sobre los ejes fijos. Para facilitar el trabajo, se han utilizado unos ejes solidarios al seguidor tales que su posicin respecto a los ejes fijos vendr definida por el Azimut.

Como puede apreciarse en la figura(num de la figura) el sentido positivo del eje x se ha hecho coincidir con el Oeste y el sentido positivo del eje y con el Sur. La razn por la que se ha elegido el Sur como el sentido positivo de la y se debe al Azimut que, como se ha comentado anteriormente, toma como origen el Sur. A los ejes solidarios al seguidor de ahora en adelante se les llamar ejes locales y a los ejes fijos, ejes globales de tal forma que cualquier variable con subndice L estar en ejes locales y lo mismo ocurrir con el subndice G. Las ecuaciones que relacionarn los ejes locales con los globales sern los siguientes:

xG = x L cos y L sen yG = x L sen + y L cos

3.3.1.2 Coordenadas de un seguidor genrico El siguiente paso es definir las coordenadas de los extremos del seguidor en los ejes locales y globales. Para ello se utiliza un seguidor genrico de tal forma que el eje de coordenadas se site en la base del mismo. La numeracin de los extremos del seguidor va a ser la siguiente (en la figura se representa un momento en el que el Azimut solar es cero):

23

Una vez numerados los extremos del seguidor genrico, queda definir el valor de las coordenadas de esos cuatro en ejes locales para unos valores de Altura solar y Azimut solar igualmente genricos. Para definir dichas coordenadas habr que tener en cuenta que la base de la parrilla de mdulos se mantiene en todo momento paralela al eje X L lo que implica que la coordenada XL de los cuatro extremos del seguidor se mantendr

invariable; independientemente de los valores que adopten las variables Altura y Azimut solar. Por lo tanto las coordenadas X L de los cuatro extremos del seguidor valdrn:

x L1 = x L 2 = x L3 = x L 4

base 2 base = 2

En el caso de la coordenada Y L , es un poco ms complicado. De las variables referentes a las dimensiones del seguidor, en la que habr que fijarse es en la altura de la parrilla de los mdulos; sin embargo, en este caso, el valor de la proyeccin depender del ngulo de inclinacin del seguidor. Dicho ngulo de inclinacin viene definido por la Altura solar o, ms directamente, por su complemento, el ngulo cenital.

24

Antes de proceder a escribir las ecuaciones correspondientes falta determinar un ltimo detalle. Puesto que los ejes locales son solidarios al seguidor y giran junto con l, los extremos 1 y 4 tendrn siempre un valor en coordenada y local positivo, mientras que los extremos 2 y 3 sern siempre negativos. Por todo lo expuesto hasta ahora y dada la simetra del seguidor tanto respecto del eje X L como del Y L , el valor absoluto de la coordenada Y L de los cuatro extremos del seguidor ser el mismo. Exactamente lo mismo ocurre en el caso de los valores de la coordenada X L .

y L1 = y L 4 = y L 2 = y L3

altura cos 2 altura = cos 2

Finalmente queda por ver el valor de z para los cuatro extremos del seguidor. Como ya se ha comentado el eje z no vara de ejes locales a globales por lo que no hay necesidad de hacer distinciones. Aqu es donde entra en juego la Altura de la columna del seguidor. Dicha altura corresponde a la distancia existente entre el suelo y el centro del seguidor. Lo que hay que determinar es la altura de los extremos del seguidor en cualquier momento. Dado el tipo de movimiento que realiza el seguidor, mantenindose en todo momento perpendicular a los rayos del sol, cuando el seguidor est inclinado los extremos 1 y 4 se mantendrn siempre a una altura inferior que le de los extremos 2 y 3. Por lo tanto, excepto en el caso en que el seguidor est totalmente paralelo al suelo o lo que es lo mismo, totalmente horizontal (bastante improbable), la altura de los extremos 1 y 4 ser inferior a la de la columna del seguidor y la altura de los extremos 2 y 3, superior. Para el clculo de estos datos ser necesario conocer tanto la altura de la columna del seguidor como la altura de la parrilla de los mdulos y el valor del ngulo cenital:

25

Z L1 = Z L 4 = h

altura * sen( ) 2 altura * sen( ) 2

Z L 2 = Z L3 = h +

Dado que los cuatro extremos del seguidor genrico ya estn totalmente definidos para los ejes locales y que su adaptacin a los ejes globales es inmediata a travs del Azimut, la obtencin del primero de los planos necesario para el clculo de la sombra ya queda resuelto.

3.3.1.3 Proyeccin de la sombra Una vez que las coordenadas de los extremos ya son conocidas en todo momento, se puede proceder a calcular la proyeccin de la sombra de dichos extremos. La definicin de estos datos permitir, ocupa; el clculo de la sombra. Como ya se ha comentado en el captulo 1, en un instante en el que el Sol se encuentra en una posicin definida por su azimut y su altura, la longitud sobre el suelo horizontal de la sombra de un objeto de altura h ser: finalmente, obtener las ecuaciones de los dos planos que quedaban por calcular en la actividad que nos

l=

h tan( )

Esta longitud est calculada sobre el eje y local. Concretamente, dado que el sol se encuentra en todo momento situado en el eje y positivo, esta longitud ser siempre negativa en el eje y local. De lo expuesto se deduce que la sombra slo afectar a la coordenada y local de los extremos, quedando de la siguiente manera:

y L1 = y L 4 = y L 2 = y L3

altura cos d1 2 altura = cos d 2 2

26

Donde d1 y d2 corresponde al valor de la longitud de la sombra. Para el clculo de estas longitudes habr que utilizar la altura de los extremos del panel; es decir, la coordenada z correspondiente a cada extremo:

d1 = h1 / tan d 2 = h2 / tan

De tal manera que:

h1 = Z L1 = Z L 4 = h

altura * sen( ) 2 altura * sen( ) 2

h2 = Z L 2 = Z L3 = h +

Concluido el clculo de las coordenadas de la sombra de los extremos del seguidor en ejes locales, al igual que suceda con las coordenadas de dichos extremos, la proyeccin de stas sobre los ejes globales es inmediata sabiendo el azimut solar. 3.3.1.4 Calculo de sombra sobre un seguidor genrico. Finalmente, para definir los planos cuya interseccin ser la sombra proyectada de un seguidor sobre otro, solo queda decidir en cada ocasin cul de las aristas laterales ser la que haya que tener en cuenta. La solucin planteada es la siguiente: A un seguidor cualquiera colocado en una huerta solar, le darn sombra todos los seguidores que tenga alrededor. En general, se supondr que el seguidor est totalmente rodeado por otros seguidores. Como el criterio que se utiliza para la colocacin de los mismos es la de ordenarlos en filas y columnas, en el caso de un seguidor que est totalmente rodeado la disposicin ser la siguiente:

27

El seguidor genrico sobre el que se proyectarn las sombras es el del centro, el rayado. La numeracin de la figura es la que se va a seguir en el desarrollo del programa y en este apartado va a utilizarse para definir en cada caso los planos que formarn parte del clculo. Bsicamente, lo que determinar los planos a utilizar ser la posicin de cada uno de los ocho seguidores respecto del central en cada momento; en definitiva, el azimut solar. Se estudia cada caso por separado. Al tratarse de planos infinitos, excepto que los tres sean paralelos, siempre habr intersecciones entre unos y otros; lo cual no significa que un seguidor est proyectando sombra sobre otro. Este hecho implica que debe especificarse en qu momento se considera qu la sombra de uno se est proyectando sobre el otro y en qu momento no. El caso ms fcil es el comn a todos; es decir, el de la interseccin que forman los planos definidos por el seguidor genrico y el de la sombra de la arista superior del panel cuya sombra se est estudiando. Dado que esta arista es siempre la 2-3, los planos sern los formados por los puntos: o o 1 , 2 y 3 globales del seguidor genrico. 2 y 3 del seguidor de la sombra junto con la proyeccin de la sombra del punto 3. Para obtener las coordenadas en ejes globales de los puntos 2 y 3 (y en general de los cuatro extremos del seguidor) basta sumarle a las coordenadas globales de esos mismos puntos del seguidor genrico, la distancia entre el seguidor que estemos estudiando y el anterior; es decir, si

S x y Sy es la

28

separacin entre el seguidor genrico y unos de los ocho seguidores que le rodean, las coordenadas globales de este ltimo sern:

X G = X G genrico + S x YG = YG genrico + S Y
Una vez obtenida la recta interseccin entre estos dos planos, habr que comprobar que se encuentre por encima de la arista inferior del seguidor, en caso contrario la sombra no incidir sobre el seguidor genrico. La altura de la recta interseccin entre los dos planos ser la siguiente:

(v1 Z recta =

w1 * v 2 e * v2 ) * X + (d ) w2 w2 w *v v3 3 2 w2

Donde el valor de la x ser el correspondiente al valor de la coordenada x en ejes globales del extremo 1 del seguidor.

Adems habr que comprobar que la sombra no se encuentra fuera de la superficie del seguidor, bien sea por la izquierda o por la derecha. La forma de obtener las coordenadas de los puntos que definen el plano de la sombra de la arista lateral es idntica a la expuesta anteriormente. Por la forma en la que se va a calcular dicho plano o, ms concretamente, la forma en la que se realiza la eleccin de la arista que define el plano, lo que habr que comprobar es que las coordenadas x e y del punto de interseccin de las dos lneas est dentro de la superficie del seguidor genrico; es decir, dentro de los valores de x y de y de los extremos del seguidor en cada instante:

X G1 > X > X G 4 YG1 > Y > YG 3

29

Cuando la X y la Y estn entre esos valores mximos y mnimos, uno de los ocho seguidores, el que se est calculando, estar proyectando sombra sobre el seguidor genrico. 3.3.1.4.1 Seguidor n1 El seguidor n1 es el que se halla al Suroeste del seguidor que nos sirve de base. Como puede apreciarse en la figura, este seguidor proyectar sombra sobre el seguidor central a partir del medioda solar. Por la manera en la que se han definido los ngulos, despus del medioda solar el azimut ser negativo (a la hora de hablar de la posicin solar, por convencin, el azimut es negativo si se refiere a antes del medioda y positivo despus; sin embargo, dado el funcionamiento de los ngulos en un eje de coordenadas, negativo segn el movimiento de las agujas del reloj, resulta ms prctico utilizar el signo del azimut al contrario para definir la posicin del eje local respecto del global). Adems, para la eleccin de los planos que definen la sombra habr que diferenciar dos posiciones: o o o Azimut>-45 Azimut<-45 arista lateral 3-4 arista lateral 1-2

A partir de Azimut=-90, no proyectar sombra.

3.3.1.4.2 Seguidor n2

Este seguidor se encuentra al Oeste del seguidor que nos sirve de referencia. Como consta en la figura, este seguidor proyectar sombra sobre el seguidor central a partir del medioda solar, cuando el azimut sea negativo. Adems, para la eleccin de los planos que definen la sombra habr que diferenciar dos posiciones: o Azimut>-90 arista lateral 3-4

30

Azimut<-90

arista lateral 1-2

En este caso, la variable

S Y valdr cero.

3.3.1.4.3 Seguidor n3 Este est al Noroeste del seguidor que nos sirve de referencia. El seguidor n3 proyectar sombra sobre el seguidor central a partir del medioda solar, cuando el azimut sea negativo y dada su ubicacin, cuando el azimut sea menor que menos noventa grados. Adems, para la eleccin de los planos que definen la sombra habr que diferenciar dos posiciones: o o o Azimut>-135 Azimut<-135 arista lateral 3-4 arista lateral 1-2

Sin embargo, teniendo en cuenta que el valor mximo del azimut est en torno a los 120, la ltima opcin no es necesario tenerla en cuneta.

3.3.1.4.4 Seguidor n4 El seguidor n4 est justo al norte del seguidor genrico. Por lo general, dado el movimiento del sol que se ha estudiado en captulos anteriores, este seguidor no proyectar sombra sobre el genrico excepto en casos excepcionales en los que ambos seguidores estn muy prximo. Se ha decidido incluirlo por si en algn caso resulta interesante conocer su aportacin. Segn lo comentado, este seguidor cabe la posibilidad de que proyecte sombra por la maana muy temprano o a ltima hora de la tarde y nicamente durante unos pocos das del verano. Por lo tanto habr que diferenciar entre las dos posiciones comentadas, la que se refiere a la maana (azimut positivo) y la de la tarde(azimut negativo).

31

o o

Azimut>0 Azimut<0

arista lateral 3-4 arista lateral 1-2

En este caso, la variable

S X valdr cero.

3.3.1.4.5 Seguidor n5 Este seguidor se encuentra al Noreste del seguidor que nos sirve de referencia. Como consta en la figura, este seguidor proyectar sombra sobre el seguidor central antes del medioda solar, cuando el azimut sea positivo. Los valores relevantes del azimut para el caso del seguidor n5 son similares a los del seguidor n3 teniendo en cuenta que en este ltimo caso el azimut era negativo. Para la eleccin de los planos que definen la sombra habr que diferenciar dos posiciones: o o o Azimut< 135 Azimut>135 arista lateral 1-2 arista lateral 3-4

Como el azimut no superar el valor de 135, bastar con usar como lmite los 90 a partir de los cuales ser cuando este seguidor comience a proyectar sombra.

3.3.1.4.6 Seguidor n6 Este seguidor se encuentra al Este del seguidor que nos sirve de referencia. Como consta en la figura, este seguidor proyectar sombra sobre el seguidor central antes del medioda solar, cuando el azimut sea positivo. Para la eleccin de los planos que definen la sombra habr que diferenciar dos posiciones: o o Azimut>90 Azimut<90 arista lateral 3-4 arista lateral 1-2

En este caso, la variable

S Y valdr cero.
32

3.3.1.4.7 Seguidor n7 Este seguidor se encuentra al Sureste del seguidor que nos sirve de referencia. Como consta en la figura, este seguidor proyectar sombra sobre el seguidor central antes del medioda solar, cuando el azimut sea positivo. Los valores relevantes del azimut para el caso del seguidor n7 son similares a los del seguidor n1 teniendo en cuenta que en este ltimo caso el azimut era negativo. Para la eleccin de los planos que definen la sombra habr que diferenciar dos posiciones: o o Azimut< 45 Azimut>45 arista lateral 1-2 arista lateral 3-4

3.3.1.4.8 Seguidor n8 Este seguidor se encuentra al Sur del seguidor que nos sirve de referencia. La sombra de este seguidor se intersecar con el seguidor genrico en las horas cercanas al medioda solar (tanto azimut positivo como negativo) y especialmente en invierno, cuando la sombra es ms alargada. Para la eleccin de los planos que definen la sombra habr que diferenciar dos posiciones: o o Azimut>0 Azimut<0 arista lateral 3-4 arista lateral 1-2

En este caso, la variable

S X valdr cero.

33

3.3.2 Desarrollo del cdigo

3.3.2.1 Obtencin de datos desde un plano de Autocad Esta parte del programa se ha desarrollado para poder leer los datos de posicin de cada uno de los seguidores segn el plano indicado por el usuario y ordenarlos de tal forma que sean tiles para el resto del programa. Lo que se pretenda es obtener unas matrices con las coordenadas x, y z de cada uno de los seguidores de tal forma que la distribucin de la matriz coincida con la de los seguidores sobre el plano. Es decir, de lo que se trata es de lo siguiente (va a ilustrarse con un ejemplo): En este caso se trata de una distribucin de 6 seguidores dispuestos de la siguiente forma: Puesto que hay 3 coordenadas diferentes en x y otras 3 en y, la matriz resultante ser de 3*3 lo que implica 9 posiciones; por lo tanto, aquellas en las que no hay seguidores sern 0. De esta manera puede asociarse muy fcilmente los datos de la matriz con los seguidores a los que corresponden. A continuacin se ver paso a paso cada una de las instrucciones y su funcin hasta obtener las matrices finales anteriormente comentadas. For cont = 1 To Filas Do linea = Dibujo.readline j=j+1 If j > Filas Then Exit For End If Loop While StrComp(linea, "SEGUIDORES") <> 0 Do linea = Dibujo.readline j=j+1 Loop While StrComp(linea, " 10") <> 0

34

i=i+1 ReDim Preserve xDibujo(i) ReDim Preserve yDibujo(i) ReDim Preserve zDibujo(i) xDibujo(i) = Dibujo.readline Dibujo.skipline yDibujo(i) = Dibujo.readline Dibujo.skipline zDibujo(i) = Dibujo.readline j=j+5

Next Dibujo.Close

Estas instrucciones del cdigo lo que hacen es leer el archivo DXF asociado al plano indicado por el usuario. Para extraer del mismo los datos que necesita, utiliza el nombre de la capa asignada a los seguidores. Por lo tanto, la manera de trabajar es la siguiente:

Busca en el archivo de texto la palabra ENTITIES, momento a partir del cual comienza a dibujar.

Buscar en el archivo de texto la palabra que corresponde al nombre de los seguidores, por ejemplo, SEGUIDORES.

Cuando encuentra la palabra SEGUIDORES, sigue buscando hasta encontrar el 10 que corresponde a la coordenada x.

Una vez encontrado el 10, pasa a la siguiente lnea que corresponde al valor de la coordenada x lo almacena en una matriz llamada xDibujo().

Se salta la siguiente lnea, que ser un 20, y almacena el valor que corresponde a la coordenada y en la matriz yDibujo().

Se salta la siguiente lnea, que ser un 30, y almacena el valor que corresponde a la coordenada z en la matriz zDibujo().

Una vez hecho esto con todo el archivo, cierra el mismo.

35

Para asegurarnos de que lee todas las lneas y evitar errores, en unas instrucciones anteriores, abre el archivo, lee el nmero de filas que tiene y lo vuelve a cerrar. As se obtiene la variable Filas y mediante una instruccin de condicin IF se asegura de no sobrepasar el nmero de filas total.

A continuacin se puede ver una parte del cdigo de texto de DXF que corresponde al dibujo de un seguidor. Aqu pude verse ms fcilmente el funcionamiento del programa. 0 INSERT 5 140 330 1F 100 AcDbEntity 8 SEGUIDORES 62 5 100 AcDbBlockReference 2 A$C3C474A2B 10 100.0000 20 200.0000 30 714.0

Encuentra SEGUIDORES y empieza buscar 10

Encuentra 10 Almacena el valor Se salta la lnea Almacena el valor Se salta la lnea Almacena el valor y vuelve a empezar a buscar SEGUIDORES siempre que no haya llegado al final del archivo.

0 INSERT

En el cdigo DXF los valores 10, 20 y 30 corresponden a las coordenadas x, y y z respectivamente. Las matrices obtenidas de esta forma presentan dos problemas; por un lado, el nmero de veces que el archivo DXF llama a SEGUIDORES es superior al nmero de seguidores que hay en plano, esto se debe a que antes de dibujarlos debe definir la capa, el color de la misma, por lo que habr que extraer de esas matrices los elementos realmente necesarios.

36

Por otro lado, dado que el archivo es de texto, los datos obtenidos son de tipo texto, habr que pasarlos a un formato numrico para poder operar con ellos. Estas dos acciones se llevan a cabo en las siguientes instrucciones donde, como se ve, hace uso del dato introducido por el usuario en referencia al nmero de seguidores que sirve para saber cuales son los elementos necesarios de las matrices.

For posicion = (i - (Numseguidores - 1)) To i ii = ii + 1 zSeg(ii) = Val(zDibujo(posicion)) xSeg(ii) = Val(xDibujo(posicion)) ySeg(ii) = Val(yDibujo(posicion)) Next

La funcin Val(string) devuelve un valor numrico de la cadena(string) que se introduzca. A partir de aqu, lo que trata es de colocar los valores de x, y y z que se han extrado del dibujo en la matriz final que se ha comentado antes; de tal forma que sus posiciones coincidan con las del plano de forma visual. Algo que a priori parece bastante sencillo requiere bastantes operaciones para llevarse a cabo de forma satisfactoria. Parece claro que, para conseguir la coincidencia mencionada, son los valores de la x y la y combinados los que me definirn el lugar de cada dato en la matriz final. A continuacin van a explicarse los pasos que se han llevado a cabo para conseguirlo. Con las instrucciones que vienen a continuacin, lo que se logra es ordenar los datos de las x de mayor a menor:

For j = 1 To Numseguidores compara = 0.1 For i = 1 To Numseguidores If xSeg(i) > compara Then compara = xSeg(i)

37

posicion = i

End If Next ORDENX(j) = compara POSICIONX(j) = posicion xSeg(posicion) = 0 Next Su forma de trabajar es la siguiente: o o Revisa toda la matriz buscando el valor ms alto. Cuando lo encuentra, introduce ese valor en una nueva matriz denominada ORDENX() y lo pone a cero en la matriz original, de forma q pasa a ser el ms pequeo. o Adems, memoriza la posicin que ocupaba ese elemento en la matriz original en una matriz denominada POSICIONX(); de esta manera, ms adelante, se podr relacionar cada valor de x con los de y y z que le correspondan. o Repite esta operacin hasta que todos los elementos de la matriz original sean iguales a cero; momento en el que acaba.

Una vez ordenadas las coordenadas x, se procede a ordenar las coordenadas y. Las instrucciones son muy similares a las anteriores cambiando xSeg(), ORDENX() y POSICIONX() por ySeg(), ORDENY() y POSICIONY() la forma de trabajar es casi idntica. Por lo tanto, en este punto del programa ya tenemos las coordenadas de x y de y de los seguidores ordenadas de mayor a menor. A continuacin se procede a calcular las dimensiones de la matriz final. Para calcular dichas dimensiones se ver cuntos valores diferentes de x y de y hay en las matrices correspondientes. En las instrucciones que siguen se lleva a cabo esta operacin y la forma de operar es la siguiente: . Por lo tanto

38

xSeg() = ORDENX() For j = 1 To Numseguidores If xSeg(j) <> 0 Then compara = xSeg(j) ii = ii + 1 For i = 1 To Numseguidores If xSeg(i) = compara Then xSeg(i) = 0 End If Next End I Next

Utilizando la matriz de elementos ordenados de mayor a menor, coge el primer valor de x de la misma y cuenta 1.

A continuacin compara todos los valores de la matriz con el anterior y pone a cero todos los que son iguales a l.

Una vez revisada toda la matriz, coge el siguiente valor distinto de cero y vuelve a empezar.

o o

Cuando todos los valores de la matriz sean cero finaliza. Al acabar, el valor de ii ser el que nos indique dimensin de la matriz final. la primera

Para obtener la segunda dimensin de dicha matriz, bastar con realizar la misma operacin anterior con la matriz de elementos ordenados de mayor a menor correspondientes a la coordenada y. De aqu obtendremos el valor jj; por lo tanto, la matriz final ser de orden ii*jj. Ahora falta por determinar el lugar que va a de ocupar cada elemento. La opcin que se escogido para realizar esta operacin es la siguiente:

39

Por un lado, asignar el valor de la primera dimensin correspondiente a cada elemento mediante su valor de x de tal forma que los que vayan en la primera fila sern aquellos cuya x corresponda con el valor mayor, los de la segunda fila aquellos con la x inmediatamente inferior al valor mayor as hasta llegar al valor ms pequeo.

Por otro lado, asignar el valor de la segunda dimensin repitiendo la operacin anterior con la y.

Por ltimo, utilizando lo anterior y relacionando los datos a travs de las matrices de posicin ya almacenadas, hacer tres matrices de dimensiones ii*jj, una para cada coordenada, colocando cada elemento en el lugar que le corresponde.

A continuacin se explican cada uno de los procedimientos segn el cdigo correspondiente:

For i = 1 To Numseguidores If xSeg(i) <> 0 Then b=b+1 compara = xSeg(i) For j = 1 To Numseguidores If xSeg(j) = compara Then a = POSICIONX(j) posx(a) = b xSeg(j) = 0

End If Next End If

En este primer procedimiento lo que se hace es asignar a cada uno de los elementos, a travs de la x, el subndice de la primera dimensin que le corresponde. Funciona de la siguiente manera.

40

Utilizando nuevamente la matriz con los elementos ordenados, coge el primer elemento y le asigna el subndice 1. Esta asignacin la realiza a travs de la posicin que ocupaba en la matriz original.

Compara el resto de elementos de la matriz con ese primero y a los que son iguales a l les asigna el subndice 1 y los pone a 0.

Cuando no hay ms elementos iguales a ese primero, pasa al siguiente elemento distinto de cero, corresponder con el de valor inmediatamente inferior al primero y repite desde el segundo paso.

En el momento en el que todos los elementos que quedan sean igual a cero, acaba el procedimiento.

Al acabar este procedimiento se habr creado una nueva matriz que relaciona las posiciones de los elementos en las matrices originales (las obtenidas del archivo de Autocad) con los subndices de la primera dimensin que les correspondan. Para hallar el subndice de la segunda dimensin, el procedimiento ser muy similar al anterior utilizando las coordenadas y en lugar de las x. Finalmente, lo nico que queda por hacer es crear tres matrices de dimensiones ii*jj colocando en cada una de las posiciones las coordenadas correspondientes al seguidor que en el plano ocupa ese lugar. El procedimiento es el siguiente:

For i = 1 To Numseguidores For j = 1 To Numseguidores If POSICIONX(j) = i Then a = posx(i) b = posy(i) c = POSICIONX(j) PoscSegX1(a, b) = XSEGUIDOR(c) PoscSegY1(a, b) = YSEGUIDOR(c) PoscSegZ1(a, b) = zSeg(c) End If

41

Next Next

Para cada posicin de la matriz inicial, coge el subndice de la primera dimensin(a) que la matriz pertinente le indica, coge el subndice de la segunda dimensin(b) que la matriz pertinente le indica y coloca los elementos x, y y z pertenecientes a dicha posicin y los coloca en otra matriz en el lugar(a,b).

Finalmente, se realiza un ltimo retoque a las matrices finales con el nico objeto de facilitar su uso posteriormente. Como los datos se han ordenado de mayor a menor, la posicin (1,1) la ocupar el seguidor ms alejado del origen; es decir, el que tenga los valores ms altos de x y de y. Resulta mucho ms til que sea al contrario, que el seguidor que ocupe la posicin (1,1) sea aquel cuyos x e y sean los menores. Este ltimo paso lo realiza el siguiente procedimiento:

For a = ii To 1 Step -1 i=i+1 For b = jj To 1 Step -1 j=j+1 PoscSegX(i, j) = PoscSegX1(a, b) PoscSegY(i, j) = PoscSegY1(a, b) PoscSegZ(i, j) = PoscSegZ1(a, b) Next j=0 Next

3.3.2.2 Procesamiento de los datos En el procesamiento de datos se llevan a cabo todas las operaciones necesarias para, a partir de los datos introducidos por el usuario obtener los resultados finales; aquellos que aparecern en la tabla de Excel.

42

Hasta el momento lo que se ha hecho ha sido adaptar los datos introducidos de tal manera que puedan ser empleados en esta seccin pero no se ha operado con ellos. 3.3.2.2.1 El movimiento del Sol Puesto que la finalidad de este programa es obtener las sombras que proyectan unos seguidores sobre otros en una huerta solar, el primer paso ser estudiar el movimiento del Sol. Lo que se pretende es conocer la posicin del Sol respecto de cada uno de los seguidores en cada momento; de esta forma podremos saber cada uno de ellos la sombra que proyecta y, por lo tanto, la que reciben los dems. 3.3.2.2.1.1 La Latitud La Latitud es el nico dato introducido por el usuario que queda por adaptar, pero su adaptacin es ms directa que las anteriores. Como ya se ha comentado anteriormente, este dato es

introducido a travs de la Comunidad Autnoma en la que se ubica la instalacin. Obviamente este no es un dato numrico con el que pueda operarse pero s tiene uno asociado. sta asociacin se realiza mediante un intercambio dinmico de datos entre Visual Basic y Excel. Se parte de una tabla realizada en Excel en la que para cada Comunidad Autnoma se encuentra el correspondiente valor de la Latitud; de esta manera, cuando al programa se le introduce el dato de la Comunidad, Visual Basic acude a la tabla correspondiente de Excel y compara el dato introducido con los de la tabla. Una vez que encuentra el que coincide recoge el valor de la latitud de tal forma que ya puede ser usado por el programa. Para llevar a acabo este intercambio de datos, Visual Basic debe abrir el archivo de Excel en el que se encuentra la tabla que relaciona cada Comunidad Autnoma con la Latitud que le corresponde. Dicha tabla coincide con la siguiente:

Altitud(m) Alava 542

Latitud() 42,9

Longitud() 2.7W

43

Albacete Alicante Almera Asturias Avila Badajoz Baleares Barcelona Burgos Cceres Cdiz Cantabria Castelln Ceuta Ciudad Real Crdoba La Corua Cuenca Gerona Granada Guadalajara Guipuzcoa Huelva Huesca Jan Len Lrida Lugo Madrid Mlaga Melilla Murcia Navarra Orense Palencia Las Palmas Pontevedra La Rioja Salamanca Sta. Cruz de Tenerife Segovia Sevilla Soria Tarragona Teruel Toledo Valencia Valladolid Vizcaya Zamora Zaragoza

686 7 65 232 1126 186 28 95 929 459 28 69 27 206 628 128 54 949 95 775 685 181 4 488 586 908 323 465 667 40 47 42 449 139 734 6 19 380 803 37 1002 30 1063 60 915 540 10 694 32 649 200

39 38,4 36,9 43,4 40,7 38,9 39,6 41,1 42,3 39,5 36,5 43,5 40 35,9 39 37,9 43,4 40,1 42 37,2 40,6 43,3 37,3 42,1 37,8 42,6 41,7 43 40,4 36,7 35,3 38 42,8 42,3 42 28,2 42,4 42,5 41 28,5 41 37,4 41,8 41,1 40,4 39,9 39,5 41,7 43,3 41,5 41,7

1.8W 0.5W 2.4W 5.8W 4.9W 7.0W 2.6E 2.2E 3.7W 6.4W 6.3W 3.8W 0 5.3W 3.9W 4.8W 8.4W 2.1W 2.7E 3.7W 3.2W 2.0W 6.9W 0.4W 3.8W 5.6W 1.2E 7.6W 3.7W 4.4W 3.0W 1.1W 1.6W 7.8W 4.5W 15.4W 8.6W 2.4W 5.6W 16.2 4.1W 6.0W 2.5W 1.2E 1.1W 4.0W 0.4W 4.7W 3.0W 5.7W 0.9W

44

El procedimiento asociado siguiente:

a dicho intercambio de datos es el

For Fila = 72 To 123 Latitud.LinkMode = 0 Latitud.LinkTopic = "Excel|Hoja1" Latitud.LinkItem = "F" & Fila & "C1" Latitud.LinkMode = 1 ColumnaA = "F" & CStr(Fila) & "C1" Latitud.LinkItem = ColumnaA

If Left(Latitud.Text, Len(cmbComunidad)) = cmbComunidad Then Latitud.LinkMode = 0 Latitud.LinkTopic = "Excel|Hoja1" Latitud.LinkItem = "F" & Fila & "C3" Latitud.LinkMode = 1 ColumnaA = "F" & CStr(Fila) & "C3" Latitud.LinkItem = ColumnaA Exit For End If Next L = (Latitud.Text) * PI / 180

Donde el primer bloque busca en la primera columna, la correspondiente a las Comunidades Autnomas, la que coincide con la seleccionada; mientras que en el segundo bloque, una vez encontrada la Comunidad deseada, Obtiene de la tercera columna el valor de la Latitud que le corresponde y la asigna a una caja de texto. Es a travs de dicho texto que se le asigna a la variable L. Puede comprobarse como, al tratarse de un valor que viene dado en grados, al asignarlo a la variable L, se hace uso de radianes.

180

para pasarlo a

3.3.2.2.1.2

La posicin del sol Una vez obtenida la latitud, se puede conocer la posicin del Sol para cada da del ao en cualquier momento del da. Dada la finalidad

45

de estos clculos se ha obtenido la posicin del Sol para cada da del ao y para cada hora del da; con intervalos de media hora.

Las expresiones utilizadas con este fin son las siguientes:

= 23,45 sen (0,973 N 77,84)


sen = cos L cos cos + senLsen
sen = cos sen / cos cos = ( senLsen sen ) /(cos L cos )

= 90
Donde:

= Declinacin solar

N = Nmero de orden del da en el ao( N=1 para el 1 de enero, N=365 para el 31 de diciembre)

= Altura solar
L= Latitud del lugar

= ngulo horario

46

= Azimut solar

= ngulo cenital

El primer detalle a tener en cuenta a la hora de realizar el clculo de estas variables en Visual Basic es que ste trabaja en radianes por lo que ser necesario adaptar las expresiones anteriores. En el caso de la declinacin solar, primero se calcula 0,973*N77,84. Este dato, tal y como est calculado, se obtiene en grados centgrados por lo que habr que pasarlo a radianes. Adems, tal y como se indica, el factor por el que debe multiplicarse para obtener la declinacin solar tambin est en grados. Una vez realizados estas operaciones puede procederse al clculo de la declinacin solar, que como puede apreciarse nicamente depende del da del ao. Para poder obtener el resto de variables es necesario realizar otros ajustes. Por un lado, la latitud est, nuevamente, en grados centgrados por lo que se debe ajustar a radianes. El valor del ngulo horario en grados coincide con el nmero de horas de diferencia entre el instante considerado y el medioda solar, multiplicado por 15 de tal forma que el ngulo horario sea positivo por la maana. Este valor tambin debe ser adaptado a radianes. Por ltimo, para el caso del ngulo cenital, dado que es el complemento de la altura solar, habr que sustituir los 90 por su equivalente en radianes:

/2

El clculo de estos datos se realiza mediante dos funciones: CalculoAngulos1 y CalculoAngulos2. La llamada a estas dos funciones

47

debe realizarse indicando como variables tanto el da como la hora del da de la que se quiere obtener los datos. Por definicin, la Altura solar es el ngulo que forma el rayo (recta que va desde el centro del disco solar hasta el punto considerado) con el plano horizontal que pasa por el punto de observacin. Dada la definicin y como puede observarse en la figura, la Altura solar en ningn momento ser mayor a 90, dado que su posicin respecto de los ejes Norte-Sur Este-Oeste vendr definido por el Azimut solar por lo que en este caso no ser necesario hacer ms consideraciones. Como se ha comentado, es el Azimut solar el que define la posicin del sol respecto a los dos ejes por lo que es necesario tener en cuenta que puede hallarse en cualquiera de los cuatro cuadrantes. Es por esta razn que para su clculo se utilizan dos ecuaciones, una para el seno y otra para el coseno de forma que quede completamente definido. Para obtener el dato del Azimut se procede de la siguiente manera: o o Realizar el clculo del seno y el coseno del Azimut solar. Si: Seno >0 , Coseno >0 -ngulo del 1 cuadrante, clculo

del valor del Azimut solar mediante el ArcoSeno o ArcoCoseno. o Si: Seno >0 , Coseno < 0 -ngulo del 2 cuadrante, clculo

del valor del Azimut solar mediante el ArcoCoseno. o Si: Seno <0 , Coseno >0 -ngulo del 4 cuadrante, clculo

del valor del Azimut solar mediante el ArcoSeno. o Si: Seno <o , Coseno <0 -lo que se ha resuelto ngulo del 3 cuadrante, no es calcular el valor del ngulo

posible realizar el clculo del Azimut solar de forma directa por correspondiente al 4 cuadrante mediante el ArcoSeno y restrselo a -180.

48

Una vez obtenidas las variables referentes a la posicin del sol para cada hora del da y para cada da del ao y haciendo uso de los valores introducidos por el usuario referentes al tamao del seguidor, base y altura de la parrilla de mdulos, altura de la columna y tamao del terreno en el que va a instalarse la huerta solar, se puede proceder a realizar los clculos necesarios para la obtencin de las separaciones ptimas entre filas y columnas de seguidores. En lo sucesivo, cuando sea necesario utilizar estos datos nos referiremos a ellos de la siguiente manera: o o o Base: base de la parrilla de mdulos Altura: altura de la parrilla de mdulos h: altura de la columna

A continuacin se ver el extracto de cdigo perteneciente a cada una de las funciones. Por un lado la funcin CalculoAngulos1 permite calcular la altura solar para el da y la hora del da requeridos de la siguiente forma:

Function CalculoAngulos1(N As Integer, Hora As Single)

XD = (0.973 * N - 77.84) * PI / 180 DecliRad(N) = (23.45 * PI / 180) * Sin(XD) wGrad = Abs(12 - Hora) * 15 w = wGrad * PI / 180 Desviacion = 0

49

X1 = Cos(L) * Cos(DecliRad(N)) * Cos(w) + Sin(L) * Sin(DecliRad(N)) If X1 < 0 Then CalculoAngulos1 = 0 Exit Function Else If -X1 * X1 + 1 = 0 Then AlturaRad(N, Hora) = PI / 2 Else AlturaRad(N, Hora) = Atn(X1 / Sqr(-X1 * X1 + 1)) 'Arcoseno End If End If CalculoAngulos1 = AlturaRad(N, Hora) End Function

Como ya se coment anteriormente, el primer clculo que debe realizarse es el de la Declinacin solar que nicamente depende del da del ao para el que se quiera calcular. A continuacin, se cambia la hora por su homlogo en grados como ya se explic anteriormente. A lo largo del cdigo tambin puede apreciarse que se lleva a cabo siempre que es necesario la conversin de grados a radianes. Por ltimo cabe comentar que Visual Basic desconoce las funciones ArcoSeno y ArcoCoseno pero s permite realizar la funcin ArcoTangente. Es por eso que a travs de esta ltima se calcula el valor de las dos anteriores, segn las frmulas:

ArcoSeno( x) = ArcoTangente(

x ( x * x) + 1

ArcoCoseno( x) = ArcoTangente(

x ( x * x) + 1

) + 2 * Ar cot angente(1)

Por otro lado, la funcin CalculoAngulos2 permite calcular el Azimut solar para el da y la hora del da requeridos de la siguiente manera:

Function CalculoAngulos2(N As Integer, Hora As Single)

50

Altura = CalculoAngulos1(N, Hora) If Altura = 0 Then CalculoAngulos2 = 0 Exit Function Else X2 = Cos(DecliRad(N)) * Sin(w) / Cos(Altura) X3 = (Sin(L) * Sin(Altura) - Sin(DecliRad(N))) / (Cos(L) * Cos(Altura)) If X2 >= 0 Then If X3 > 0 Then '1er cuadrante If X2 = 1 Then AzimutRad(N, Hora) = PI / 2 Else AzimutRad(N, Hora) = Atn(X2 / Sqr(-X2 * X2 + 1)) 'Arcoseno End If Else '2 cuadrante AzimutRad(N, Hora) = Atn(-X3 / Sqr(-X3 * X3 + 1)) + 2 * Atn(1) 'Arcocoseno End If ElseIf X3 > 0 Then '4 Cuadrante AzimutRad(N, Hora) = Atn(X2 / Sqr(-X2 * X2 + 1)) 'Arcoseno Else '3 cuadrante If X2 = -1 Then AzimutRad(N, Hora) = -PI / 2 Else AzimutRad(N, Hora) = Atn(X2 / Sqr(-X2 * X2 + 1)) - (PI / 2) 'Arcoseno End If End If End If

If Hora <= 12 Then CalculoAngulos2 = AzimutRad(N, Hora) Else CalculoAngulos2 = -AzimutRad(N, Hora) End If

En esta funcin hay varios aspectos a comentar. Para empezar, para calcular el Azimut solar es necesario conocer la Altura solar por lo que, al principio de la funcin se hace una llamada a la funcin correspondiente a la Altura que es CalculoAngulos1. Aqu puede apreciarse como para efectuar dicha llamada se deben adjuntar los datos de da y hora del da para los que se quiere conocer la Altura.

51

Una vez obtenido el valor de la altura, comprueba que ste no sea igual a cero; es decir, que no sea por la noche en cuyo caso no se har ningn clculo puesto que no habr sombras. Siempre que la Altura sea diferente de cero, se proceder a realizar los clculos propios del Azimut para lo cual se proceder teniendo en cuenta lo expuesto con anterioridad sobre los diferentes cuadrantes. Puede observarse como lo primero que hace es calcular el seno y el coseno del mismo ngulo con el fin de poderlo situar con exactitud y finalmente, dependiendo del cuadrante que le corresponda, se procede a su clculo. Como ltimo apunte, cabe resaltar que tal y como est hecho el clculo el Azimut siempre saldr positivo, independientemente de que se calcule para antes o despus de las 12 del medioda; momento en el que el Azimut es igual a cero, dado que coincide con el eje NorteSur, y por lo tanto implica un cambio de signo. Para corregir este defecto, se le adjunta un signo positivo o negativo dependiendo de la hora a la que se realice el clculo.

3.3.2.2.2 Posicin del seguidor Para realizar el clculo de la sombra de un seguidor que incide sobre otro es imprescindible conocer la posicin de cada uno de los seguidores. Puesto que en la instalacin todos los seguidores sern iguales, bastar saber las coordenadas de uno genrico, que tomaremos como origen, y mediante las distancias entre seguidores podremos determinar las coordenadas de los extremos de cada uno de los seguidores. En el clculo de las coordenadas de los extremos de los seguidores se utilizan los datos de entrada correspondientes a las dimensiones del seguidor: Base, Altura, h y el dato de entrada correspondiente al ngulo mximo de inclinacin. El proceso de clculo es el siguiente: primero calcular las

coordenadas locales del seguidor, segundo convertirlas a globales.

52

Las coordenadas locales se calculan respecto a unos ejes solidarios al seguidor que giran con respecto a los ejes fijos definidos por las lneas Norte-Sur y Este-Oeste, un valor que equivale al azimut solar. Por lo tanto, la relacin entre los ejes locales y los globales los define el Azimut solar. 3.3.2.2.2.1 Coordenadas locales del seguidor Como ya se ha comentado, las coordenadas correspondientes a las cuatro aristas del seguidor se calculan para un seguidor genrico y se supone el origen de coordenadas en la base del seguidor de tal forma que cuando el Azimut solar sea igual a cero y el seguidor est totalmente paralelo al suelo, el seguidor, visto desde arriba, quede de la siguiente manera. Teniendo en cuenta la figura anterior es fcil observar que la proyeccin sobre el eje x solidario al seguidor ser siempre la mitad del valor de la base con el signo que le corresponda. En el caso del eje y solidario al seguidor, el valor de la proyeccin depender de la inclinacin del seguidor y, por lo tanto de la Altura solar. Adems, para cada una de los cuatro extremos del seguidor, el signo de la proyeccin sobre esos mismos ejes ser siempre el mismo. Por lo tanto, las ecuaciones de las proyecciones de los cuatro extremos del seguidor sobre los ejes solidarios al mismo sern de la forma:

base 2 base x L3 = x L 4 = 2 altura cos y L1 = y L 4 = 2 altura cos y L 2 = y L3 = 2 x L1 = x L 2 =


Finalmente, queda por ver el valor de la proyeccin sobre el eje z. Este valor ser el mismo tanto en ejes locales como en globales puesto que el eje z no vara. La proyeccin de cada uno de los cuatro extremos sobre el eje z depende de la altura de la columna del seguidor, h, la altura de la

53

parrilla, altura, y el ngulo de inclinacin del seguidor de tal manera que:

Z L1 = Z L 4 = h

altura * cos( AlturaSeg ) 2 altura * cos( AlturaSeg ) 2

Z L 2 = Z L3 = h +

En el programa, el clculo de estas tres coordenadas para cada extremo de seguidor se realiza mediante tres funciones que son las siguientes:

Function XLSeguidor(Punto As Integer) Select Case Punto Case 1, 2 XL = BaseP / 2 Case 3, 4 XL = -BaseP / 2 End Select XLSeguidor = XL End Function La llamada a esta funcin, a la que le corresponde el clculo de la coordenada x local, debe realizarse indicando el nmero del extremo del que quiere saberse dicha coordenada. Lo que esta funcin hace es ver cul es el punto para el que se le ha pedido la informacin y, segn cual sea realizar una operacin u otra; la que corresponda. Finalmente devuelve el valor requerido.

Function YLSeguidor(N As Integer, Hora As Single, Punto As Integer, Sombra As Integer, h As Single, AngMax As Single) Altura = CalculoAngulos1(N, Hora) If Altura < AngMax Then AlturaSeg = AngMax Else AlturaSeg = Altura End If AnguloNormalSeg = (PI / 2) - AlturaSeg If Sombra = 0 Then

54

Select Case Punto Case 1, 4 YL = AlturaP * Cos(AnguloNormalSeg) / 2 Case 2, 3 YL = -(AlturaP * Cos(AnguloNormalSeg) / 2) End Select ElseIf Sombra = 1 Then Select Case Punto Case 1, 4 YL = (AlturaP / 2) - DistanciaSombra1(N, Hora, h, AngMax) * Cos(AnguloNormalSeg) Case 2, 3 YL = -((AlturaP / 2) + DistanciaSombra2(N, Hora, h, AngMax)) * Cos(AnguloNormalSeg) End Select End If YLSeguidor = YL

End Function

Esta funcin, la correspondiente al clculo de la coordenada y, es algo ms complicada que la anterior. En primer lugar, la llamada a la misma ha de realizarse indicando muchas ms variables para que el clculo pueda llevarse a cabo. Por supuesto, debe indicarse el nmero del extremo para el que se desea obtener la informacin. Adems, segn lo expuesto anteriormente, el valor de la proyeccin sobre el eje y depende de otras variables como la Altura solar y el ngulo mximo de inclinacin. Debido a que necesita calcular la Altura solar es por lo que deben indicrsele el da y la hora del da en el que se est trabajando. Tambin hay dos variables que se refieren al clculo de la sombra que son la denominada Sombra, que ser 1 o 0 segn si se quiere calcular la sombra o no, y la h. Todo lo referente a estas dos variables y el papel que juegan se explicar en el apartado dedicado a las Sombras. El procedimiento que sigue esta funcin es el siguiente: o Calcular el valor de la Altura solar en ese instante para lo cual realiza una llamada a la funcin correspondiente, CalculoAngulos1.

55

Comprueba que la Altura solar sea mayor que el ngulo de inclinacin del seguidor. En caso de que no lo sea, el valor de la Altura del seguidor ser igual al ngulo de inclinacin mximo; sino, ser igual a la Altura solar.

o o

Calcula el Angulo Normal del seguidor. Comprueba si debe calcular el valor de la sombra o no (El proceso que sigue en caso de que calcule la sombra se expondr en el apartado de sombras).

En caso de que sea que no, segn cul sea el punto para el que debe realizar la operacin, hace una operacin u otra

Devuelve el valor requerido.

Function ZLSeguidor(N As Integer, Hora As Single, Punto As Integer, h As Single) Altura = CalculoAngulos1(N, Hora) If Altura < AngMax Then AlturaSeg = AngMax Else AlturaSeg = Altura End If Select Case Punto Case 1, 4 ZL = h - (AlturaP * Cos(AlturaSeg) / 2) Case 2, 3 ZL = h + (AlturaP * Cos(AlturaSeg) / 2)

End Select ZLSeguidor = ZL End Function

56

Esta ltima funcin es la que se encarga de calcular la coordenada z de cada uno de los extremos del seguidor. Las variables que necesita para realizar su tarea son las mismas que las de la funcin anterior exceptuando las relacionadas con la sombra. La dinmica de trabajo de la funcin ZLSeguidor() es la siguiente: o Calcular el valor de la Altura solar en ese instante para lo cual realiza una llamada a la funcin correspondiente, CalculoAngulos1. o Comprueba que la Altura solar sea mayor que el ngulo de inclinacin del seguidor. En caso de que no lo sea, el valor de la Altura del seguidor ser igual al ngulo de inclinacin mximo; sino, ser igual a la Altura solar. o Dependiendo del punto para el que deba realizar el clculo, realiza una operacin u otra. o Devuelve el valor requerido.

3.3.2.2.2.2

Coordenadas globales del seguidor Para hallar las coordenadas globales del seguidor, basta proyectar las coordenadas locales ya calculadas sobre los ejes fijos segn la relacin:

xG = x L cos y L sen y G = x L sen + y L cos


Para realizar esta transformacin se ha definido una funcin denominada LocalesAGlobales() que es de la siguiente forma:

Function LocalesAGlobales(N As Integer, Hora As Single, Coord As Integer, Punto As Integer, Sombra As Integer, h As Single, AngMax As Single) Azimut = CalculoAngulos2(N, Hora) If Coord = 1 Then

57

XL = XLSeguidor(Punto) YL = YLSeguidor(N, Hora, Punto, Sombra, h, AngMax) G = XL * Cos(Azimut) - YL * Sin(Azimut) ElseIf Coord = 2 Then XL = XLSeguidor(Punto) YL = YLSeguidor(N, Hora, Punto, Sombra, h, AngMax) G = XL * Sin(Azimut) + YL * Cos(Azimut) Else G = ZLSeguidor(N, Hora, Punto, h) End If LocalesAGlobales = G End Function

La razn por la que cada vez las funciones dependen de mayor nmero de variables es que segn avanza el desarrollo del programa, cada una de las funciones, a su vez, realiza llamadas a otras funciones y cada una de estas funciones requieren de sus propias variables. Esta funcin distingue entre las coordenadas x, y y z globales para realizar sus clculos. A su vez, el clculo de x o y depender de los valores de x e y locales, que debern ser calculados. Por su parte, en el caso de que la coordenada global a calcular sea z, sta ser igual a la z local; segn lo expuesto anteriormente. El funcionamiento de esta funcin es el siguiente: o o Calcular el Azimut solar. Comprobar qu coordenada global queremos

obtener: x, y o z. o o o Segn sea x o y, realizar las operaciones pertinentes. En el caso de z, calcular el valor de la z local. Devuelve el valor requerido.

58

3.3.2.2.3 Clculo de la sombra Puesto que el programa ya est en condiciones de calcular las variables relacionadas con la posicin del sol en cada momento, puede pasar a calcular la sombra que proyecta cada seguidor en cada uno de esos momentos. Para llevar a cabo estos clculos es indispensable utilizar los datos referentes a las dimensiones del seguidor. Principalmente habr que saber la altura de las cuatro esquinas del seguidor en cada momento para lo cual habr que tener en cuenta la inclinacin del mismo. Una vez obtenidas las longitudes de sombra, se puede obtener la proyeccin de dicha sombra tanto sobre la lnea Norte-Sur como sobre la lnea Este-Oeste. Estas dos lneas van a definir los ejes de coordenadas x e y.

3.3.2.2.3.1

Longitud de la sombra En un instante en que el Sol se encuentra en una posicin definida por su azimut

y su altura , la longitud sobre el suelo horizontal

de la sombra de un objeto de altura h ser h/tan , y la proyeccin de dicha sombra sobre la lnea Norte-Sur, trazada en el plano horizontal (meridiano del lugar), valdr:

d = h cos / tan

Utilizando esta expresin es posible hallar la longitud sobre el suelo horizontal de la sombra de los cuatro extremos del seguidor en cada momento para lo cual se debe tener en cuenta el ngulo de inclinacin del seguidor. Dado que se trata de seguidores de dos ejes, stos van a mantenerse en todo momento perpendiculares a los rayos del sol lo que implica que cuando el ngulo cenital valga ngulo de inclinacin del seguidor con la horizontal valdr

el

Mediante el ngulo de inclinacin del seguidor, en cada momento se obtendrn dos alturas diferentes a tener en cuenta; las

59

correspondientes a la arista superior e inferior del seguidor que sern respectivamente:

h1 = h

altura * sen( ) 2 altura * sen( ) 2

h2 = h +

Por lo tanto se obtendrn dos longitudes sobre el suelo horizontal correspondientes a la sombra de la arista superior e inferior del seguidor:

d1 = h1 / tan d 2 = h2 / tan

El clculo de estas dos distancias, o longitudes de sombra, se realizan mediante dos funciones, una y para cada distancia, denominadas respectivamente. DistanciaSombra1 DistanciaSombra2

Function DistanciaSombra1(N As Integer, Hora As Single, h As Single, AngMax As Single) Altura = CalculoAngulos1(N, Hora) If Altura < AngMax Then AlturaSeg = AngMax Else AlturaSeg = Altura End If If Altura = 0 Then d1(N, Hora) = 0 Else h1(N, Hora) = h - (AlturaP * Sin((PI / 2) - AlturaSeg) / 2) d1(N, Hora) = h1(N, Hora) / Tan(Altura) End If DistanciaSombra1 = d1(N, Hora)

60

End Function Function DistanciaSombra2(N As Integer, Hora As Single, h As Single, AngMax As Single) Altura = CalculoAngulos1(N, Hora) If Altura < AngMax Then AlturaSeg = AngMax Else AlturaSeg = Altura End If If Altura = 0 Then d2(N, Hora) = 0 Else h2(N, Hora) = h + (AlturaP * Sin((PI / 2) - AlturaSeg) / 2) d2(N, Hora) = h2(N, Hora) / Tan(Altura) End If DistanciaSombra2 = d2(N, Hora) End Function Lo que diferencia ambas funciones es la altura de los puntos para los que se est calculando la longitud de la sombra; puesto que la primera se refiere a la arista superior del seguidor y la segunda a la arista inferior. Para calcular dichas longitudes, como ya se ha comentado, hay que tener en cuenta la inclinacin del seguidor. Segn lo expuesto, al tratarse de seguidores con seguimiento a dos ejes, stos se mantienen siempre perpendiculares a los rayos del sol; sin embargo, hay que tener en cuenta una limitacin del sistema: los seguidores tienen un ngulo mximo de inclinacin, a partir del cual dejarn de seguir al sol. Es por ello que resulta necesario distinguir entre dos ngulos diferentes cuando hablemos de la Altura; por un lado la Altura solar, calculada segn la funcin correspondiente, y por otro lado el ngulo Altura del seguidor que coincidir con la Altura solar siempre y cuando ste sea menor que el ngulo mximo de inclinacin del seguidor. Cuando sea menor, el ngulo Altura del seguidor ser el ngulo mximo de inclinacin del mismo. Este ngulo mximo de inclinacin es un dato de entrada que debe tenerse en cuenta a la hora de calcular la altura de las aristas en cada momento.

61

3.3.2.2.3.2

Coordenadas locales de la sombra Primero debemos definir el lugar exacto que los cuatro extremos del seguidor ocupan respecto a los ejes solidarios al mismo y sumarle la longitud de la sombra calculada. El origen de coordenadas se encuentra en la base del seguidor. Los ejes x e y globales o fijos coinciden con las lneas Norte-Sur y Este-Oeste como ya se ha comentado; el sentido positivo del eje x coincide con el Este y el del eje y con el Sur. Por su parte los ejes solaces o solidarios al seguidor son tales que cuando el Azimut sea cero, coincidan con los ejes globales. Por lo tanto, los cuatro extremos de la sombra del seguidor en ejes locales quedan:

base 2 base x L3 = x L 4 = 2 altura y L1 = y L 4 = cos d1 2 altura y L 2 = y L3 = cos d 2 2 x L1 = x L 2 =


De estas ecuaciones se deduce que en ejes locales la nica

coordenada que vara entre los extremos del seguidor y los extremos de la sombra del seguidor es la y. Por lo tanto, el clculo de las coordenadas locales se realiza en tres funciones diferentes; una para el clculo de la x, otra para el clculo de la y y por ltimo, una para el clculo de la z. Estas funciones se denominan XLSeguidor, YLSeguidor y ZLSeguidor respectivamente. Las funciones XLSeguidor y ZlSeguidor ya han sido explicadas en el apartado referente a las coordenadas del seguidor (Apartado 1.3.2.1). Estas dos funciones sirven igualmente en el caso de las sombras puesto que en coordenadas locales, lo nico que vara es el valor de la y. Dentro de la funcin para el clculo de la y, YLSeguidor, hay dos partes; la que se refiere al calculo de la coordenada y del seguidor y aquella para el clculo de la coordenada y de la sombra del seguidor.

62

En el apartado del clculo de las coordenadas del seguidores se ha explicado el funcionamiento de esta funcin a excepcin de la parte que concierne al clculo de la sombra; es decir, cuando la variable Sombra tiene valor 1. A continuacin se reproduce sta ltima parte con el fin de que la explicacin pueda ser ms clara:

ElseIf Sombra = 1 Then Select Case Punto Case 1, 4 YL = (AlturaP / 2) - DistanciaSombra1(N, Hora, h, AngMax) * Cos(AnguloNormalSeg) Case 2, 3 YL = -((AlturaP / 2) + DistanciaSombra2(N, Hora, h, AngMax)) * Cos(AnguloNormalSeg) End Select End If

El funcionamiento es muy similar a los anteriores, segn el extremo del que se quiera saber el valor, realiza las operaciones necesarias. La diferencia es que en este caso utiliza las funciones DistanciaSombra1() y DistanciaSombra2(). Es por esta razn que requiere las variables Angulo mximo de inclinacin y h.

3.3.2.2.3.3

Coordenadas globales de la sombra

Dentro del programa existe una funcin especfica para la transformacin de coordenadas locales en globales denominada LocalesAGlobales que ya ha sido expuesta en el apartado 1.3.2.2. Lo nico que variar respecto a lo anterior es que en este caso la variable Sombra adoptar el valor 1.

63

3.3.2.2.4 Clculo de las prdidas por sombra.

Una vez definidas todas las funciones que integran el programa, queda por ver cmo se realiza el clculo del porcentaje de sombra que recibe cada seguir debido a los que le rodean. Puesto que este clculo debe realizar para cada uno de los seguidores de la instalacin y el dato quiere obtenerse mes a mes, los tres primeros bucles se encargan de eso. Los dos primeros lo que hacen es barrer las matrices obtenidas en la obtencin de datos desde un plano de Autocad (Apartado 1.2) . Por lo tanto, cada uno de los seguidores vendr definido por el lugar que ocupa en la matriz; de tal forma que, por ejemplo, el seguidor 1 tendr las coordenadas (1,1); el seguidor 2 las coordenadas (1,2), La dinmica que sigue el cdigo es la siguiente; o se coloca en uno de los seguidores de la instalacin, el (a,b) y memoriza sus datos en dos variables:

XSEGFijo = PoscSegX(a, b) YSEGFijo = PoscSegY(a, b) Hasta que pase al siguiente seguidor de la instalacin, estos dos datos sern los nicos que se mantengan invariables puesto que hacen referencia a la posicin que el seguidor ocupa en el plano y por lo tanto le relaciona con los de alrededor. o A travs de estas variables el programa comprueba que en esa posicin realmente haya un seguidor, en caso contrario pasa directamente al siguiente puesto que no habr seguidor sobre el que calcular las sombras. o En caso de que el seguidor exista, se le suma uno a una variable llamada SeguidorNumero cuya nica funcin es facilitar la salida de datos al final del programa. SeguidorNumero = SeguidorNumero + 1

64

Dado que la salida de datos se quiere realizar mes a mes, el programa va pasando por cada uno de ellos desde enero (1) hasta diciembre (12). Dependiendo del mes en el que est, selecciona el nmero de das correspondientes al mismo. For Mes = 1 To 12 Select Case Mes Case 4, 6, 9, 11 FinMes = 30 Case 1, 3, 5, 7, 8, 10, 12 FinMes = 31 Case 2 FinMes = 28 End Select

Una vez posicionado en un mes, recorre el mes entero da a da. Dado que para el clculo de los ngulos, y por lo tanto el de la mayora de las variables es necesario saber el da del ao para el que se quieren realizar los clculos, cada vez que pasa por un nuevo da suma una unidad a la variable denominada Da.

Dia = Dia + 1

Las dos siguientes tareas que realiza son pasar por todos los seguidores que rodean al seguidor fijo (del 1 al 8 como ya se ha explicado ms arriba) y recorrer todas las horas del da en intervalos de media hora.

Llegados a este punto es cuando empieza a realizar los clculos para determinar la sombra que proyectan los ocho seguidores de alrededor sobre el q est estudiando. o Primero calcula el Azimut y la Altura llamando a las funciones respectivas. Estos dos datos van a servirle para comprobar varias condiciones a lo largo del procedimiento.

65

Para empezar comprueba que no sea de noche mediante la Altura solar. En caso de que s sea de noche, pone todos los clculos a cero y pasa a la siguiente hora.

En caso de que sea de da contina con el procedimiento.

A partir de aqu, lo que har es ir viendo en qu seguidor de los de alrededor al fijo est situado para realizar los clculos respectivos a cada uno de ellos. Se analizar uno a uno cada uno de los casos para aclarar las diferencias existentes entre ellos. Los fundamentos de estas acciones ya han sido expuestos con anterioridad por lo que se tratarn escuetamente. 3.3.2.2.4.1 Seguidor n1 Como puede apreciarse en el cdigo, el seguidor nmero 1 est tratado en conjunto con el nmero 3. Esto se debe a que, aunque obviamente existen algunas diferencias, tambin comparten bastantes similitudes de cara al clculo de sombras. La posicin de ambos es oblicua respecto del seguidor fijo y en el caso de ambos, la separacin respecto al anterior es positiva en el eje x o eje Este-Oeste. Adems, ambos proyectarn sombra despus del medioda solar; es decir, despus de las 12 en la hora solar por lo que el Azimut con el que trabajarn tendr el mismo signo para ambos. Para ambos seguidores, si la coordenada a es igual a 1, no se realizar ningn clculo y se pasar al siguiente puesto que el seguidor estar en la columna de la derecha y a su derecha no tendr seguidores que le puedan hacer sombra. En el caso del seguidor nmero uno el desarrollo del programa ser el siguiente: o Si el seguidor fijo est en la primera fila, b es igual a 1, no se realizar ningn clculo y se pasar al siguiente puesto que no habr ningn seguidor en la posicin del seguidor 1.

66

Si el Azimut es mayor que 90, el seguidor uno no proyectar sombra sobre el seguidor fijo, por lo que tampoco se realizar ningn clculo y se pasar al siguiente.

Si se han superada estas condiciones, se proceder a calcular la distancia que separa, en ejes x e y globales, el seguidor fijo de aquel que se encuentre en la posicin del seguidor 1 cuyas coordenadas de la matriz de seguidores ser: (a-1, b-1).

sx = XSEGFijo -PoscSegX(a - 1, b - 1) sy = YSEGFijo -PoscSegY(a - 1, b - 1)

Nuevamente se debe comprobar que el seguidor de esa posicin existe; en caso negativo, no se realiza ningn clculo y se pasa al siguiente. Este paso se realiza para todos los seguidores en el procedimiento correspondiente a cada uno de ellos.

En caso de que dicho seguidor exista, se proceder a realizar los clculos de la sombra; el plano que corresponde al seguidor ser el del seguidor fijo, mientras que los planos formados con las proyecciones de las sombras sern los del seguidor que corresponda a la posicin del seguidor n1. Estos clculos se realizarn segn lo expuesto en el apartado de clculos previos.

3.3.2.2.4.2

Seguidor n2 En el caso del seguidor nmero 2, el desarrollo del programa ser el siguiente: o Si el seguidor fijo est en la primera columna; es decir, a es igual a 1, no se realizar ningn clculo y se pasar al siguiente puesto que no existir ningn seguidor en la posicin del seguidor 2.

67

En el caso de que a no sea igual a 1, se comprobar que existe un seguidor en la posicin correspondiente al seguidor nmero dos en la matriz, cuyas coordenadas sern: (a-1, b). Si no existe, no se hace ningn calculo y se pasa al siguiente caso.

En el caso de que s haya un seguidor en esa posicin, se proceder a calcular la distancia que separa, en ejes x e y globales, el seguidor fijo de aquel que se encuentre en la posicin del seguidor 2

sx = XSEGFijo -PoscSegX(a - 1, b ) sy = YSEGFijo -PoscSegY(a - 1, b )

Finalmente, se proceder a realizar los clculos de la sombra; el plano que corresponde al seguidor ser el del seguidor fijo, mientras que los planos formados con las proyecciones de las sombras sern los del seguidor que corresponda a la posicin del seguidor n2. Estos clculos se realizarn segn lo expuesto en el apartado de clculos previos.

3.3.2.2.4.3

Seguidor n3 Como ya se ha comentado en el caso del seguidor n1, estos dos son tratados juntos. Una vez realizadas las comprobaciones comunes a ambos que ya se han tratado en el apartado del seguidor n1 (Apartado 1.3.4.1) se ver lo que difiere al seguidor n3 del seguidor n1. Como podr comprobarse, llegados a este punto, todos los procedimientos son muy similares. Difieren nicamente en pequeos detalles esenciales sin embargo para el buen funcionamiento del programa. Es por ello que se intenta detallar minuciosamente.

68

Si el seguidor fijo est en la ltima fila, b es igual a jj, no se realizar ningn clculo y se pasar directamente al siguiente caso ya que no habr posibilidad de que haya ningn seguidor en la posicin del seguidor n3.

Si el Azimut es menor que 90, el seguidor 3 no proyectar sombra sobre el seguidor fijo, por lo que tampoco se realizar ningn clculo y se pasar al siguiente.

Si se han superada estas condiciones, se proceder a calcular la distancia que separa, en ejes x e y globales, el seguidor fijo de aquel que se encuentre en la posicin del seguidor 3 cuyas coordenadas de la matriz de seguidores ser: (a-1, b+1).

sx = XSEGFijo -PoscSegX(a - 1, b + 1) sy = YSEGFijo -PoscSegY(a - 1, b +1)

Nuevamente se debe comprobar que el seguidor de esa posicin existe; en caso negativo, no se realiza ningn clculo y se pasa al siguiente.

En caso de que dicho seguidor exista, se proceder a realizar los clculos de la sombra; el plano que corresponde al seguidor ser el del seguidor fijo, mientras que los planos formados con las proyecciones de las sombras sern los del seguidor que corresponda a la posicin del seguidor n3. Estos clculos se realizarn segn lo expuesto en el apartado de clculos previos.

69

3.3.2.2.4.4

Seguidor n4 El seguidor n 4 corresponde al que se halla justamente detrs del seguidor fijo, por lo que su procedimiento trabajar de la siguiente manera: o Si el seguidor fijo est en la ltima fila, b es igual a jj, no se realizar ningn clculo y se pasar al siguiente caso puesto que eso significa que no habr ningn seguidor en la posicin del seguidor n4. o En caso de que b sea menor que jj, se comprobar que en la posicin (a, b+1) de la matriz de seguidores exista algn seguidor. En caso de que no sea as, todos los clculos sern cero y se proceder a realizar el siguiente caso o Si se han superada estas condiciones, se proceder a calcular la distancia que separa, en ejes x e y globales, el seguidor fijo de aquel que se encuentre en la posicin del seguidor 4. sx = XSEGFijo -PoscSegX(a , b + 1) sy = YSEGFijo -PoscSegY(a , b + 1)

Finalmente, se proceder a realizar los clculos de la sombra; el plano que corresponde al seguidor ser el del seguidor fijo, mientras que los planos formados con las proyecciones de las sombras sern los del seguidor que corresponda a la posicin del seguidor n4. Ha de tenerse en cuenta que en el caso de este seguidor, podr dar sombra tanto en el caso de que sea antes como despus del medioda; es decir, para ambos signos del Azimut solar. El resto de clculos se realizarn segn lo expuesto en el apartado de clculos previos.

70

3.3.2.2.4.5

Seguidor n5 Al igual que ocurra con los seguidores n1 y n3, el seguidor n5 comparte procedimiento con el seguidor n7. Como puede observarse la posicin de estos dos tambin es oblicua al seguidor fijo pero en este caso, la separacin respecto a este ltimo es negativa en el eje x o eje Este- Oeste. La razn por la que estos cuatro seguidores se han agrupado de esta manera (1-3 y 5-7) se debe al valor del Azimut. Han sido agrupados en base al signo de ste puesto que dada su localizacin, los seguidores n5 y n7 proyectarn sombra sobre el seguidor fijo antes del medioda solar. En este caso, por lo ya explicado, el Azimut ser positivo. En el caso de estos dos seguidores, si el seguidor fijo est en la ltima columna; es decir, la coordenada a es igual a ii, no se realizar ningn clculo y se pasar al siguiente caso puesto que el seguidor a su izquierda no tendr seguidores que le puedan hacer sombra. En el caso del seguidor n5 el desarrollo del programa ser el siguiente: o Si el seguidor fijo est en la ltima fila, b es igual a jj, no se realizar ningn clculo y se pasar al siguiente caso puesto que no habr ningn seguidor en la posicin del seguidor n5. o Si el Azimut es menor que 90, el seguidor n5 no proyectar sombra sobre el seguidor fijo, por lo que tampoco se realizar ningn clculo y se pasar al siguiente caso. o Si se han superada estas condiciones, se proceder a calcular la distancia que separa, en ejes x e y globales, el seguidor fijo de aquel que se encuentre en la posicin del seguidor n5 cuyas coordenadas de la matriz de seguidores ser: (a+1, b+1).

sx = XSEGFijo -PoscSegX(a + 1, b + 1)

71

sy = YSEGFijo -PoscSegY(a + 1, b + 1)

Nuevamente se debe comprobar que el seguidor de esa posicin existe; en caso negativo, no se realiza ningn clculo y se pasa al siguiente.

En caso de que dicho seguidor exista, se proceder a realizar los clculos de la sombra; el plano que corresponde al seguidor ser el del seguidor fijo, mientras que los planos formados con las proyecciones de las sombras sern los del seguidor que corresponda a la posicin del seguidor n5. Estos clculos se realizarn segn lo expuesto en el apartado de clculos previos.

3.3.2.2.4.6

Seguidor n6 El procedimiento a seguir en el caso del seguidor n6 es muy similar al seguido con el seguidor n2 teniendo en cuenta que estn situados en posiciones opuestas. El desarrollo ser el siguiente. o Si el seguidor fijo est en la ltima columna; es decir, a es igual a ii, no se realizar ningn clculo y se pasar al siguiente puesto que no existir ningn seguidor en la posicin del seguidor n6. o En el caso de que a no sea igual a jj, se comprobar que existe un seguidor en la posicin correspondiente al seguidor n6 en la matriz, cuyas coordenadas sern: (a+1, b). Si no existe, no se hace ningn calculo y se pasa al siguiente caso. o En el caso de que haya un seguidor en esa posicin, se proceder a calcular la distancia que separa, en ejes x e y globales, el seguidor fijo de aquel que se encuentre en la posicin del seguidor n6

72

sx = XSEGFijo -PoscSegX(a +1, b ) sy = YSEGFijo -PoscSegY(a + 1, b )

Finalmente, se proceder a realizar los clculos de la sombra; el plano que corresponde al seguidor ser el del seguidor fijo, mientras que los planos formados con las proyecciones de las sombras sern los del seguidor que corresponda a la posicin del seguidor n6. Estos clculos se realizarn segn lo expuesto en el apartado de clculos previos.

3.3.2.2.4.7

Seguidor n7 Como ya se ha comentado, el seguidor n7 es tratado junto con el n5 debido a las similitudes que comparten. Sin embargo, dentro de la aplicacin comn a ambos, existen tareas especficas del seguidor n7 las cuales van a explicarse con mayor detenimiento a continuacin: o Si el seguidor fijo est en la primera fila, b es igual a 1, no se realizar ningn clculo y se pasar directamente al siguiente caso ya que no habr posibilidad de que haya ningn seguidor en la posicin del seguidor n7. o Si el Azimut es mayor que 90, el seguidor n7 no proyectar sombra sobre el seguidor fijo, por lo que tampoco se realizar ningn clculo y se pasar al siguiente caso. o Si se han superada estas condiciones, se proceder a calcular la distancia que separa, en ejes x e y globales, el seguidor fijo de aquel que se encuentre en la posicin del seguidor n7, cuyas coordenadas de la matriz de seguidores ser: (a-1, b+1).

73

sx = XSEGFijo -PoscSegX(a + 1, b - 1) sy = YSEGFijo -PoscSegY(a + 1, b -1)

Nuevamente se debe comprobar que el seguidor de esa posicin existe; en caso negativo, no se realiza ningn clculo y se pasa al siguiente.

En caso de que dicho seguidor exista, se proceder a realizar los clculos de la sombra; el plano que corresponde al seguidor ser el del seguidor fijo, mientras que los planos formados con las proyecciones de las sombras sern los del seguidor que corresponda a la posicin del seguidor n7. Estos clculos se realizarn segn lo expuesto en el apartado de clculos previos.

3.3.2.2.4.8

Seguidor n8 Al igual que ocurra en el caso del seguidor n2 y n6, el procedimiento del seguidor n8 es muy semejante al del n4; siendo sus posiciones opuestas. En el caso del seguidor n8 su posicin corresponde al que est justamente delante del seguidor fijo. El desarrollo de su procedimiento ser el siguiente: o Si el seguidor fijo est en la primera fila; es decir, b es igual a 1, no se realizar ningn clculo y se pasar al siguiente caso puesto que eso supone que no hay ningn seguidor en la posicin del seguidor n8. o En caso de que b sea mayor que 1, se comprobar que en la posicin (a, b-1) de la matriz de seguidores exista algn seguidor. En caso de que no sea as, todos los clculos sern cero y se proceder a realizar el siguiente caso

74

Si se han superada estas condiciones, se proceder a calcular la distancia que separa, en ejes x e y globales, el seguidor fijo de aquel que se encuentre en la posicin del seguidor n8. sx = XSEGFijo -PoscSegX(a , b - 1) sy = YSEGFijo -PoscSegY(a , b - 1)

Finalmente, se proceder a realizar los clculos de la sombra; el plano que corresponde al seguidor ser el del seguidor fijo, mientras que los planos formados con las proyecciones de las sombras sern los del seguidor que corresponda a la posicin del seguidor n8. Ha de tenerse en cuenta que en el caso de este seguidor, podr dar sombra tanto en el caso de que sea antes como despus del medioda; es decir, para ambos signos del Azimut solar. El resto de clculos se realizarn segn lo expuesto en el apartado de clculos previos.

3.3.2.2.5 Final del programa Una vez visto el funcionamiento del programa para cada uno de los seguidores, falta comentar el final del programa. Esta ltima parte lo que hace es tratar los datos obtenidos de forma que cumplan la funcin que se desea. Para ello realiza diferentes pasos: o Para cada caso, habr cuatro variables finales: AreaPerdidas, Area, AreaPerdidasTotal, AreaTotal

Las dos primeras renovarn su valor en cada nuevo caso, mientras que las dos ltimas aumentarn su

75

valor la cantidad correspondiente a las dos anteriores en cada nuevo caso; es decir,

AreaPerdidas = basex * basey Area = BaseP * AlturaP AreaPerdidasTotal = AreaPerdidasTotal + AreaPerdidas AreaTotal = AreaTotal + Area La primera y la tercera; AreaPerdidas y

AreaPerdidasTotal se refieren al rea de la sombra, mientras que las otras dos registran el rea total del seguidor. De esta manera lo que hace es ver el rea que hay en sombra y el rea que captara radiacin en caso de no haber sombra. o Como la salida de datos se realiza mes a mes, cuando va a cambiar de mes hace el clculo del porcentaje de sombra respecto del rea total: PorcPerdidas = (AreaPerdidasTotal / AreaTotal) Adems inicializa las variables AreaPerdidasTotal y AreaTotal a cero de forma que estn preparadas para comenzar el clculo de un nuevo mes. o Por otra parte, cada vez que cambia de seguidor fijo, lo que supone que ya ha realizado el clculo de sombras de que del los seguidor clculos anterior del nuevo durante el ao sean completo, inicializada la variable Dia a cero con el fin seguidor correctos.

3.3.2.3 Presentacin de los resultados en tabla de Excel. La presentacin de los resultados se realiza en una tabla de Excel donde cada fila corresponde a un seguidor y cada columna a un mes del ao. Al principio del programa, abre un documento de Excel y asigna, en la fila nmero 1 a patir de la columna nmero 2 (B), a cada mes una columna de tal forma que:

76

o o o

Enero: Fila 1, Columna B Febrero: Fila1, Columna C As sucesivamente hasta: Diciembre: Fila1 Columna M

En el cdigo puede apreciarse como se realiza dicha asignacin. Adems realiza algunas acciones como cambiar el tamao de la letra y resaltarla mediante la funcin Negrita.

ApExcel.cells(1, 2).formula = "Enero" ApExcel.cells(1, 3).formula = "Febrero" ApExcel.cells(1, 4).formula = "Marzo" ApExcel.cells(1, 5).formula = "Abril" ApExcel.cells(1, 6).formula = "Mayo" ApExcel.cells(1, 7).formula = "Junio" ApExcel.cells(1, 8).formula = "Julio" ApExcel.cells(1, 9).formula = "Agosto" ApExcel.cells(1, 10).formula = "Septiembre" ApExcel.cells(1, 11).formula = "Octubre" ApExcel.cells(1, 12).formula = "Noviembre" ApExcel.cells(1, 13).formula = "Diciembre" ApExcel.range("b1:m1").Font.Size = 10 ApExcel.range("b1:m1").Font.Bold = True

El resto de la tabla se rellena al final del programa, antes de cambiar de un mes a otro. Lo primero que ha de hacer es indicar, en la primera columna, el seguidor con el que est trabajando.

ApExcel.cells(SeguidorNumero + 1, 1).formula = "Seguidor" & SeguidorNumero ApExcel.cells(SeguidorNumero + 1, 1).Font.Size = 10 ApExcel.cells(SeguidorNumero + 1, 1).Font.Bold = True

A continuacin escribe, en el lugar que le corresponda, el porcentaje de sombra calculado. Este dato se introduce con estilo de porcentaje y formato de nmero 0.00%.

77

ApExcel.cells(SeguidorNumero + 1, Mes + 1).formula = PorcPerdidas ApExcel.cells(SeguidorNumero + 1, Mes + 1).Style = "Percent" ApExcel.cells(SeguidorNumero + 1, Mes + 1).NumberFormat = "0.00%"

3.4 Implantacin numrica


La implantacin numrica va a realizarse para varios casos diferentes, cuatro concretamente. Los cuatro casos van a tener unas diferencias significativas entre s de cara a comprobar el buen funcionamiento del programa en el anlisis de los resultados. En cada uno de los cuatro casos ser una nica variable la que cambie respecto al anterior para poder comprobar como afecta dicho cambio. Lo que se pretende es comprobar que, por ejemplo, al cambiar las dimensiones del seguidor, cambia el porcentaje de sombra. Los cuatro casos que se van a implantar son los siguientes: o Un plano que contiene 100 seguidores, cuya separacin es de 20 metros en el eje Norte-Sur y de 25 metros en el eje EsteOeste. El seguidor ser de 18 * 10 metros, altura de la columna=5m. La comunidad Autnoma es Granada. o o Las mismas condiciones anteriores pero en Guipzcoa. En este caso se tiene el mismo plano, Comunidad Autnoma

Guipzcoa. Seguidor: 14*10 metros, altura de la columna=5m. o Por ltimo, se repite el caso anterior esta vez con un nuevo plano que contiene 9 seguidores y cuya separacin es de 10 metros Norte-Sur, 10 metros Este-Oeste.

Las tablas obtenidas en los casos de los 100 seguidores son excesivamente largas por lo que se ha optado por reproducir nicamente partes de ellas; partes que puedan ser relevantes a la hora de valorar los resultados.

Caso1

78

79

Caso 2

80

Caso 3

81

Caso4

82

4
Anlisis de los resultados

83

Anlisis de los resultados

Parta facilitar el anlisis de los resultados, a continuacin se numera los seguidores en funcin de la tabla de resultados donde el seguidor q es el que ms al Sur y ms al Oeste de todos; es decir, corresponde con el de la esquina inferior izquierda del plano.

Imagen

Imagen

Una vez realizada la implantacin numrica y obtenidos los resultados expuestos en el captulo anterior, se procede a su anlisis. Dada la extensin de las tres primeras tablas de resultados, se ha omitido parte de las mismas. Como puede comprobarse, de la tabla del caso 1 es de la que

84

ms partes se han expuesto; esto se debe a que a travs de sta se va a ver que los diferentes valores que adopta el valor de la sombra se debe al diseo del plano.

4.1 Caso 1
Con este caso lo que se pretende es ver si los diferentes valores de sombra tienen relacin con las diferentes posiciones de los seguidores. Para empezar se observa que los valores ms pequeos corresponden con los seguidores que se encuentran en las esquinas y, concretamente, los de las dos esquinas de la primera fila registran los valores ms pequeos. (Seguidor1 y seguidor 92). Esto se debe a que las posiciones en las que estos dos no tienen seguidores son las posiciones orientadas hacia el Sur que son las que mayores sombras proyectan. Por otro lado se puede observar como los seguidores de la primera columna(1 al 16) registran valores inferiores a los de la segunda (17 al 32). Concretamente, los seguidores del 18 al 31 seran seguidores que mantienen la configuracin del seguidor genrico que se ha definido por lo que seran stos los que mayores valores de sombra deberan registrar y as es. En las tablas que van del seguidor 43 al 48 y del seguidor 59 al 64 podemos observar la diferencia entre unos seguidores con la configuracin del genrico y otros que a su derecha no tienen seguidores que les den sombra. Comprobar que estos valores s se diferencian permite cerciorarse de que la obtencin de datos desde AutoCAD y la forma de ordenarlos es correcta puesto que es capaz de una vez diseada la matriz completa, comprobar en qu lugares de dicha matriz no existen seguidores.

4.2 Caso 1-2


En este apartado de lo que se trata es de comparar el caso 1 con el 2. Lo nico que diferencia estos dos casos es el lugar en el que estn ubicados: Granada y Guipzcoa. Lo que se pretende con esto es comprobar que un cambio en la variable latitud comporta un cambio en los resultados para comprobar que el clculo de las variables que definen la posicin del sol se estn realizando correctamente.

85

La razn por la que se han elegido estas dos localidades es simplemente sus valores de latitud, que se encuentran entre las mayores y las menores dentro de Espaa. El valor de la latitud en Granada es de 37.2 y en Guipzcoa de 43.3 Mirando las tablas de resultados podemos comprobar que efectivamente existe una variacin de unos resultados a otros. En general, el caso de Guipzcoa, la sombra que recibe cada uno de los seguidores es mayor que en el caso de Granada. Esto se debe a que la trayectoria del sol en el caso de una latitud de 43 es ms bajo que en el caso de la latitud de 37 y por lo tanto, las sombras sern ms alargadas en el primer caso. Las siguientes imgenes muestran la trayectoria del sol sobre un punto de la tierra a lo largo del ao para ambos casos. La primera es la trayectoria para una latitud de 43 mientras que la segunda muestra el mismo caso para una latitud de 37. Observando ambas imgenes puede apreciarse como en el primer caso las marcas que limitan la trayectoria del sol tiene mayor inclinacin que en el segundo caso. Adems ambas imgenes representan el mismo momento en el tiempo, el da 2 de Marzo a las 8 de la maana. En este instante tanto el azimut como la altura solares son menores en el primer caso. Sin embargo, aunque en general los valores de las sombras son mayores para el caso de Guipzcoa, los seguidores que ocupan la primera fila, en los meses de invierno, reciben menos sombra que en el caso de Granada. Este hecho no deja de ser razonable, puesto que los seguidores de la primera fila carecen de seguidores en las posiciones en las que se proyecta mayor sombra en invierno, especialmente en la posicin sur.

86

4.3 Caso 2-3


El caso 2 y el caso 3 se diferencian entre s en las dimensiones del seguidor; concretamente en la dimensin de la base del mdulo de parrillas que en el caso 2 vale 18 y en el 3, 14. Las proyecciones de la sombra en el primer caso deberan ser mayores que en el segundo, puesto que las distancias que separan a unos seguidores de otros son las mismas en ambos casos. A la vista de los resultados, se confirma este hecho.

87

4.4 Caso 3-4


Por ltimo, la diferencia entre el caso 3 y el caso 4 es la distancia existente entre los seguidores. Dichas distancias en cada uno de los casos son las que aparecen a continuacin.

Caso3

Caso4

Como se ve, la variacin de las distancias es bastante considerable por lo que debera existir una diferencia significativa entre unos valores de sombras y otros. Los resultados confirman este hecho, dado que en los seguidores centrales, en el mes de Enero, cuando se registran mayores sombras, pasa de un valor del 1.51% al 13.08% y en el caso del seguidor 1, para ese mismo mes los resultados son de 0.05% y 1.91% respectivamente.

88

5
Conclusiones

89

5 Conclusiones

5.1 Conclusiones sobre los resultados


Observando los resultados obtenidos, se puede concluir que el programa desarrollado cumple las funciones para las que se ha diseado. Proporciona unos datos tiles y claros de las sombras proyectadas sobre cada seguidor fotovoltaico dentro de una huerta solar. Adems estos datos se proporcionan individualmente para cada seguidor y mes a mes lo que permite estudiar detalladamente cada configuracin y permite comparar fciles distintas configuraciones. Adems permite, sin necesidad de involucrarse en exceso en el estudio del movimiento del sol y la proyeccin de sombras, tras probar algunos diseos diferentes, poder obtener una idea aproximada de la forma en que stos influyen sobre la instalacin. El uso de la aplicacin es sumamente sencillo. El nico detalle a tener en cuenta es la necesidad de introducir el plano en formato DXF, lo cual tampoco entraa ninguna dificultad.

5.2 Recomendaciones para futuros estudios


A lo largo del desarrollo del presente proyecto se han ido encontrando mltiples problemas as como variantes del mismo. Muchos de dichos problemas se han ido solucionando mientras que otros han limitado la generalidad del proyecto debido a la complejidad que suponan. El principal problema era la falta de documentacin que pudiera servir de base para desarrollar el proyecto; por lo tanto, ste puede cumplir esa funcin. Algunas posibles ampliaciones de este proyecto bastante recomendables seran aquellas que permitieran dibujar las sombras calculadas, permitir que cada seguidor sea de dimensiones diferentes, ampliar las posibles ubicaciones. Por otro lado tambin podra disearse una aplicaciones que hiciese lo contraro a sta; es decir, a partir de un terreno dado y un rendimiento deseado (lo que implica una cantidad de sombra mxima), estimar la disposicin de los

90

seguidores. De esta forma se podra cerrar el ciclo. Para desarrollar esta aplicacin tambin sirve como base el presente proyecto puesto que realiza todos los clculos correspondientes a las sombras.

91

6
Bibliografa

92

6 Bibliografa

[UNED 05] Programa de postgrado (UNED). V Curso De Experto Profesional en Energa Fotovoltaica. Visual Basic 6 a fondo. Inforbooks ediciones. Sergio Arboles y Luis Navarro. VBA for AutoCAD2002. Writing AutoCAD macros. Jeffrey E. Clark Aprenda Visual Basic como si estuviera en primero. Javier Garca de Jaln , Jos Ignacio Rodrguez , Alfonso Brazlez Retratos de la conexin fotovoltaica a la red (IV). Seguidores y huertas solares.Eduardo Lorenzo. Instituto de energa solar. Universidad politcnica de Madrid. Manual del usuario. AutoCAD 2006.
www.canalvisualbasic.net www.recursosvisualbasic.com. www.vb-mundo.com www.elguille.info msdn.microsoft.com/vbasic www.portalvb.comv vbasic.astalaweb.com www.lawebdelprogramador.com/ www.vbsiglo21.net

[GUA 03] Gua Solar de Greenpeace [ASIF] Pgina web de la Asociacin de la Industria Fotovoltaica (ASIF). www.asif.org [IDAE 04]Gua prctica de la energa. Consumo eficiente y responsable. IDAE, 2004 www.isofoton.es www.bpsolar.com www.ibersolar.com [RD 436/2004] R.D. 436/2004 de 12 de marzo [FENO] www.unionfenosa.es [PLAN 06] Conferencia: Posicionamiento poltico en la planificacin energtica nacional. La cuestin nuclear. [AYTO 06] www.ayto-coslada.es www.censolar.es [WIKI 06] http://es.wikipedia.org/ [EKO] http://www.ekogaia.net http://tecnologias.gio.etsit.upm.es/domotica www.ine.es http://www.terra.org/html/s/ecologia.html [IBER 05] http://bdd.unizar.es/pag3/pag6-1/potencia.htm

93

7
Apndice

94

7 . Apndice
El presente apndice se adjunta para facilitar la comprensin del cdigo. Lo que se pretende es explicar algunos comandos propios de la programacin cuya utilizacin se repite muy a menudo a lo largo del cdigo

7.1 Estructuras de decisin


Son las encargadas de comprobar condiciones, y dependiendo de los resultados, realizar diferentes operaciones.

7.1.1 Sentencia IF ... THEN ... ELSE ...


Esta estructura permite ejecutar condicionalmente una o ms sentencias y puede escribirse de dos formas. La primera ocupa slo una lnea y tiene la forma siguiente: If condicion Then sentencia1 [Else sentencia2] La segunda es ms general y se muestra a continuacin: If condicion Then sentencia(s) [Else sentencia(s)] End If Si condicion es True (verdadera), se ejecutan las sentencias que estn a continuacin de Then, y si condicion es False (falsa), se ejecutan las sentencias que

95

estn a continuacin de Else, si esta clusula ha sido especificada (pues es opcional). Para indicar que se quiere ejecutar uno de varios bloques de sentencias dependientes cada uno de ellos de una condicin, la estructura adecuada es la siguiente: If condicion1 Then sentencias1 ElseIf condicion2 Then sentencias2 Else sentencia-n End If Si se cumple la condicion1 se ejecutan las sentencias1, y si no se cumple, se examinan secuencialmente las condiciones siguientes hasta Else, ejecutndose las sentencias correspondientes al primer ElseIf cuya condicin se cumpla. Si todas las condiciones son falsas, se ejecutan las sentencias-n correspondientes a Else, que es la opcin por defecto. La Figura 7.1 presenta esquemticamente ambas formas de representar estas sentencias:

7.1.2 Sentencia SELECT CASE


Esta sentencia permite ejecutar una de entre varias acciones en funcin del valor de una expresin. Es una alternativa a If ... Then ... ElseIf cuando se

96

compara la misma expresin con diferentes valores. Su forma general es la siguiente: Select Case expresion Case etiq1 [sentencias1] Case etiq2 [sentencias2] Case Else sentenciasn End Select Donde expresin es una expresin numrica o alfanumrica, y etiq1, etiq2, ... pueden adoptar distintas formas, en el presente proyecto se han utilizado las siguientes: 1. expresin 2. combinacin de expresiones separadas por comas Cuando se ejecuta una sentencia Select Case, Visual Basic evala la expresin y el control del programa se transfiere a la sentencia cuya etiqueta tenga el mismo valor que la expresin evaluada, ejecutando a continuacin el correspondiente bloque de sentencias. Si no existe un valor igual a la expresin entonces se ejecutan las sentencias a continuacin de Case Else.

7.2 Estructuras de bucle


Tambin son llamadas repetitivas. Se utilizan para ejecutar una o ms lneas de cdigo un nmero determinado de veces.

7.2.1 Sentencia FOR ... NEXT


La sentencia For da lugar a un lazo o bucle, y permite ejecutar un conjunto de sentencias cierto nmero de veces. Su forma general es: For variable = expresion1 To expresion2 [Step expresion3]

97

[sentencias] Exit For [sentencias] Next [variable] Cuando se ejecuta una sentencia For, primero se asigna el valor de la expresion1 a la variable y se comprueba si su valor es mayor o menor que la expresion2. En caso de ser menor se ejecutan las sentencias, y en caso de ser mayor el control del programa salta a las lneas a continuacin de Next. Todo esto sucede en caso de ser la expresion3 positiva. En caso contrario se ejecutarn las sentencias cuando la variable sea mayor que expresion2. Una vez ejecutadas las sentencias, la variable se incrementa en el valor de la expresion3, o en 1 si Step no se especifica, volvindose a efectuar la comparacin entre la variable y la expresion2, y as sucesivamente. La sentencia Exit For es opcional y permite salir de un bucle For ... Next antes de que ste finalice.

7.2.2 Sentencia DOLOOP

Un Loop (bucle) repite la ejecucin de un conjunto de sentencias mientras una condicin dada sea cierta, o hasta que una condicin dada sea cierta. La condicin puede ser verificada antes o despus de ejecutarse el conjunto de sentencias. Sus posibles formas son las siguientes: Formato 1: Do [{While/Until} condicion] [sentencias] [Exit Do] [sentencias] Loop Formato 2: Do

98

[sentencias] [Exit Do] [sentencias] Loop [{While/Until}condicion] La sentencia opcional Exit Do permite salir de una bucle Do ... Loop antes de que finalice ste. La representacin esquemtica del mismo sera la siguiente:

En el cdigo desarrollado en este proyecto se ha utilizado el formato 2 con while. Con este formato el bucle se ejecuta al menos una vez y se continuar ejecutando mientras se cumpla la condicin.

99

8
Cdigo

100

'Agosto 'Prueba Option Explicit Const PI As Double = 3.14159265359 Dim Dibujoname As String

'VARIABLES PARA CLCULO DE NGULOS Dim w As Single: Dim wGrad As Integer Dim DecliRad(1 To 365) As Double: Dim AlturaRad(1 To 365, 1 To 24) As Double: Dim AzimutRad(1 To 365, 1 To 24) As Double Dim L As Single: Dim AnguloNormalRad(1 To 365, 1 To 24) As Double: Dim Incli As Single: Dim Desviacion As Single Dim XD As Double: Dim X1 As Double: Dim X2 As Double: Dim X3 As Double 'Dim Hora As Integer Dim DecliGrad(1 To 365) As Double: Dim AlturaGrad(1 To 365, 1 To 24) As Double: Dim AzimutGrad(1 To 365, 1 To 24) As Double Dim AnguloNormalGrad(1 To 365, 1 To 24) As Double Dim AnguloNormalSeg As Single

Dim Altura As Single: Dim Azimut As Single 'DATOS DEL SEGUIDOR Dim BaseP As Single: Dim AlturaP As Single: Dim h As Integer: Dim AlturaColumna As Integer 'VARIABLES PARA EL CLCULO DE LA SOMBRA Dim h1(1 To 365, 1 To 24) As Single: Dim h2(1 To 365, 1 To 24) As Single Dim d1(1 To 365, 1 To 24) As Single: Dim d2(1 To 365, 1 To 24) As Single Dim AlturaSeg As Single: Dim AngMax As Single: Dim AnguloNormal As Single 'Variables para calculo de coordenadas Dim XL As Single: Dim YL As Single: Dim ZL As Single Dim G As Single

'CLCULO DE LOS NGULOS Function CalculoAngulos1(N As Integer, Hora As Single)

XD = (0.973 * N - 77.84) * PI / 180 DecliRad(N) = (23.45 * PI / 180) * Sin(XD) wGrad = Abs(12 - Hora) * 15 w = wGrad * PI / 180 Desviacion = 0 X1 = Cos(L) * Cos(DecliRad(N)) * Cos(w) + Sin(L) * Sin(DecliRad(N)) If X1 < 0 Then CalculoAngulos1 = 0 Exit Function Else If -X1 * X1 + 1 = 0 Then AlturaRad(N, Hora) = PI / 2

101

Else AlturaRad(N, Hora) = Atn(X1 / Sqr(-X1 * X1 + 1)) End If End If CalculoAngulos1 = AlturaRad(N, Hora) End Function Function CalculoAngulos2(N As Integer, Hora As Single)

'Arcoseno

Altura = CalculoAngulos1(N, Hora) If Altura = 0 Then CalculoAngulos2 = 0 Exit Function Else X2 = Cos(DecliRad(N)) * Sin(w) / Cos(Altura) X3 = (Sin(L) * Sin(Altura) - Sin(DecliRad(N))) / (Cos(L) * Cos(Altura)) If X2 >= 0 Then If X3 > 0 Then '1er cuadrante If X2 = 1 Then AzimutRad(N, Hora) = PI / 2 Else AzimutRad(N, Hora) = Atn(X2 / Sqr(-X2 * X2 + 1)) 'Arcoseno End If Else '2 cuadrante AzimutRad(N, Hora) = Atn(-X3 / Sqr(-X3 * X3 + 1)) + 2 * Atn(1) 'Arcocoseno End If ElseIf X3 > 0 Then '4 Cuadrante AzimutRad(N, Hora) = Atn(X2 / Sqr(-X2 * X2 + 1)) 'Arcoseno Else '3 cuadrante If X2 = -1 Then AzimutRad(N, Hora) = -PI / 2 Else AzimutRad(N, Hora) = Atn(X2 / Sqr(-X2 * X2 + 1)) - (PI / 2) 'Arcoseno End If End If End If

If Hora <= 12 Then CalculoAngulos2 = AzimutRad(N, Hora) Else CalculoAngulos2 = -AzimutRad(N, Hora) End If AnguloNormalRad(N, Hora) = (PI / 2) - AlturaRad(N, Hora) AlturaGrad(N, Hora) = AlturaRad(N, Hora) * 180 / PI AzimutGrad(N, Hora) = AzimutRad(N, Hora) * 180 / PI

102

AnguloNormalGrad(N, Hora) = AnguloNormalRad(N, Hora) * 180 / PI

DecliGrad(N) = DecliRad(N) * 180 / PI End Function

'CLCULO DE d, DISTANCIA DE LA SOMBRA Function DistanciaSombra1(N As Integer, Hora As Single, h As Single, AngMax As Single) Altura = CalculoAngulos1(N, Hora) If Altura < AngMax Then AlturaSeg = AngMax Else AlturaSeg = Altura End If If Altura = 0 Then d1(N, Hora) = 0 Else h1(N, Hora) = h - (AlturaP * Sin((PI / 2) - AlturaSeg) / 2) d1(N, Hora) = h1(N, Hora) / Tan(Altura) End If DistanciaSombra1 = d1(N, Hora) End Function Function DistanciaSombra2(N As Integer, Hora As Single, h As Single, AngMax As Single) Altura = CalculoAngulos1(N, Hora) If Altura < AngMax Then AlturaSeg = AngMax Else AlturaSeg = Altura End If If Altura = 0 Then d2(N, Hora) = 0 Else h2(N, Hora) = h + (AlturaP * Sin((PI / 2) - AlturaSeg) / 2) d2(N, Hora) = h2(N, Hora) / Tan(Altura) End If DistanciaSombra2 = d2(N, Hora) End Function Function LocalesAGlobales(N As Integer, Hora As Single, Coord As Integer, Punto As Integer, Sombra As Integer, h As Single, AngMax As Single) Azimut = CalculoAngulos2(N, Hora) If Coord = 1 Then XL = XLSeguidor(Punto) YL = YLSeguidor(N, Hora, Punto, Sombra, h, AngMax) G = XL * Cos(Azimut) - YL * Sin(Azimut) ElseIf Coord = 2 Then XL = XLSeguidor(Punto) YL = YLSeguidor(N, Hora, Punto, Sombra, h, AngMax) G = XL * Sin(Azimut) + YL * Cos(Azimut) Else G = ZLSeguidor(N, Hora, Punto, h)

103

End If LocalesAGlobales = G End Function Function XLSeguidor(Punto As Integer) Select Case Punto Case 1, 2 XL = BaseP / 2 Case 3, 4 XL = -BaseP / 2 End Select XLSeguidor = XL End Function Function YLSeguidor(N As Integer, Hora As Single, Punto As Integer, Sombra As Integer, h As Single, AngMax As Single) Altura = CalculoAngulos1(N, Hora) If Altura < AngMax Then AlturaSeg = AngMax Else AlturaSeg = Altura End If AnguloNormalSeg = (PI / 2) - AlturaSeg If Sombra = 0 Then Select Case Punto Case 1, 4 YL = AlturaP * Cos(AnguloNormalSeg) / 2 Case 2, 3 YL = -(AlturaP * Cos(AnguloNormalSeg) / 2) End Select ElseIf Sombra = 1 Then Select Case Punto Case 1, 4 YL = (AlturaP / 2) - DistanciaSombra1(N, Hora, h, AngMax) * Cos(AnguloNormalSeg) Case 2, 3 YL = -((AlturaP / 2) + DistanciaSombra2(N, Hora, h, AngMax)) * Cos(AnguloNormalSeg) End Select End If YLSeguidor = YL

End Function Function ZLSeguidor(N As Integer, Hora As Single, Punto As Integer, h As Single) Altura = CalculoAngulos1(N, Hora) If Altura < AngMax Then AlturaSeg = AngMax Else AlturaSeg = Altura

104

End If Select Case Punto Case 1, 4 ZL = h - (AlturaP * Cos(AlturaSeg) / 2) Case 2, 3 ZL = h + (AlturaP * Cos(AlturaSeg) / 2) End Select ZLSeguidor = ZL End Function Function DistanciaMinNS(Sombra As Integer, h As Single, AngMax As Single) Dim Dia As Integer: Dim HoraDia As Single Dia = 355 HoraDia = 8 Dim ko As Single Dim ZG3 As Single: Dim ZG4 As Single: Dim DistNS As Single: Dim LNS As Single ko = 4 * PI / 180 Altura = CalculoAngulos1(Dia, HoraDia) Azimut = CalculoAngulos2(Dia, HoraDia) If Altura < AngMax Then AlturaSeg = AngMax Else AlturaSeg = Altura End If ZG3 = LocalesAGlobales(Dia, HoraDia, 3, 3, 0, h, AngMax) ZG4 = LocalesAGlobales(Dia, HoraDia, 3, 4, 0, h, AngMax) LNS = ZG3 - ZG4 DistNS = ((LNS / Tan(Altura)) + AlturaP * Cos(AlturaSeg)) * Cos(Azimut) DistanciaMinNS = DistNS End Function Function DistanciaMinEO(Sombra As Integer, h As Single, AngMax As Single) Dim Dia As Integer: Dim HoraDia As Single Dia = 355 HoraDia = 8 Dim ko As Single Dim ZG1 As Single: Dim ZG2 As Single: Dim DistEO As Single: Dim LEO As Single ko = 4 * PI / 180 Altura = CalculoAngulos1(Dia, HoraDia) Azimut = CalculoAngulos2(Dia, HoraDia) If Altura < AngMax Then AlturaSeg = AngMax Else AlturaSeg = Altura End If

ZG2 = LocalesAGlobales(Dia, HoraDia, 3, 2, 0, h, AngMax) ZG1 = LocalesAGlobales(Dia, HoraDia, 3, 1, 0, h, AngMax) LEO = ZG2 - ZG1 DistEO = ((LEO / Tan(Altura)) + BaseP * Cos(AlturaSeg)) * Sin(Azimut)

DistanciaMinEO = DistEO

105

End Function

Private Sub cmdBuscar_Click()

CommonDialog1.Filter = "(*.dxf)|*.dxf" 'Abrimos el Commondialog con ShowOpen CommonDialog1.ShowOpen 'Si seleccionamos un archivo mostramos la ruta If CommonDialog1.FileName <> "" Then TxtPath.Text = CommonDialog1.FileName Dibujoname = CommonDialog1.FileName Else 'Si no mostramos un texto de advertencia de que no se seleccion _ ninguno, ya que FileName devuelve una cadena vaca TxtPath.Text = "No se seleccion ningn archivo" End If End Sub Private Sub cmdCalcular_Click() Dim Dibujoobj Dim Dibujo Dim xDibujo() As String: Dim yDibujo() As String: Dim zDibujo() As String Dim Etiqueta As String: Dim linea As String Dim comparador As String: Dim i As Long Dim XX As Boolean: Dim YY As Boolean: Dim ZZ As Boolean Dim Filas As Long: Dim cont As Long: Dim j As Long 'f06name = Application.GetOpenFilename("Autocad output(*.dxf),*.dxf",) Set Dibujoobj = CreateObject("Scripting.FileSystemObject") Set Dibujo = Dibujoobj.OpenTextFile(Dibujoname, 1)

'Dibujo.skipline 'Text1.Text = Dibujo.readline Do While StrComp(Dibujo.readline, "EOF") <> 0 Filas = Filas + 1 Loop Dibujo.Close Dim NumerodeSeguidores As Integer Dim fin As Integer Dim Numseguidores As Integer

106

Dim Dia As Integer Dim HoraDia As Single

NumerodeSeguidores = txtNSeguidores.Text Numseguidores = NumerodeSeguidores Dim ApExcel1 As Variant Set ApExcel1 = CreateObject("Excel.application") ApExcel1.workbooks.open ("C:\Documents and Settings\Paula Calles\My Documents\Proyecto\Tablas para el proyecto.xls") 'VARIABLES PARA INTERCAMBIO DINAMICO DE DATOS(COMUNIDAD==LATITUD) Dim Columna As String Dim ColumnaA As String Dim Fila As Integer 'COMUNIDAD==LATITUD

For Fila = 72 To 123 Latitud.LinkMode = 0 Latitud.LinkTopic = "Excel|Hoja1" Latitud.LinkItem = "F" & Fila & "C1" Latitud.LinkMode = 1 ColumnaA = "F" & CStr(Fila) & "C1" Latitud.LinkItem = ColumnaA

If Left(Latitud.Text, Len(cmbComunidad)) = cmbComunidad Then Latitud.LinkMode = 0 Latitud.LinkTopic = "Excel|Hoja1" Latitud.LinkItem = "F" & Fila & "C3" Latitud.LinkMode = 1 ColumnaA = "F" & CStr(Fila) & "C3" Latitud.LinkItem = ColumnaA Exit For End If Next L = (Latitud.Text) * PI / 180

ApExcel1.workbooks("Tablas para el proyecto.xls").Close savechanges:=False Do

Set Dibujoobj = CreateObject("Scripting.FileSystemObject") Set Dibujo = Dibujoobj.OpenTextFile(Dibujoname, 1) For cont = 1 To Filas Do linea = Dibujo.readline j=j+1 If j > Filas Then

107

Exit For End If Loop While StrComp(linea, "SEGUIDORES") <> 0 Do linea = Dibujo.readline j=j+1 Loop While StrComp(linea, " 10") <> 0 i=i+1 ReDim Preserve xDibujo(i) ReDim Preserve yDibujo(i) ReDim Preserve zDibujo(i) xDibujo(i) = Dibujo.readline Dibujo.skipline yDibujo(i) = Dibujo.readline Dibujo.skipline zDibujo(i) = Dibujo.readline j=j+5

Next Dibujo.Close 'Text1.Text = i

Dim posicion As Integer Dim ii As Integer Dim xSeg() As Single: Dim ySeg() As Single: Dim zSeg() As Single Dim XSEGUIDOR() As Single: Dim YSEGUIDOR() As Single Dim compara As Double

ii = 0 ReDim xSeg(1 To Numseguidores) ReDim ySeg(1 To Numseguidores) ReDim zSeg(1 To Numseguidores) ReDim XSEGUIDOR(1 To Numseguidores) ReDim YSEGUIDOR(1 To Numseguidores) For posicion = (i - (Numseguidores - 1)) To i

ii = ii + 1 zSeg(ii) = Val(zDibujo(posicion)) xSeg(ii) = Val(xDibujo(posicion)) ySeg(ii) = Val(yDibujo(posicion))

Next

108

XSEGUIDOR() = xSeg() YSEGUIDOR() = ySeg()

'Text1.Text = ySeg(NumSeguidores) Dim ORDENX() As Single: Dim POSICIONX() As Integer

ReDim ORDENX(1 To Numseguidores) ReDim POSICIONX(1 To Numseguidores)

compara = 0.1 j=0

For j = 1 To Numseguidores compara = 0.1 For i = 1 To Numseguidores If xSeg(i) > compara Then compara = xSeg(i) posicion = i

End If Next ORDENX(j) = compara POSICIONX(j) = posicion xSeg(posicion) = 0 Next

'Text1.Text = ORDENX(83)

Dim ORDENY() As Single: Dim POSICIONY() As Integer

ReDim ORDENY(1 To Numseguidores) ReDim POSICIONY(1 To Numseguidores)

compara = 0.1 j=0

For j = 1 To Numseguidores

109

compara = 0.1 For i = 1 To Numseguidores If ySeg(i) > compara Then compara = ySeg(i) posicion = i

End If Next ORDENY(j) = compara POSICIONY(j) = posicion ySeg(posicion) = 0 Next

xSeg() = ORDENX() ii = 0

For j = 1 To Numseguidores If xSeg(j) <> 0 Then compara = xSeg(j) ii = ii + 1 For i = 1 To Numseguidores

If xSeg(i) = compara Then xSeg(i) = 0 End If Next End If Next 'Text1.Text = ii Dim jj As Integer

110

ySeg() = ORDENY() jj = 0

For j = 1 To Numseguidores If ySeg(j) <> 0 Then compara = ySeg(j) jj = jj + 1 For i = 1 To Numseguidores If ySeg(i) = compara Then ySeg(i) = 0 End If Next End If Next 'Text1.Text = ORDENX(3) Dim PoscSegX1() As Single: Dim PoscSegY1() As Single: Dim PoscSegZ1() As Single

Dim a As Integer: Dim b As Integer Dim posx() As Integer: Dim posy() As Integer

ReDim posx(1 To Numseguidores) b=0 a=0 xSeg() = ORDENX()

For i = 1 To Numseguidores If xSeg(i) <> 0 Then b=b+1 compara = xSeg(i) For j = 1 To Numseguidores If xSeg(j) = compara Then a = POSICIONX(j) posx(a) = b xSeg(j) = 0

End If

111

Next End If Next

ReDim posy(1 To Numseguidores) b=0 a=0 ySeg() = ORDENY()

For i = 1 To Numseguidores If ySeg(i) <> 0 Then b=b+1 compara = ySeg(i) For j = 1 To Numseguidores If ySeg(j) = compara Then a = POSICIONY(j) posy(a) = b ySeg(j) = 0

End If Next End If Next

'Text1.Text = posx(15) Dim c As Integer

ReDim PoscSegX1(1 To ii, 1 To jj): ReDim PoscSegY1(1 To ii, 1 To jj): ReDim PoscSegZ1(1 To ii, 1 To jj)

For i = 1 To Numseguidores For j = 1 To Numseguidores If POSICIONX(j) = i Then a = posx(i) b = posy(i) c = POSICIONX(j)

112

PoscSegX1(a, b) = XSEGUIDOR(c) PoscSegY1(a, b) = YSEGUIDOR(c) PoscSegZ1(a, b) = zSeg(c) End If Next Next

' Text1.Text = PoscSegX1(ii, jj)

Dim PoscSegX() As Single: Dim PoscSegY() As Single: Dim PoscSegZ() As Single ReDim PoscSegX(ii, jj): ReDim PoscSegY(ii, jj): ReDim PoscSegZ(ii, jj) i=0 j=0

For a = ii To 1 Step -1 i=i+1 For b = jj To 1 Step -1 j=j+1 PoscSegX(i, j) = PoscSegX1(a, b) PoscSegY(i, j) = PoscSegY1(a, b) PoscSegZ(i, j) = PoscSegZ1(a, b) Next j=0 Next

Dim Distancia1 As Single: Dim Distancia2 As Single Dim AlturaColumna As Single

AlturaP = txtAltura.Text BaseP = txtBase.Text AlturaColumna = txtAltColumna.Text AngMax = (90 - txtAngMax.Text) * PI / 180

Dim XG1 As Single Dim DNS As Single: Dim DEO As Single

'VARIABLES PARA CLCULO DEL REA DE LA SOMBRA

113

Dim r1 As Single: Dim r2 As Single: Dim r3 As Single Dim s1 As Single: Dim s2 As Single: Dim s3 As Single Dim t1 As Single: Dim t2 As Single: Dim t3 As Single Dim v1 As Single: Dim v2 As Single: Dim v3 As Single Dim w1 As Single: Dim w2 As Single: Dim w3 As Single Dim u1 As Single: Dim u2 As Single: Dim u3 As Single Dim d As Single: Dim e As Single: Dim f As Single Dim a1 As Double: Dim b1 As Single: Dim a3 As Single Dim a2 As Single: Dim b2 As Single: Dim b3 As Single Dim X: Dim Y As Single: Dim z As Single Dim basex As Single: Dim basey As Single: Dim Area As Single Dim sy As Single: Dim sx As Single Dim XLFilas As Single: Dim YLFilas As Single Dim XLCOlumnas As Single: Dim YLColumnas As Single Dim NumColumnas As Integer: Dim NumFilas As Integer: Dim SeparacionFilas As Single: Dim SeparacionColumnas As Single Dim Perdidas As Single: Dim rep As Integer Dim pasos As Integer

'Dia = txtDia.Text 'HoraDia = txtHora.Text Dim zrecta As Single

Dim RA1 As Single: Dim RB1 As Single: Dim RC1 As Single Dim RA2 As Single: Dim RB2 As Single: Dim RC2 As Single Dim PerdidasNS As Single: Dim GananciasNS As Single Dim PerdidasEO As Single: Dim GananciasEO As Single Dim PerdidasNSprov As Single: Dim GananciasNSprov As Single Dim PerdidasEOprov As Single: Dim GananciasEOprov As Single

PerdidasNS = 0 PerdidasEO = 0 'GananciasNS = 1 'GananciasEO = 1

Dia = 0

Dim Seguidor As Integer: Dim sc As Single: Dim AlturaPreal As Single Dim AreaPerdidas As Single: Dim AreaPerdidasTotal As Single: Dim AreaTotal As Single Dim DiaMes As Integer: Dim Mes As Integer: Dim FinMes As Integer Dim SeguidorNumero As Integer Dim XSEGFijo As Single: Dim YSEGFijo As Single

Dim ApExcel As Variant Dim PorcPerdidas As Single

114

Set ApExcel = CreateObject("Excel.application")

' Hace que Excel se vea

ApExcel.Visible = True

'Agrega un nuevo Libro

ApExcel.workbooks.Add ApExcel.cells(1, 2).formula = "Enero" ApExcel.cells(1, 3).formula = "Febrero" ApExcel.cells(1, 4).formula = "Marzo" ApExcel.cells(1, 5).formula = "Abril" ApExcel.cells(1, 6).formula = "Mayo" ApExcel.cells(1, 7).formula = "Junio" ApExcel.cells(1, 8).formula = "Julio" ApExcel.cells(1, 9).formula = "Agosto" ApExcel.cells(1, 10).formula = "Septiembre" ApExcel.cells(1, 11).formula = "Octubre" ApExcel.cells(1, 12).formula = "Noviembre" ApExcel.cells(1, 13).formula = "Diciembre" ApExcel.range("b1:m1").Font.Size = 10 ApExcel.range("b1:m1").Font.Bold = True

SeguidorNumero = 0

For a = 1 To ii For b = 1 To jj XSEGFijo = PoscSegX(a, b) YSEGFijo = PoscSegY(a, b) If XSEGFijo <> 0 Then SeguidorNumero = SeguidorNumero + 1 For Mes = 1 To 12 Select Case Mes Case 4, 6, 9, 11

115

FinMes = 30 Case 1, 3, 5, 7, 8, 10, 12 FinMes = 31 Case 2 FinMes = 28 End Select

For DiaMes = 1 To FinMes Dia = Dia + 1 For Seguidor = 1 To 8 For HoraDia = 0 To 24 Step 0.5

Azimut = CalculoAngulos2(Dia, HoraDia) Altura = CalculoAngulos1(Dia, HoraDia) If Altura = 0 Then

AreaPerdidas = 0 Area = 0

ElseIf HoraDia = 12 Then AreaPerdidas = 0 Area = BaseP * AlturaP Else If Seguidor = 5 Or Seguidor = 7 Then If a = ii Then basex = 0 basey = 0 ElseIf b = jj And Seguidor = 5 Then basex = 0 basey = 0 ElseIf b = 1 And Seguidor = 7 Then basex = 0 basey = 0 Else If Seguidor = 5 And Azimut < PI / 2 Then

116

basex = 0 basey = 0 ElseIf Seguidor = 7 And Azimut > PI / 2 Then basex = 0 basey = 0 Else

If Seguidor = 5 Then sx = -PoscSegX(a + 1, b + 1) + XSEGFijo sy = -PoscSegY(a + 1, b + 1) + YSEGFijo ElseIf Seguidor = 7 Then sx = -PoscSegX(a + 1, b - 1) + XSEGFijo sy = -PoscSegY(a + 1, b - 1) + YSEGFijo End If

If sx = 0 Then basex = 0 basey = 0 Else

r1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 0, AlturaColumna, AngMax) + sx r2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 0, AlturaColumna, AngMax) + sy r3 = LocalesAGlobales(Dia, HoraDia, 3, 2, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 0, AlturaColumna, AngMax) + sx s2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 0, AlturaColumna, AngMax) + sy s3 = LocalesAGlobales(Dia, HoraDia, 3, 3, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 1, AlturaColumna, AngMax) + sx t2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 1, AlturaColumna, AngMax) + sy t3 = 0

'El plano va a ser de la forma: v1*x+v2*y+v3*z+d=0 a1 = s1 - t1: a2 = s2 - t2: a3 = s3 - t3 b1 = t1 - r1: b2 = t2 - r2: b3 = t3 - r3

v1 = (a2 * b3) - (a3 * b2) v2 = -((a1 * b3) - (a3 * b1)) v3 = (a1 * b2) - (a2 * b1) d = -s1 * v1 - s2 * v2 - s3 * v3

117

'vuelvo a definir 3 puntos 'R=(r1, r2, r3) S=(s1, s2, s3)

T=(t1, t2, t3) 'Este

r1 = LocalesAGlobales(Dia, HoraDia, 1, 1, 0, AlturaColumna, AngMax) plano corresponde al segundo seguidor r2 = LocalesAGlobales(Dia, HoraDia, 2, 1, 0, AlturaColumna, AngMax) 'donde sf ser la distancia de separacin entre filas r3 = LocalesAGlobales(Dia, HoraDia, 3, 1, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 0, AlturaColumna, AngMax) s2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 0, AlturaColumna, AngMax) s3 = LocalesAGlobales(Dia, HoraDia, 3, 2, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 0, AlturaColumna, AngMax) t2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 0, AlturaColumna, AngMax) t3 = LocalesAGlobales(Dia, HoraDia, 3, 3, 0, AlturaColumna, AngMax) a1 = s1 - t1: a2 = s2 - t2: a3 = s3 - t3 b1 = t1 - r1: b2 = t2 - r2: b3 = t3 - r3 'El plano va a ser de la forma: w1*x+w2*y+w3*z+e=0 w1 = (a2 * b3) - (a3 * b2) w2 = -((a1 * b3) - (a3 * b1)) w3 = (a1 * b2) - (a2 * b1) e = -s1 * w1 - s2 * w2 - s3 * w3 'Luego la recta interseccin vendr definida por: v1*x+v2*y+v3*z+d=0 y w1*x+w2*y+w3*z+e=0

'voy a comprobar que la sombra de un seguidor interseca con el otro 'para ello, voy a comparar alturas. X = LocalesAGlobales(Dia, HoraDia, 1, 1, 0, AlturaColumna, AngMax) z = LocalesAGlobales(Dia, HoraDia, 3, 1, 0, AlturaColumna, AngMax) zrecta = -(((v1 - (w1 * v2 / w2)) * X) + (d - (e * v2 / w2))) / (v3 - (w3 * v2 / w2)) If zrecta < z Then basex = 0 basey = 0 Else If Azimut > PI / 2 And Seguidor = 5 Then r1 = LocalesAGlobales(Dia, HoraDia, 1, 1, 0, AlturaColumna, AngMax) + sx r2 = LocalesAGlobales(Dia, HoraDia, 2, 1, 0, AlturaColumna, AngMax) + sy r3 = LocalesAGlobales(Dia, HoraDia, 3, 1, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 0, AlturaColumna, AngMax) + sx s2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 0, AlturaColumna, AngMax) + sy s3 = LocalesAGlobales(Dia, HoraDia, 3, 2, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 1, AlturaColumna, AngMax) + sx t2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 1, AlturaColumna, AngMax) + sy t3 = 0

ElseIf Azimut < PI / 4 And Seguidor = 7 Then r1 = LocalesAGlobales(Dia, HoraDia, 1, 1, 0, AlturaColumna, AngMax) + sx

118

r2 = LocalesAGlobales(Dia, HoraDia, 2, 1, 0, AlturaColumna, AngMax) + sy r3 = LocalesAGlobales(Dia, HoraDia, 3, 1, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 0, AlturaColumna, AngMax) + sx s2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 0, AlturaColumna, AngMax) + sy s3 = LocalesAGlobales(Dia, HoraDia, 3, 2, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 1, AlturaColumna, AngMax) + sx t2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 1, AlturaColumna, AngMax) + sy t3 = 0 ElseIf PI / 2 > Azimut And Seguidor = 7 Then r1 = LocalesAGlobales(Dia, HoraDia, 1, 4, 0, AlturaColumna, AngMax) + sx r2 = LocalesAGlobales(Dia, HoraDia, 2, 4, 0, AlturaColumna, AngMax) + sy r3 = LocalesAGlobales(Dia, HoraDia, 3, 4, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 0, AlturaColumna, AngMax) + sx s2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 0, AlturaColumna, AngMax) + sy s3 = LocalesAGlobales(Dia, HoraDia, 3, 3, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 1, AlturaColumna, AngMax) + sx t2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 1, AlturaColumna, AngMax) + sy t3 = 0

End If a1 = s1 - t1: a2 = s2 - t2: a3 = s3 - t3 b1 = t1 - r1: b2 = t2 - r2: b3 = t3 - r3

u1 = (a2 * b3) - (a3 * b2) u2 = -((a1 * b3) - (a3 * b1)) u3 = (a1 * b2) - (a2 * b1) f = -s1 * u1 - s2 * u2 - s3 * u3

'Luego la recta interseccin vendr definida por: u1*x+u2*y+u3*z+f=0 y w1*x+w2*y+w3*z+e=0 RA1 = v1 - (v3 * w1 / w3): RB1 = v2 - (v3 * w2 / w3): RC1 = d - (v3 * e / w3) RA2 = u1 - (u3 * w1 / w3): RB2 = u2 - (u3 * w2 / w3): RC2 = f - (u3 * e / w3) 'hallo x e y de la interseccin X = ((RB1 * RC2 / RB2) - RC1) / (RA1 - (RB1 * RA2 / RB2)) Y = -(((RA2 * X) + RC2) / RB2) 'Dim XLFilas As Single: Dim YLFilas As Single: Dim basex As Single: Dim basey As Single XLFilas = (X * Cos(Azimut)) + (Y * Sin(Azimut)) YLFilas = (-X * Sin(Azimut)) + (Y * Cos(Azimut)) AlturaPreal = YLSeguidor(Dia, HoraDia, 1, 0, AlturaColumna, AngMax) If BaseP / 2 > XLFilas And XLFilas > -BaseP / 2 Then

119

If AlturaPreal > YLFilas And YLFilas > -AlturaPreal Then If Azimut > PI / 2 And Seguidor = 5 Then basex = BaseP / 2 + XLFilas basey = (AlturaP / 2) - ((YLFilas) / Cos(AnguloNormal))

ElseIf Azimut < PI / 4 And Seguidor = 7 Then basex = BaseP / 2 + XLFilas basey = (AlturaP / 2) - ((YLFilas) / Cos(AnguloNormal)) ElseIf PI / 2 > Azimut And Seguidor = 7 Then basex = BaseP / 2 - XLFilas basey = (AlturaP / 2) - ((YLFilas) / Cos(AnguloNormal)) End If Else basex = 0 basey = 0 End If Else basex = 0 basey = 0 End If End If End If End If End If End If If Seguidor = 8 Then If b = 1 Then basex = 0 basey = 0

ElseIf PoscSegX(a, b - 1) = 0 Then basex = 0 basey = 0 Else sx = -PoscSegX(a, b - 1) + XSEGFijo sy = -PoscSegY(a, b - 1) + YSEGFijo

120

r1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 0, AlturaColumna, AngMax) r2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 0, AlturaColumna, AngMax) + sy r3 = LocalesAGlobales(Dia, HoraDia, 3, 2, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 0, AlturaColumna, AngMax) s2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 0, AlturaColumna, AngMax) + sy s3 = LocalesAGlobales(Dia, HoraDia, 3, 3, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 1, AlturaColumna, AngMax) t2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 1, AlturaColumna, AngMax) + sy t3 = 0

'El plano va a ser de la forma: v1*x+v2*y+v3*z+d=0 a1 = s1 - t1: a2 = s2 - t2: a3 = s3 - t3 b1 = t1 - r1: b2 = t2 - r2: b3 = t3 - r3

v1 = (a2 * b3) - (a3 * b2) v2 = -((a1 * b3) - (a3 * b1)) v3 = (a1 * b2) - (a2 * b1) d = -s1 * v1 - s2 * v2 - s3 * v3

'vuelvo a definir 3 puntos 'R=(r1, r2, r3) S=(s1, s2, s3)

T=(t1, t2, t3) 'Este

r1 = LocalesAGlobales(Dia, HoraDia, 1, 1, 0, AlturaColumna, AngMax) plano corresponde al segundo seguidor r2 = LocalesAGlobales(Dia, HoraDia, 2, 1, 0, AlturaColumna, AngMax) 'donde sf ser la distancia de separacin entre filas r3 = LocalesAGlobales(Dia, HoraDia, 3, 1, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 0, AlturaColumna, AngMax) s2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 0, AlturaColumna, AngMax) s3 = LocalesAGlobales(Dia, HoraDia, 3, 2, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 0, AlturaColumna, AngMax) t2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 0, AlturaColumna, AngMax) t3 = LocalesAGlobales(Dia, HoraDia, 3, 3, 0, AlturaColumna, AngMax) a1 = s1 - t1: a2 = s2 - t2: a3 = s3 - t3 b1 = t1 - r1: b2 = t2 - r2: b3 = t3 - r3 'El plano va a ser de la forma: w1*x+w2*y+w3*z+e=0 w1 = (a2 * b3) - (a3 * b2) w2 = -((a1 * b3) - (a3 * b1)) w3 = (a1 * b2) - (a2 * b1) e = -s1 * w1 - s2 * w2 - s3 * w3 'Luego la recta interseccin vendr definida por: v1*x+v2*y+v3*z+d=0 y w1*x+w2*y+w3*z+e=0

'voy a comprobar que la sombra de un seguidor interseca con el otro 'para ello, voy a comparar alturas.

121

X = LocalesAGlobales(Dia, HoraDia, 1, 1, 0, AlturaColumna, AngMax) z = LocalesAGlobales(Dia, HoraDia, 3, 1, 0, AlturaColumna, AngMax) zrecta = -(((v1 - (w1 * v2 / w2)) * X) + (d - (e * v2 / w2))) / (v3 - (w3 * v2 / w2)) If zrecta > z Then If Azimut >= 0 Then r1 = LocalesAGlobales(Dia, HoraDia, 1, 4, 0, AlturaColumna, AngMax) r2 = LocalesAGlobales(Dia, HoraDia, 2, 4, 0, AlturaColumna, AngMax) + sy r3 = LocalesAGlobales(Dia, HoraDia, 3, 4, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 0, AlturaColumna, AngMax) s2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 0, AlturaColumna, AngMax) + sy s3 = LocalesAGlobales(Dia, HoraDia, 3, 3, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 1, AlturaColumna, AngMax) t2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 1, AlturaColumna, AngMax) + sy t3 = 0

ElseIf Azimut < 0 Then r1 = LocalesAGlobales(Dia, HoraDia, 1, 1, 0, AlturaColumna, AngMax) r2 = LocalesAGlobales(Dia, HoraDia, 2, 1, 0, AlturaColumna, AngMax) + sy r3 = LocalesAGlobales(Dia, HoraDia, 3, 1, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 0, AlturaColumna, AngMax) s2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 0, AlturaColumna, AngMax) + sy s3 = LocalesAGlobales(Dia, HoraDia, 3, 2, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 1, AlturaColumna, AngMax) t2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 1, AlturaColumna, AngMax) + sy t3 = 0 End If

'El plano va a ser de la forma: u1*x+u2*y+u3*z+f=0 a1 = s1 - t1: a2 = s2 - t2: a3 = s3 - t3 b1 = t1 - r1: b2 = t2 - r2: b3 = t3 - r3

u1 = (a2 * b3) - (a3 * b2) u2 = -((a1 * b3) - (a3 * b1)) u3 = (a1 * b2) - (a2 * b1) f = -s1 * u1 - s2 * u2 - s3 * u3

'Luego la recta interseccin vendr definida por: u1*x+u2*y+u3*z+f=0 y w1*x+w2*y+w3*z+e=0 RA1 = v1 - (v3 * w1 / w3): RB1 = v2 - (v3 * w2 / w3): RC1 = d - (v3 * e / w3) RA2 = u1 - (u3 * w1 / w3): RB2 = u2 - (u3 * w2 / w3): RC2 = f - (u3 * e / w3) 'hallo x e y de la interseccin

122

X = ((RB1 * RC2 / RB2) - RC1) / (RA1 - (RB1 * RA2 / RB2)) Y = -(((RA2 * X) + RC2) / RB2) 'Dim XLFilas As Single: Dim YLFilas As Single: Dim basex As Single: Dim basey As Single XLFilas = (X * Cos(Azimut)) + (Y * Sin(Azimut)) YLFilas = (-X * Sin(Azimut)) + (Y * Cos(Azimut)) AlturaPreal = YLSeguidor(Dia, HoraDia, 1, 0, AlturaColumna, AngMax)

If BaseP / 2 > XLFilas And XLFilas > -BaseP / 2 Then If AlturaPreal > YLFilas And YLFilas > -AlturaPreal Then If Azimut >= 0 Then basex = BaseP / 2 - XLFilas basey = (AlturaP / 2) - ((YLFilas) / Cos(AnguloNormal)) ElseIf Azimut < 0 Then basex = BaseP / 2 + XLFilas basey = (AlturaP / 2) - ((YLFilas) / Cos(AnguloNormal)) End If Else basex = 0 basey = 0 End If Else basex = 0 basey = 0 End If Else basex = 0 basey = 0 End If End If End If If Seguidor = 6 Then

If a = ii Then basex = 0 basey = 0 ElseIf PoscSegX(a + 1, b) = 0 Then basex = 0

123

basey = 0 Else sx = -PoscSegX(a + 1, b) + XSEGFijo sy = -PoscSegY(a + 1, b) + YSEGFijo

r1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 0, AlturaColumna, AngMax) + sx r2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 0, AlturaColumna, AngMax) r3 = LocalesAGlobales(Dia, HoraDia, 3, 2, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 0, AlturaColumna, AngMax) + sx s2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 0, AlturaColumna, AngMax) s3 = LocalesAGlobales(Dia, HoraDia, 3, 3, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 1, AlturaColumna, AngMax) + sx t2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 1, AlturaColumna, AngMax) t3 = 0

'El plano va a ser de la forma: v1*x+v2*y+v3*z+d=0 a1 = s1 - t1: a2 = s2 - t2: a3 = s3 - t3 b1 = t1 - r1: b2 = t2 - r2: b3 = t3 - r3

v1 = (a2 * b3) - (a3 * b2) v2 = -((a1 * b3) - (a3 * b1)) v3 = (a1 * b2) - (a2 * b1) d = -s1 * v1 - s2 * v2 - s3 * v3

'vuelvo a definir 3 puntos 'R=(r1, r2, r3) S=(s1, s2, s3)

T=(t1, t2, t3) 'Este 'donde

r1 = LocalesAGlobales(Dia, HoraDia, 1, 1, 0, AlturaColumna, AngMax) plano corresponde al segundo seguidor r2 = LocalesAGlobales(Dia, HoraDia, 2, 1, 0, AlturaColumna, AngMax) sf ser la distancia de separacin entre filas r3 = LocalesAGlobales(Dia, HoraDia, 3, 1, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 0, AlturaColumna, AngMax) s2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 0, AlturaColumna, AngMax) s3 = LocalesAGlobales(Dia, HoraDia, 3, 2, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 0, AlturaColumna, AngMax) t2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 0, AlturaColumna, AngMax) t3 = LocalesAGlobales(Dia, HoraDia, 3, 3, 0, AlturaColumna, AngMax) a1 = s1 - t1: a2 = s2 - t2: a3 = s3 - t3 b1 = t1 - r1: b2 = t2 - r2: b3 = t3 - r3 'El plano va a ser de la forma: w1*x+w2*y+w3*z+e=0 w1 = (a2 * b3) - (a3 * b2) w2 = -((a1 * b3) - (a3 * b1)) w3 = (a1 * b2) - (a2 * b1) e = -s1 * w1 - s2 * w2 - s3 * w3

124

'Luego la recta interseccin vendr definida por: v1*x+v2*y+v3*z+d=0 y w1*x+w2*y+w3*z+e=0

'voy a comprobar que la sombra de un seguidor interseca con el otro 'para ello, voy a comparar alturas. X = LocalesAGlobales(Dia, HoraDia, 1, 1, 0, AlturaColumna, AngMax) z = LocalesAGlobales(Dia, HoraDia, 3, 1, 0, AlturaColumna, AngMax) zrecta = -(((v1 - (w1 * v2 / w2)) * X) + (d - (e * v2 / w2))) / (v3 - (w3 * v2 / w2)) If zrecta > z Then

If Azimut < PI / 2 Then r1 = LocalesAGlobales(Dia, HoraDia, 1, 1, 0, AlturaColumna, AngMax) + sx r2 = LocalesAGlobales(Dia, HoraDia, 2, 1, 0, AlturaColumna, AngMax) r3 = LocalesAGlobales(Dia, HoraDia, 3, 1, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 0, AlturaColumna, AngMax) + sx s2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 0, AlturaColumna, AngMax) s3 = LocalesAGlobales(Dia, HoraDia, 3, 2, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 1, AlturaColumna, AngMax) + sx t2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 1, AlturaColumna, AngMax) t3 = 0 ElseIf Azimut >= PI / 2 Then r1 = LocalesAGlobales(Dia, HoraDia, 1, 4, 0, AlturaColumna, AngMax) + sx r2 = LocalesAGlobales(Dia, HoraDia, 2, 4, 0, AlturaColumna, AngMax) r3 = LocalesAGlobales(Dia, HoraDia, 3, 4, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 0, AlturaColumna, AngMax) + sx s2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 0, AlturaColumna, AngMax) s3 = LocalesAGlobales(Dia, HoraDia, 3, 3, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 1, AlturaColumna, AngMax) + sx t2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 1, AlturaColumna, AngMax) t3 = 0

End If 'El plano va a ser de la forma: u1*x+u2*y+u3*z+f=0 a1 = s1 - t1: a2 = s2 - t2: a3 = s3 - t3 b1 = t1 - r1: b2 = t2 - r2: b3 = t3 - r3

u1 = (a2 * b3) - (a3 * b2) u2 = -((a1 * b3) - (a3 * b1)) u3 = (a1 * b2) - (a2 * b1) f = -s1 * u1 - s2 * u2 - s3 * u3 'Luego la recta interseccin vendr definida por: u1*x+u2*y+u3*z+f=0 y w1*x+w2*y+w3*z+e=0

125

RA1 = v1 - (v3 * w1 / w3): RB1 = v2 - (v3 * w2 / w3): RC1 = d - (v3 * e / w3) RA2 = u1 - (u3 * w1 / w3): RB2 = u2 - (u3 * w2 / w3): RC2 = f - (u3 * e / w3) 'hallo x e y de la interseccin X = ((RB1 * RC2 / RB2) - RC1) / (RA1 - (RB1 * RA2 / RB2)) Y = -(((RA2 * X) + RC2) / RB2)

XLFilas = (X * Cos(Azimut)) + (Y * Sin(Azimut)) YLFilas = (-X * Sin(Azimut)) + (Y * Cos(Azimut)) AlturaPreal = YLSeguidor(Dia, HoraDia, 1, 0, AlturaColumna, AngMax) If BaseP / 2 > XLFilas And XLFilas > -BaseP / 2 Then If AlturaPreal > YLFilas And YLFilas > -AlturaPreal Then If Azimut >= PI / 2 Then basex = BaseP / 2 - XLFilas basey = (AlturaP / 2) - ((YLFilas) / Cos(AnguloNormal)) ElseIf Azimut < PI / 2 Then basex = BaseP / 2 + XLFilas basey = (AlturaP / 2) - ((YLFilas) / Cos(AnguloNormal)) End If Else basex = 0 basey = 0 End If Else basex = 0 basey = 0 End If Else basex = 0 basey = 0 End If End If End If

If Seguidor = 2 Then If a = 1 Then basex = 0 basey = 0 ElseIf PoscSegX(a - 1, b) = 0 Then basex = 0

126

basey = 0 Else

sx = -PoscSegX(a - 1, b) + XSEGFijo sy = -PoscSegY(a - 1, b) + YSEGFijo

'INTERSECCIN ENTRE 2 PLANOS 'ECUACIN DEL PLANO '3 PUNTOS 'R=(r1, r2, r3) S=(s1, s2, s3) T=(t1, t2, t3) r1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 0, AlturaColumna, AngMax) + sx r2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 0, AlturaColumna, AngMax) r3 = LocalesAGlobales(Dia, HoraDia, 3, 2, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 0, AlturaColumna, AngMax) + sx s2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 0, AlturaColumna, AngMax) s3 = LocalesAGlobales(Dia, HoraDia, 3, 3, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 1, AlturaColumna, AngMax) + sx t2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 1, AlturaColumna, AngMax) t3 = 0

'El plano va a ser de la forma: v1*x+v2*y+v3*z+d=0 a1 = s1 - t1: a2 = s2 - t2: a3 = s3 - t3 b1 = t1 - r1: b2 = t2 - r2: b3 = t3 - r3

v1 = ((a2 * b3) - (a3 * b2)) v2 = -((a1 * b3) - (a3 * b1)) v3 = ((a1 * b2) - (a2 * b1)) d = -s1 * v1 - s2 * v2 - s3 * v3

'vuelvo a definir 3 puntos 'R=(r1, r2, r3) S=(s1, s2, s3)

T=(t1, t2, t3) 'Este 'donde

r1 = LocalesAGlobales(Dia, HoraDia, 1, 1, 0, AlturaColumna, AngMax) plano corresponde al segundo seguidor r2 = LocalesAGlobales(Dia, HoraDia, 2, 1, 0, AlturaColumna, AngMax) sf ser la distancia de separacin entre filas r3 = LocalesAGlobales(Dia, HoraDia, 3, 1, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 0, AlturaColumna, AngMax) s2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 0, AlturaColumna, AngMax) s3 = LocalesAGlobales(Dia, HoraDia, 3, 2, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 0, AlturaColumna, AngMax) t2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 0, AlturaColumna, AngMax) t3 = LocalesAGlobales(Dia, HoraDia, 3, 3, 0, AlturaColumna, AngMax) a1 = s1 - t1: a2 = s2 - t2: a3 = s3 - t3 b1 = t1 - r1: b2 = t2 - r2: b3 = t3 - r3 'El plano va a ser de la forma: w1*x+w2*y+w3*z+e=0

127

w1 = ((a2 * b3) - (a3 * b2)) w2 = -((a1 * b3) - (a3 * b1)) w3 = ((a1 * b2) - (a2 * b1)) e = -s1 * w1 - s2 * w2 - s3 * w3 'Luego la recta interseccin vendr definida por: v1*x+v2*y+v3*z+d=0 y w1*x+w2*y+w3*z+e=0

'voy a comprobar que la sombra de un seguidor interseca con el otro 'para ello, voy a comparar alturas. X = LocalesAGlobales(Dia, HoraDia, 1, 1, 0, AlturaColumna, AngMax) z = LocalesAGlobales(Dia, HoraDia, 3, 1, 0, AlturaColumna, AngMax) zrecta = -(((v1 - (w1 * v2 / w2)) * X) + (d - (e * v2 / w2))) / (v3 - (w3 * v2 / w2)) If zrecta > z Then

If Azimut > -PI / 2 Then r1 = LocalesAGlobales(Dia, HoraDia, 1, 4, 0, AlturaColumna, AngMax) + sx r2 = LocalesAGlobales(Dia, HoraDia, 2, 4, 0, AlturaColumna, AngMax) r3 = LocalesAGlobales(Dia, HoraDia, 3, 4, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 0, AlturaColumna, AngMax) + sx s2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 0, AlturaColumna, AngMax) s3 = LocalesAGlobales(Dia, HoraDia, 3, 3, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 1, AlturaColumna, AngMax) + sx t2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 1, AlturaColumna, AngMax) t3 = 0 ElseIf Azimut <= -PI / 2 Then r1 = LocalesAGlobales(Dia, HoraDia, 1, 1, 0, AlturaColumna, AngMax) + sx r2 = LocalesAGlobales(Dia, HoraDia, 2, 1, 0, AlturaColumna, AngMax) r3 = LocalesAGlobales(Dia, HoraDia, 3, 1, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 0, AlturaColumna, AngMax) + sx s2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 0, AlturaColumna, AngMax) s3 = LocalesAGlobales(Dia, HoraDia, 3, 2, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 1, AlturaColumna, AngMax) + sx t2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 1, AlturaColumna, AngMax) t3 = 0

End If 'El plano va a ser de la forma: u1*x+u2*y+u3*z+f=0 a1 = s1 - t1: a2 = s2 - t2: a3 = s3 - t3 b1 = t1 - r1: b2 = t2 - r2: b3 = t3 - r3

u1 = (a2 * b3) - (a3 * b2)

128

u2 = -((a1 * b3) - (a3 * b1)) u3 = (a1 * b2) - (a2 * b1) f = -s1 * u1 - s2 * u2 - s3 * u3 'Luego la recta interseccin vendr definida por: u1*x+u2*y+u3*z+f=0 y w1*x+w2*y+w3*z+e=0 RA1 = v1 - (v3 * w1 / w3): RB1 = v2 - (v3 * w2 / w3): RC1 = d - (v3 * e / w3) RA2 = u1 - (u3 * w1 / w3): RB2 = u2 - (u3 * w2 / w3): RC2 = f - (u3 * e / w3) 'hallo x e y de la interseccin X = ((RB1 * RC2 / RB2) - RC1) / (RA1 - (RB1 * RA2 / RB2)) Y = -(((RA2 * X) + RC2) / RB2)

XLFilas = (X * Cos(-Azimut)) + (Y * Sin(-Azimut)) YLFilas = (-X * Sin(-Azimut)) + (Y * Cos(-Azimut)) AlturaPreal = YLSeguidor(Dia, HoraDia, 1, 0, AlturaColumna, AngMax) If BaseP / 2 > XLFilas And XLFilas > -BaseP / 2 Then If AlturaPreal > YLFilas And YLFilas > -AlturaPreal Then If Azimut > -PI / 2 Then basex = BaseP / 2 - XLFilas basey = (AlturaP / 2) - ((YLFilas) / Cos(AnguloNormal)) ElseIf Azimut <= -PI / 2 Then basex = BaseP / 2 + XLFilas basey = (AlturaP / 2) - ((YLFilas) / Cos(AnguloNormal)) End If Else basex = 0 basey = 0 End If Else basex = 0 basey = 0 End If Else basex = 0 basey = 0 End If End If End If

If Seguidor = 3 Or Seguidor = 1 Then

129

If a = 1 Then basex = 0 basey = 0 ElseIf b = 1 And Seguidor = 1 Then basex = 0 basey = 0 ElseIf b = jj And Seguidor = 3 Then basex = 0 basey = 0 Else

If Seguidor = 3 And Azimut > -PI / 2 Then basex = 0 basey = 0 ElseIf Seguidor = 1 And Azimut < -PI / 2 Then basex = 0 basey = 0 Else

If Seguidor = 3 Then sx = -PoscSegX(a - 1, b + 1) + XSEGFijo sy = -PoscSegY(a - 1, b + 1) + YSEGFijo

ElseIf Seguidor = 1 Then

sx = -PoscSegX(a - 1, b - 1) + XSEGFijo sy = -PoscSegY(a - 1, b - 1) + YSEGFijo

End If

If sx = 0 Then basex = 0 basey = 0 Else r1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 0, AlturaColumna, AngMax) + sx r2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 0, AlturaColumna, AngMax) + sy r3 = LocalesAGlobales(Dia, HoraDia, 3, 2, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 0, AlturaColumna, AngMax) + sx

130

s2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 0, AlturaColumna, AngMax) + sy s3 = LocalesAGlobales(Dia, HoraDia, 3, 3, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 1, AlturaColumna, AngMax) + sx t2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 1, AlturaColumna, AngMax) + sy t3 = 0

'El plano va a ser de la forma: v1*x+v2*y+v3*z+d=0 a1 = s1 - t1: a2 = s2 - t2: a3 = s3 - t3 b1 = t1 - r1: b2 = t2 - r2: b3 = t3 - r3

v1 = (a2 * b3) - (a3 * b2) v2 = -((a1 * b3) - (a3 * b1)) v3 = (a1 * b2) - (a2 * b1) d = -s1 * v1 - s2 * v2 - s3 * v3

'vuelvo a definir 3 puntos 'R=(r1, r2, r3) S=(s1, s2, s3)

T=(t1, t2, t3) 'Este

r1 = LocalesAGlobales(Dia, HoraDia, 1, 1, 0, AlturaColumna, AngMax) plano corresponde al segundo seguidor r2 = LocalesAGlobales(Dia, HoraDia, 2, 1, 0, AlturaColumna, AngMax) 'donde sf ser la distancia de separacin entre filas r3 = LocalesAGlobales(Dia, HoraDia, 3, 1, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 0, AlturaColumna, AngMax) s2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 0, AlturaColumna, AngMax) s3 = LocalesAGlobales(Dia, HoraDia, 3, 2, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 0, AlturaColumna, AngMax) t2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 0, AlturaColumna, AngMax) t3 = LocalesAGlobales(Dia, HoraDia, 3, 3, 0, AlturaColumna, AngMax) a1 = s1 - t1: a2 = s2 - t2: a3 = s3 - t3 b1 = t1 - r1: b2 = t2 - r2: b3 = t3 - r3 'El plano va a ser de la forma: w1*x+w2*y+w3*z+e=0 w1 = (a2 * b3) - (a3 * b2) w2 = -((a1 * b3) - (a3 * b1)) w3 = (a1 * b2) - (a2 * b1) e = -s1 * w1 - s2 * w2 - s3 * w3 'Luego la recta interseccin vendr definida por: v1*x+v2*y+v3*z+d=0 y w1*x+w2*y+w3*z+e=0

'voy a comprobar que la sombra de un seguidor interseca con el otro 'para ello, voy a comparar alturas. X = LocalesAGlobales(Dia, HoraDia, 1, 1, 0, AlturaColumna, AngMax) z = LocalesAGlobales(Dia, HoraDia, 3, 1, 0, AlturaColumna, AngMax) zrecta = -(((v1 - (w1 * v2 / w2)) * X) + (d - (e * v2 / w2))) / (v3 - (w3 * v2 / w2)) If zrecta < z Then

131

'AreaPerdidas = 0 basex = 0 basey = 0 Else

If Azimut < -PI / 2 And Seguidor = 3 Then r1 = LocalesAGlobales(Dia, HoraDia, 1, 4, 0, AlturaColumna, AngMax) + sx r2 = LocalesAGlobales(Dia, HoraDia, 2, 4, 0, AlturaColumna, AngMax) + sy r3 = LocalesAGlobales(Dia, HoraDia, 3, 4, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 0, AlturaColumna, AngMax) + sx s2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 0, AlturaColumna, AngMax) + sy s3 = LocalesAGlobales(Dia, HoraDia, 3, 3, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 1, AlturaColumna, AngMax) + sx t2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 1, AlturaColumna, AngMax) + sy t3 = 0

ElseIf Azimut > -PI / 4 And Seguidor = 1 Then r1 = LocalesAGlobales(Dia, HoraDia, 1, 4, 0, AlturaColumna, AngMax) + sx r2 = LocalesAGlobales(Dia, HoraDia, 2, 4, 0, AlturaColumna, AngMax) + sy r3 = LocalesAGlobales(Dia, HoraDia, 3, 4, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 0, AlturaColumna, AngMax) + sx s2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 0, AlturaColumna, AngMax) + sy s3 = LocalesAGlobales(Dia, HoraDia, 3, 3, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 1, AlturaColumna, AngMax) + sx t2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 1, AlturaColumna, AngMax) + sy t3 = 0 ElseIf -PI / 2 < Azimut And Seguidor = 1 Then r1 = LocalesAGlobales(Dia, HoraDia, 1, 1, 0, AlturaColumna, AngMax) + sx r2 = LocalesAGlobales(Dia, HoraDia, 2, 1, 0, AlturaColumna, AngMax) + sy r3 = LocalesAGlobales(Dia, HoraDia, 3, 1, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 0, AlturaColumna, AngMax) + sx s2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 0, AlturaColumna, AngMax) + sy s3 = LocalesAGlobales(Dia, HoraDia, 3, 2, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 1, AlturaColumna, AngMax) + sx t2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 1, AlturaColumna, AngMax) + sy t3 = 0

End If a1 = s1 - t1: a2 = s2 - t2: a3 = s3 - t3 b1 = t1 - r1: b2 = t2 - r2: b3 = t3 - r3

132

u1 = (a2 * b3) - (a3 * b2) u2 = -((a1 * b3) - (a3 * b1)) u3 = (a1 * b2) - (a2 * b1) f = -s1 * u1 - s2 * u2 - s3 * u3

'Luego la recta interseccin vendr definida por: u1*x+u2*y+u3*z+f=0 y w1*x+w2*y+w3*z+e=0 RA1 = v1 - (v3 * w1 / w3): RB1 = v2 - (v3 * w2 / w3): RC1 = d - (v3 * e / w3) RA2 = u1 - (u3 * w1 / w3): RB2 = u2 - (u3 * w2 / w3): RC2 = f - (u3 * e / w3) 'hallo x e y de la interseccin X = ((RB1 * RC2 / RB2) - RC1) / (RA1 - (RB1 * RA2 / RB2)) Y = -(((RA2 * X) + RC2) / RB2) 'Dim XLFilas As Single: Dim YLFilas As Single: Dim basex As Single: Dim basey As Single XLFilas = (X * Cos(Azimut)) + (Y * Sin(Azimut)) YLFilas = (-X * Sin(Azimut)) + (Y * Cos(Azimut)) AlturaPreal = YLSeguidor(Dia, HoraDia, 1, 0, AlturaColumna, AngMax) If BaseP / 2 > XLFilas And XLFilas > -BaseP / 2 Then If AlturaPreal > YLFilas And YLFilas > -AlturaPreal Then

If Azimut < -PI / 2 And Seguidor = 3 Then basex = BaseP / 2 - XLFilas basey = (AlturaP / 2) - ((YLFilas) / Cos(AnguloNormal))

ElseIf Azimut > -PI / 4 And Seguidor = 1 Then basex = BaseP / 2 - XLFilas basey = (AlturaP / 2) - ((YLFilas) / Cos(AnguloNormal)) ElseIf -PI / 2 < -Azimut And Seguidor = 1 Then basex = BaseP / 2 + XLFilas basey = (AlturaP / 2) - ((YLFilas) / Cos(AnguloNormal)) End If Else basex = 0 basey = 0 End If Else basex = 0 basey = 0

133

End If End If End If End If End If End If

If Seguidor = 4 Then If b = jj Then basex = 0 basey = 0 ElseIf PoscSegX(a, b + 1) = 0 Then basex = 0 basey = 0 Else sx = -PoscSegX(a, b + 1) + XSEGFijo sy = -PoscSegY(a, b + 1) + YSEGFijo

r1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 0, AlturaColumna, AngMax) r2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 0, AlturaColumna, AngMax) + sy r3 = LocalesAGlobales(Dia, HoraDia, 3, 2, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 0, AlturaColumna, AngMax) s2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 0, AlturaColumna, AngMax) + sy s3 = LocalesAGlobales(Dia, HoraDia, 3, 3, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 1, AlturaColumna, AngMax) t2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 1, AlturaColumna, AngMax) + sy t3 = 0

'El plano va a ser de la forma: v1*x+v2*y+v3*z+d=0 a1 = s1 - t1: a2 = s2 - t2: a3 = s3 - t3 b1 = t1 - r1: b2 = t2 - r2: b3 = t3 - r3

v1 = (a2 * b3) - (a3 * b2) v2 = -((a1 * b3) - (a3 * b1)) v3 = (a1 * b2) - (a2 * b1) d = -s1 * v1 - s2 * v2 - s3 * v3

'vuelvo a definir 3 puntos 'R=(r1, r2, r3) S=(s1, s2, s3)

T=(t1, t2, t3) 'Este

r1 = LocalesAGlobales(Dia, HoraDia, 1, 1, 0, AlturaColumna, AngMax) plano corresponde al segundo seguidor r2 = LocalesAGlobales(Dia, HoraDia, 2, 1, 0, AlturaColumna, AngMax) 'donde sf ser la distancia de separacin entre filas

134

r3 = LocalesAGlobales(Dia, HoraDia, 3, 1, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 0, AlturaColumna, AngMax) s2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 0, AlturaColumna, AngMax) s3 = LocalesAGlobales(Dia, HoraDia, 3, 2, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 0, AlturaColumna, AngMax) t2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 0, AlturaColumna, AngMax) t3 = LocalesAGlobales(Dia, HoraDia, 3, 3, 0, AlturaColumna, AngMax) a1 = s1 - t1: a2 = s2 - t2: a3 = s3 - t3 b1 = t1 - r1: b2 = t2 - r2: b3 = t3 - r3 'El plano va a ser de la forma: w1*x+w2*y+w3*z+e=0 w1 = (a2 * b3) - (a3 * b2) w2 = -((a1 * b3) - (a3 * b1)) w3 = (a1 * b2) - (a2 * b1) e = -s1 * w1 - s2 * w2 - s3 * w3 'Luego la recta interseccin vendr definida por: v1*x+v2*y+v3*z+d=0 y w1*x+w2*y+w3*z+e=0

'voy a comprobar que la sombra de un seguidor interseca con el otro 'para ello, voy a comparar alturas. X = LocalesAGlobales(Dia, HoraDia, 1, 1, 0, AlturaColumna, AngMax) z = LocalesAGlobales(Dia, HoraDia, 3, 1, 0, AlturaColumna, AngMax) zrecta = -(((v1 - (w1 * v2 / w2)) * X) + (d - (e * v2 / w2))) / (v3 - (w3 * v2 / w2)) If zrecta > z Then If Azimut < 0 Then r1 = LocalesAGlobales(Dia, HoraDia, 1, 1, 0, AlturaColumna, AngMax) r2 = LocalesAGlobales(Dia, HoraDia, 2, 1, 0, AlturaColumna, AngMax) + sy r3 = LocalesAGlobales(Dia, HoraDia, 3, 1, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 0, AlturaColumna, AngMax) s2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 0, AlturaColumna, AngMax) + sy s3 = LocalesAGlobales(Dia, HoraDia, 3, 2, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 2, 1, AlturaColumna, AngMax) t2 = LocalesAGlobales(Dia, HoraDia, 2, 2, 1, AlturaColumna, AngMax) + sy t3 = 0

ElseIf Azimut >= 0 Then r1 = LocalesAGlobales(Dia, HoraDia, 1, 4, 0, AlturaColumna, AngMax) r2 = LocalesAGlobales(Dia, HoraDia, 2, 4, 0, AlturaColumna, AngMax) + sy r3 = LocalesAGlobales(Dia, HoraDia, 3, 4, 0, AlturaColumna, AngMax) s1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 0, AlturaColumna, AngMax) s2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 0, AlturaColumna, AngMax) + sy s3 = LocalesAGlobales(Dia, HoraDia, 3, 3, 0, AlturaColumna, AngMax) t1 = LocalesAGlobales(Dia, HoraDia, 1, 3, 1, AlturaColumna, AngMax) t2 = LocalesAGlobales(Dia, HoraDia, 2, 3, 1, AlturaColumna, AngMax) + sy

135

t3 = 0 End If

'El plano va a ser de la forma: u1*x+u2*y+u3*z+f=0 a1 = s1 - t1: a2 = s2 - t2: a3 = s3 - t3 b1 = t1 - r1: b2 = t2 - r2: b3 = t3 - r3

u1 = (a2 * b3) - (a3 * b2) u2 = -((a1 * b3) - (a3 * b1)) u3 = (a1 * b2) - (a2 * b1) f = -s1 * u1 - s2 * u2 - s3 * u3

'Luego la recta interseccin vendr definida por: u1*x+u2*y+u3*z+f=0 y w1*x+w2*y+w3*z+e=0 RA1 = v1 - (v3 * w1 / w3): RB1 = v2 - (v3 * w2 / w3): RC1 = d - (v3 * e / w3) RA2 = u1 - (u3 * w1 / w3): RB2 = u2 - (u3 * w2 / w3): RC2 = f - (u3 * e / w3) 'hallo x e y de la interseccin X = ((RB1 * RC2 / RB2) - RC1) / (RA1 - (RB1 * RA2 / RB2)) Y = -(((RA2 * X) + RC2) / RB2) 'Dim XLFilas As Single: Dim YLFilas As Single: Dim basex As Single: Dim basey As Single XLFilas = (X * Cos(Azimut)) + (Y * Sin(Azimut)) YLFilas = (-X * Sin(Azimut)) + (Y * Cos(Azimut)) AlturaPreal = YLSeguidor(Dia, HoraDia, 1, 0, AlturaColumna, AngMax)

If BaseP / 2 > XLFilas And XLFilas > -BaseP / 2 Then If AlturaPreal > YLFilas And YLFilas > -AlturaPreal Then If Azimut < 0 Then basex = BaseP / 2 + XLFilas basey = (AlturaP / 2) - ((YLFilas) / Cos(AnguloNormal)) ElseIf Azimut >= 0 Then basex = BaseP / 2 - XLFilas basey = (AlturaP / 2) - ((YLFilas) / Cos(AnguloNormal)) End If Else basex = 0 basey = 0 End If

136

Else basex = 0 basey = 0 End If Else basex = 0 basey = 0 End If End If End If AreaPerdidas = basex * basey Area = BaseP * AlturaP AreaPerdidasTotal = AreaPerdidasTotal + AreaPerdidas AreaTotal = AreaTotal + Area End If

Next Next Next PorcPerdidas = (AreaPerdidasTotal / AreaTotal) ApExcel.cells(SeguidorNumero + 1, 1).formula = "Seguidor" & SeguidorNumero ApExcel.cells(SeguidorNumero + 1, 1).Font.Size = 10 ApExcel.cells(SeguidorNumero + 1, 1).Font.Bold = True ApExcel.cells(SeguidorNumero + 1, Mes + 1).formula = PorcPerdidas ApExcel.cells(SeguidorNumero + 1, Mes + 1).Style = "Percent" ApExcel.cells(SeguidorNumero + 1, Mes + 1).NumberFormat = "0.00%"

AreaPerdidasTotal = 0 AreaTotal = 0 Next Dia = 0 End If Next Next

Set ApExcel = Nothing If NumerodeSeguidores = SeguidorNumero Then fin = 1 Else fin = 0 Numseguidores = Numseguidores + 1 ApExcel.workbooks.Close savechanges:=False

137

End If

Loop Until fin = 1

End Sub

Private Sub Form_Load() cmbComunidad.AddItem "Alava" cmbComunidad.AddItem "Albacete" cmbComunidad.AddItem "Alicante" cmbComunidad.AddItem "Almera" cmbComunidad.AddItem "Asturias" cmbComunidad.AddItem "Avila" cmbComunidad.AddItem "Badajoz" cmbComunidad.AddItem "Baleares" cmbComunidad.AddItem "Barcelona" cmbComunidad.AddItem "Burgos" cmbComunidad.AddItem "Cceres" cmbComunidad.AddItem "Cdiz" cmbComunidad.AddItem "Cantabria" cmbComunidad.AddItem "Castelln" cmbComunidad.AddItem "Ceuta" cmbComunidad.AddItem "Ciudad Real" cmbComunidad.AddItem "Crdoba" cmbComunidad.AddItem "La Corua" cmbComunidad.AddItem "Cuenca" cmbComunidad.AddItem "Gerona" cmbComunidad.AddItem "Granada" cmbComunidad.AddItem "Guadalajara" cmbComunidad.AddItem "Guipuzcoa" cmbComunidad.AddItem "Huelva" cmbComunidad.AddItem "Huesca"

138

cmbComunidad.AddItem "Jan" cmbComunidad.AddItem "Len" cmbComunidad.AddItem "Lrida" cmbComunidad.AddItem "Lugo" cmbComunidad.AddItem "Madrid" cmbComunidad.AddItem "Mlaga" cmbComunidad.AddItem "Melilla" cmbComunidad.AddItem "Murcia" cmbComunidad.AddItem "Navarra" cmbComunidad.AddItem "Orense" cmbComunidad.AddItem "Palencia" cmbComunidad.AddItem "Las Palmas" cmbComunidad.AddItem "Pontevedra" cmbComunidad.AddItem "La Rioja" cmbComunidad.AddItem "Salamanca" cmbComunidad.AddItem "Sta. Cruz de Tenerife" cmbComunidad.AddItem "Segovia" cmbComunidad.AddItem "Sevilla" cmbComunidad.AddItem "Soria" cmbComunidad.AddItem "Tarragona" cmbComunidad.AddItem "Teruel" cmbComunidad.AddItem "Toledo" cmbComunidad.AddItem "Valencia" cmbComunidad.AddItem "Valladolid" cmbComunidad.AddItem "Vizcaya" cmbComunidad.AddItem "Zamora" cmbComunidad.AddItem "Zaragoza"

End Sub

139

S-ar putea să vă placă și