Superficie Reactiva


Este script reconoce la orientacion de un recorrido dado, como podria ser el recorrido del sol:
puntoCardinal1 = Rhino.GetPoint("selecciona el primer punto cardinal")
If IsNull (puntoCardinal1) Then Exit Sub
PuntoCardinal2 = Rhino.GetPoint("selecciona el segundo punto cardinal")
If IsNull (puntoCardinal2) Then Exit Sub

luego selecciona una superfice dada y la subdivide en N*N regiones.
strSurface = Rhino.GetObject("Seleccione superficie")
If IsNull (strSurface) Then Exit Sub
arrParamU = arrDomainU(0) + i * (arrDomainU(1) - arrDomainU(0)) / secu
arrParamV = arrDomainV(0) + j * (arrDomainV(1) - arrDomainV(0)) / secv

Luego calcula el punto medio de cada region y a partir de ese punto genera la "normal" para esa region en particular.
CenterPoint = Rhino.EvaluateSurface(placa, Array(uparamplaca,vparamplaca))
Rhino.AddPoint CenterPoint
Normal = Rhino.SurfaceNormal(placa, Array(uparamplaca, vparamplaca))
LineNormal = Rhino.AddLine(CenterPoint, Rhino.VectorAdd(CenterPoint, Normal))

Cada normal es comparada con la orientacion original y devuelve un angulo.
arrAngle = Rhino.Angle2(arrLine1, arrLine2)

si el angulo de incidencia es perpendicular al plano de la region el resultado es color rojo.
If arrAngle(0) >= 90 Then
Rhino.ObjectColor placa, RGB(250,0,0)

si el angulo de incidencia esta entre los 45 y 90 grads. el color es magenta.
ElseIf arrAngle(0) > 45 And arrAngle(0) <= 89 Then
Rhino.ObjectColor placa, RGB(250,0,255)

y si el angulo está por debajo de los 45 grados, siendo la zona obscura o con sombra de la superficie el color el azul.

Else
Rhino.ObjectColor placa, RGB(0,0,255)
End If
End Function