├── .gitignore ├── .vscode ├── c_cpp_properties.json ├── launch.json ├── settings.json └── tasks.json ├── CMakeLists.txt ├── LICENSE ├── Makefile ├── README.md ├── build.sh ├── includes ├── includes.h ├── raylib_includes.h └── rlights.h ├── input_data ├── data_100k_arcmin.txt └── flat_100k_arcmin.txt ├── meson.build ├── redshift_input_data └── seyfert.dat ├── resources ├── Earth_1_12756.glb ├── fonts │ └── SuperMarioBros2.ttf └── images │ ├── galaxy_demo.gif │ ├── galaxy_test_texture_diffuse.png │ ├── galaxy_test_texture_specular.png │ ├── screenshot.png │ └── screenshot_free_look.png ├── shaders ├── lighting.fs └── lighting_instancing.vs └── src └── frontend.cpp /.gitignore: -------------------------------------------------------------------------------- 1 | .cache 2 | 3 | build/ 4 | 5 | galaxy_visualization_raylib -------------------------------------------------------------------------------- /.vscode/c_cpp_properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "configurations": [ 3 | { 4 | "name": "Linux", 5 | "includePath": [ 6 | "${default}", 7 | "${workspaceFolder}/include/", 8 | "${workspaceFolder}/src/" 9 | ], 10 | "defines": [], 11 | "cStandard": "c23", 12 | "cppStandard": "c++20", 13 | "intelliSenseMode": "linux-clang-x64" 14 | } 15 | ], 16 | "version": 4 17 | } -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "name": "Debug with Meson", 6 | "type": "cppdbg", 7 | "request": "launch", 8 | "program": "${workspaceRoot}/build/galaxy_visualization_raylib", 9 | "cwd": "${workspaceRoot}", 10 | "preLaunchTask": "build debug meson" 11 | } 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.associations": { 3 | "ostream": "cpp", 4 | "iostream": "cpp", 5 | "cctype": "cpp", 6 | "cmath": "cpp", 7 | "cstdarg": "cpp", 8 | "cstddef": "cpp", 9 | "cstdio": "cpp", 10 | "cstdlib": "cpp", 11 | "cstring": "cpp", 12 | "ctime": "cpp", 13 | "cwchar": "cpp", 14 | "cwctype": "cpp", 15 | "any": "cpp", 16 | "array": "cpp", 17 | "atomic": "cpp", 18 | "hash_map": "cpp", 19 | "bit": "cpp", 20 | "*.tcc": "cpp", 21 | "bitset": "cpp", 22 | "charconv": "cpp", 23 | "chrono": "cpp", 24 | "cinttypes": "cpp", 25 | "compare": "cpp", 26 | "concepts": "cpp", 27 | "cstdint": "cpp", 28 | "list": "cpp", 29 | "map": "cpp", 30 | "set": "cpp", 31 | "string": "cpp", 32 | "unordered_map": "cpp", 33 | "unordered_set": "cpp", 34 | "vector": "cpp", 35 | "exception": "cpp", 36 | "algorithm": "cpp", 37 | "functional": "cpp", 38 | "iterator": "cpp", 39 | "memory": "cpp", 40 | "memory_resource": "cpp", 41 | "optional": "cpp", 42 | "random": "cpp", 43 | "ratio": "cpp", 44 | "string_view": "cpp", 45 | "system_error": "cpp", 46 | "tuple": "cpp", 47 | "type_traits": "cpp", 48 | "utility": "cpp", 49 | "format": "cpp", 50 | "initializer_list": "cpp", 51 | "iosfwd": "cpp", 52 | "istream": "cpp", 53 | "limits": "cpp", 54 | "new": "cpp", 55 | "numbers": "cpp", 56 | "span": "cpp", 57 | "sstream": "cpp", 58 | "stdexcept": "cpp", 59 | "streambuf": "cpp", 60 | "typeinfo": "cpp", 61 | "variant": "cpp", 62 | "__bit_reference": "cpp", 63 | "__config": "cpp", 64 | "__hash_table": "cpp", 65 | "__locale": "cpp", 66 | "__node_handle": "cpp", 67 | "__split_buffer": "cpp", 68 | "__threading_support": "cpp", 69 | "__verbose_abort": "cpp", 70 | "fstream": "cpp", 71 | "ios": "cpp", 72 | "locale": "cpp", 73 | "ranges": "cpp", 74 | "clocale": "cpp", 75 | "condition_variable": "cpp", 76 | "forward_list": "cpp", 77 | "mutex": "cpp", 78 | "print": "cpp", 79 | "semaphore": "cpp", 80 | "stop_token": "cpp", 81 | "text_encoding": "cpp", 82 | "thread": "cpp", 83 | "queue": "cpp", 84 | "stack": "cpp", 85 | "*.inc": "cpp", 86 | "*.ipp": "cpp", 87 | "deque": "cpp", 88 | "complex": "cpp", 89 | "valarray": "cpp" 90 | }, 91 | "dotnet.defaultSolution": "disable", 92 | "C_Cpp.default.compilerPath": "/usr/bin/clang++", 93 | "cmake.ignoreCMakeListsMissing": true 94 | } -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "tasks": [ 3 | { 4 | "label": "build debug meson", 5 | "type": "shell", 6 | "command": "clear && meson setup build --buildtype=debug && cd build && ninja" 7 | }, 8 | { 9 | "label": "build mingw meson", 10 | "type": "shell", 11 | "command": "meson setup build-mingw --cross-file windows32.ini --buildtype=debug && cd build-mingw && ninja" 12 | } 13 | ], 14 | "version": "2.0.0" 15 | } -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.11) 2 | 3 | project(galaxy_visualization_raylib VERSION 0.2.0 LANGUAGES CXX) 4 | 5 | if (POLICY CMP0048) 6 | cmake_policy(SET CMP0048 NEW) 7 | endif (POLICY CMP0048) 8 | 9 | # Set the C++ standard 10 | set(CMAKE_CXX_STANDARD 20) 11 | 12 | # Generate compile_commands.json 13 | set(CMAKE_EXPORT_COMPILE_COMMANDS ON) 14 | 15 | # Includes dir 16 | include_directories(${CMAKE_SOURCE_DIR}/includes) 17 | 18 | # ------------------------------------------------------------------------------------- 19 | 20 | # Print the OS 21 | message(STATUS "----------------------------------------------") 22 | message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") 23 | message(STATUS "----------------------------------------------") 24 | 25 | # Find the system-installed Raylib library 26 | find_package(raylib REQUIRED) 27 | 28 | 29 | # Add your executable 30 | add_executable(${PROJECT_NAME} src/frontend.cpp) 31 | 32 | # Link against raylib 33 | target_link_libraries(${PROJECT_NAME} PRIVATE raylib) 34 | 35 | # Set compile flags specific to your project 36 | if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") # macOS 37 | target_compile_options(${PROJECT_NAME} PRIVATE 38 | -Wall 39 | -Wextra 40 | -Wpedantic 41 | -Werror 42 | -Wno-unused-parameter 43 | -Wno-unused-variable 44 | -Wno-unused-function 45 | -Wno-unused-but-set-variable 46 | -Wno-unused-value 47 | -Wno-unused-result 48 | -Wno-unused-local-typedefs 49 | -Wno-missing-field-initializers 50 | ) 51 | elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Windows") 52 | target_compile_options(${PROJECT_NAME} PRIVATE /W4) # Example for MSVC 53 | endif() 54 | 55 | # Print the compile flags for your target 56 | get_target_property(PROJECT_COMPILE_FLAGS ${PROJECT_NAME} COMPILE_OPTIONS) 57 | message(STATUS "----------------------------------------------") 58 | message(STATUS "Compile flags for ${PROJECT_NAME}: ${PROJECT_COMPILE_FLAGS}") 59 | message(STATUS "----------------------------------------------") 60 | 61 | # ------------------------------------------------------------------------------------- 62 | 63 | # Copy resources to the build directory after build 64 | add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD 65 | COMMAND ${CMAKE_COMMAND} -E copy_directory 66 | ${CMAKE_SOURCE_DIR}/resources/fonts $/resources/fonts) 67 | 68 | add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD 69 | COMMAND ${CMAKE_COMMAND} -E copy_directory 70 | ${CMAKE_SOURCE_DIR}/input_data $/input_data) 71 | 72 | add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD 73 | COMMAND ${CMAKE_COMMAND} -E copy_directory 74 | ${CMAKE_SOURCE_DIR}/shaders $/shaders) 75 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Victor Anderssén 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # Compiler and flags 2 | CC=gcc 3 | CXX=g++ 4 | 5 | # Check if Clang is available 6 | ifneq ($(shell command -v clang 2> /dev/null),) 7 | CC=clang 8 | CXX=clang++ 9 | endif 10 | 11 | # Number of cores to use for compilation 12 | CORES=$(shell expr $(shell nproc --all) / 2) 13 | 14 | # Build directory 15 | BUILD_DIR=build 16 | 17 | # Default target 18 | all: $(BUILD_DIR)/galaxy_visualization_raylib 19 | 20 | # Clean the build directory 21 | clean: 22 | @echo "Cleaning up" 23 | @rm -rf $(BUILD_DIR) 24 | 25 | # Create the build directory 26 | $(BUILD_DIR): 27 | @echo "Creating the build directory" 28 | @mkdir -p $(BUILD_DIR) 29 | 30 | # Run CMake and compile 31 | $(BUILD_DIR)/galaxy_visualization_raylib: $(BUILD_DIR) CMakeLists.txt 32 | @echo "Running CMake" 33 | @cd $(BUILD_DIR) && cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=$(CXX) 34 | @echo "Compiling galaxy_visualization_raylib" 35 | @$(MAKE) -C $(BUILD_DIR) -j$(CORES) 36 | 37 | # Measure build time, compile, and run 38 | time_run: all 39 | @start=$$(date +%s); \ 40 | $(MAKE) all; \ 41 | end=$$(date +%s); \ 42 | runtime=$$((end-start)); \ 43 | echo "Build took $$runtime seconds"; \ 44 | $(MAKE) run 45 | 46 | # Run the program 47 | run: $(BUILD_DIR)/galaxy_visualization_raylib 48 | @echo "Running galaxy_visualization_raylib" 49 | @echo "Executable path: $(BUILD_DIR)/galaxy_visualization_raylib" 50 | @ls -l $(BUILD_DIR)/galaxy_visualization_raylib 51 | @$(BUILD_DIR)/galaxy_visualization_raylib || (echo "Failed to run $(BUILD_DIR)/galaxy_visualization_raylib"; exit 1) 52 | 53 | .PHONY: all clean run time_run -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Galaxy Visualization 2 | 3 | Visualization of 100,000 real galaxies in blue and 100,000 randomly distributed galaxies in red. 4 | 5 | ## The Course 6 | 7 | This project visualizes 100,000 real galaxies in blue and 100,000 randomly distributed galaxies in red. The data is sourced from the GPU programming course at 8 | [Åbo Akademi University](https://studiehandboken.abo.fi/en/course/IT00CG19/19162?period=2024-2027) 9 | 10 | This course teaches parallel programming using CUDA. 11 | 12 | The assignment is to use CUDA to calculate 10 billion angles between galaxies and prove they are not randomly distributed. 13 | The students must leverage the GPU for these calculations on their own using a supercomputer. 14 | 15 | The students have to prove this on their own. 16 | 17 | The expected runtime for the calculation is approximately 3 seconds. 18 | 19 | 20 | This program is a visualization of the data, not the solution to the assignment. 21 | 22 | ## Prerequisites 23 | 24 | This project can be built using plain g++ through build.sh (raylib is the only dependency), Meson, CMake, or Make. 25 | 26 | Below are the installation instructions for the required dependencies: 27 | 28 | ### Dependencies 29 | 30 | - **Raylib** 31 | - **Base Development Tools** (e.g., `build-essential` on Ubuntu) 32 | - **Meson** 33 | - **CMake** 34 | - **Git** 35 | - **Clang** (or GCC) 36 | - **gdb** (optional) 37 | 38 | ### Installation Commands 39 | 40 | #### Arch Linux 41 | 42 | ```bash 43 | sudo pacman -S raylib base-devel meson git cmake clang 44 | ``` 45 | 46 | #### Ubuntu 47 | 48 | ```bash 49 | sudo apt-get install -y raylib build-essential meson git cmake clang 50 | ``` 51 | 52 | ### Build and Run the Project 53 | 54 | You can choose from one of the following build systems: 55 | - Meson (F5 in VSCode) 56 | - Make with CMake 57 | - build.sh 58 | 59 | 60 | ## Meson 61 | #### Setup: 62 | ```bash 63 | meson setup build --buildtype=release 64 | ``` 65 | 66 | #### Build: 67 | ```bash 68 | meson compile -C build 69 | ``` 70 | 71 | #### Run: 72 | ```bash 73 | ./build/galaxy_visualization_raylib 74 | ``` 75 | 76 | #### Clean: 77 | ```bash 78 | meson compile -C build --clean 79 | ``` 80 | 81 | 82 | ## Make 83 | #### Build: 84 | ```bash 85 | make 86 | ``` 87 | 88 | #### Run: 89 | ```bash 90 | make run 91 | ``` 92 | 93 | #### Clean: 94 | ```bash 95 | make clean 96 | ``` 97 | 98 | 99 | 100 | ## Demo 101 | 102 | ![demo](resources/images/galaxy_demo.gif "galaxy_demo.gif") 103 | 104 | --- 105 | 106 | ![screen](resources/images/screenshot.png "screenshot.png") 107 | 108 | ## Patch Notes 109 | 110 | - Spacebar: Pauses the program. 111 | - Added Makefile for Linux. 112 | - Added Meson build system for Linux. 113 | - The Meson build now links against the system-installed Raylib. 114 | - Added earth model: https://science.nasa.gov/resource/earth-3d-model/ | Credit: NASA Visualization Technology Applications and Development (VTAD). 115 | - Added Free Look Mode. 116 | - Redshift data taken from: https://lweb.cfa.harvard.edu/~dfabricant/huchra/zcat/seyfert.dat 117 | - Added build.sh for easy building on Linux. 118 | - LShift to move slower in free look mode. -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -xe 4 | 5 | # Remove the build directory if it exists 6 | rm -rf build/ > /dev/null 2>&1 7 | 8 | # Create a build directory 9 | mkdir -p build > /dev/null 2>&1 10 | 11 | # Copy all the files from src and includes to the build directory 12 | cp -r src/* build/ 13 | cp -r includes/* build/ 14 | cp -r resources/* build/ 15 | 16 | # Build with g++ 17 | g++ build/frontend.cpp -o galaxy_visualization_raylib -lraylib 18 | 19 | # Run the executable 20 | ./galaxy_visualization_raylib 21 | -------------------------------------------------------------------------------- /includes/includes.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | // Standard library 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | // If Linux 12 | #ifdef __linux__ 13 | #include 14 | #include 15 | #endif 16 | 17 | // If Windows 18 | #ifdef _WIN32 19 | // Nothing to include 20 | #endif 21 | 22 | // Program specific stuff -------------------------------------- 23 | #define local_persist static // localy scoped persisted variable 24 | #define global_variable static // globaly scoped variable in the same translation unit 25 | #define internal static // localy scoped function to the translation unit 26 | 27 | typedef uint8_t u8; 28 | typedef uint16_t u16; 29 | typedef uint32_t u32; 30 | typedef uint64_t u64; 31 | 32 | typedef int8_t i8; 33 | typedef int16_t i16; 34 | typedef int32_t i32; 35 | typedef int64_t i64; 36 | 37 | typedef size_t usize; 38 | typedef intmax_t isize; 39 | 40 | typedef float f32; 41 | typedef double f64; 42 | 43 | // Macros ------------------------ 44 | // @Note(Victor): Write straight to the null pointer to crash the program 45 | // @Note(Victor): *(int *)0 = 0; 46 | #define Assert(Expression) \ 47 | if (!(Expression)) \ 48 | { \ 49 | __builtin_trap(); \ 50 | } 51 | 52 | #define ArrayCount(Array) (sizeof(Array) / sizeof((Array)[0])) 53 | 54 | #define Kilobytes(Value) ((Value) * 1024LL) 55 | #define Megabytes(Value) (Kilobytes(Value) * 1024LL) 56 | #define Gigabytes(Value) (Megabytes(Value) * 1024LL) 57 | -------------------------------------------------------------------------------- /includes/raylib_includes.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | // Raylib headers 4 | #include "raylib.h" 5 | #include "rlgl.h" 6 | #include "raymath.h" 7 | #include "rlights.h" 8 | 9 | #if defined(PLATFORM_DESKTOP) 10 | #define GLSL_VERSION 330 11 | #else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB 12 | #define GLSL_VERSION 100 13 | #endif 14 | 15 | #if defined(PLATFORM_WEB) 16 | #include 17 | #endif 18 | -------------------------------------------------------------------------------- /includes/rlights.h: -------------------------------------------------------------------------------- 1 | /********************************************************************************************** 2 | * 3 | * raylib.lights - Some useful functions to deal with lights data 4 | * 5 | * CONFIGURATION: 6 | * 7 | * #define RLIGHTS_IMPLEMENTATION 8 | * Generates the implementation of the library into the included file. 9 | * If not defined, the library is in header only mode and can be included in other headers 10 | * or source files without problems. But only ONE file should hold the implementation. 11 | * 12 | * LICENSE: zlib/libpng 13 | * 14 | * Copyright (c) 2017-2023 Victor Fisac (@victorfisac) and Ramon Santamaria (@raysan5) 15 | * 16 | * This software is provided "as-is", without any express or implied warranty. In no event 17 | * will the authors be held liable for any damages arising from the use of this software. 18 | * 19 | * Permission is granted to anyone to use this software for any purpose, including commercial 20 | * applications, and to alter it and redistribute it freely, subject to the following restrictions: 21 | * 22 | * 1. The origin of this software must not be misrepresented; you must not claim that you 23 | * wrote the original software. If you use this software in a product, an acknowledgment 24 | * in the product documentation would be appreciated but is not required. 25 | * 26 | * 2. Altered source versions must be plainly marked as such, and must not be misrepresented 27 | * as being the original software. 28 | * 29 | * 3. This notice may not be removed or altered from any source distribution. 30 | * 31 | **********************************************************************************************/ 32 | 33 | #ifndef RLIGHTS_H 34 | #define RLIGHTS_H 35 | 36 | //---------------------------------------------------------------------------------- 37 | // Defines and Macros 38 | //---------------------------------------------------------------------------------- 39 | #define MAX_LIGHTS 64 // Max dynamic lights supported by shader 40 | 41 | //---------------------------------------------------------------------------------- 42 | // Types and Structures Definition 43 | //---------------------------------------------------------------------------------- 44 | 45 | // Light data 46 | typedef struct 47 | { 48 | int type; 49 | bool enabled; 50 | Vector3 position; 51 | Vector3 target; 52 | Color color; 53 | float attenuation; 54 | 55 | // Shader locations 56 | int enabledLoc; 57 | int typeLoc; 58 | int positionLoc; 59 | int targetLoc; 60 | int colorLoc; 61 | int attenuationLoc; 62 | } Light; 63 | 64 | // Light type 65 | typedef enum 66 | { 67 | LIGHT_DIRECTIONAL = 0, 68 | LIGHT_POINT 69 | } LightType; 70 | 71 | #ifdef __cplusplus 72 | extern "C" 73 | { // Prevents name mangling of functions 74 | #endif 75 | 76 | //---------------------------------------------------------------------------------- 77 | // Module Functions Declaration 78 | //---------------------------------------------------------------------------------- 79 | Light CreateLight(int type, Vector3 position, Vector3 target, Color color, Shader shader); // Create a light and get shader locations 80 | void UpdateLightValues(Shader shader, Light light); // Send light properties to shader 81 | 82 | #ifdef __cplusplus 83 | } 84 | #endif 85 | 86 | #endif // RLIGHTS_H 87 | 88 | /*********************************************************************************** 89 | * 90 | * RLIGHTS IMPLEMENTATION 91 | * 92 | ************************************************************************************/ 93 | 94 | #if defined(RLIGHTS_IMPLEMENTATION) 95 | 96 | #include "raylib.h" 97 | 98 | //---------------------------------------------------------------------------------- 99 | // Defines and Macros 100 | //---------------------------------------------------------------------------------- 101 | // ... 102 | 103 | //---------------------------------------------------------------------------------- 104 | // Types and Structures Definition 105 | //---------------------------------------------------------------------------------- 106 | // ... 107 | 108 | //---------------------------------------------------------------------------------- 109 | // Global Variables Definition 110 | //---------------------------------------------------------------------------------- 111 | static int lightsCount = 0; // Current amount of created lights 112 | 113 | //---------------------------------------------------------------------------------- 114 | // Module specific Functions Declaration 115 | //---------------------------------------------------------------------------------- 116 | // ... 117 | 118 | //---------------------------------------------------------------------------------- 119 | // Module Functions Definition 120 | //---------------------------------------------------------------------------------- 121 | 122 | // Create a light and get shader locations 123 | Light CreateLight(int type, Vector3 position, Vector3 target, Color color, Shader shader) 124 | { 125 | Light light = {0}; 126 | 127 | if (lightsCount < MAX_LIGHTS) 128 | { 129 | light.enabled = true; 130 | light.type = type; 131 | light.position = position; 132 | light.target = target; 133 | light.color = color; 134 | 135 | // NOTE: Lighting shader naming must be the provided ones 136 | light.enabledLoc = GetShaderLocation(shader, TextFormat("lights[%i].enabled", lightsCount)); 137 | light.typeLoc = GetShaderLocation(shader, TextFormat("lights[%i].type", lightsCount)); 138 | light.positionLoc = GetShaderLocation(shader, TextFormat("lights[%i].position", lightsCount)); 139 | light.targetLoc = GetShaderLocation(shader, TextFormat("lights[%i].target", lightsCount)); 140 | light.colorLoc = GetShaderLocation(shader, TextFormat("lights[%i].color", lightsCount)); 141 | 142 | UpdateLightValues(shader, light); 143 | 144 | lightsCount++; 145 | } 146 | 147 | return light; 148 | } 149 | 150 | // Send light properties to shader 151 | // NOTE: Light shader locations should be available 152 | void UpdateLightValues(Shader shader, Light light) 153 | { 154 | // Send to shader light enabled state and type 155 | SetShaderValue(shader, light.enabledLoc, &light.enabled, SHADER_UNIFORM_INT); 156 | SetShaderValue(shader, light.typeLoc, &light.type, SHADER_UNIFORM_INT); 157 | 158 | // Send to shader light position values 159 | float position[3] = {light.position.x, light.position.y, light.position.z}; 160 | SetShaderValue(shader, light.positionLoc, position, SHADER_UNIFORM_VEC3); 161 | 162 | // Send to shader light target position values 163 | float target[3] = {light.target.x, light.target.y, light.target.z}; 164 | SetShaderValue(shader, light.targetLoc, target, SHADER_UNIFORM_VEC3); 165 | 166 | // Send to shader light color values 167 | float color[4] = {(float)light.color.r / (float)255, (float)light.color.g / (float)255, 168 | (float)light.color.b / (float)255, (float)light.color.a / (float)255}; 169 | SetShaderValue(shader, light.colorLoc, color, SHADER_UNIFORM_VEC4); 170 | } 171 | 172 | #endif // RLIGHTS_IMPLEMENTATION -------------------------------------------------------------------------------- /meson.build: -------------------------------------------------------------------------------- 1 | project( 2 | 'galaxy_visualization_raylib', 3 | 'cpp', 4 | version: '0.2.0', 5 | default_options: [ 6 | 'cpp_std=c++20', 7 | 'warning_level=3', 8 | 'buildtype=release', 9 | 'optimization=2' 10 | ], 11 | ) 12 | 13 | # Compiler options based on system type 14 | if host_machine.system() == 'linux' or host_machine.system() == 'darwin' # macOS 15 | add_project_arguments([ 16 | '-Wpedantic', 17 | '-Wno-unused-parameter', 18 | '-Wno-unused-variable', 19 | '-Wno-unused-function', 20 | '-Wno-unused-const-variable', 21 | '-Wno-unused-lambda-capture', 22 | '-Wno-unused-local-typedef', 23 | '-Wno-unused-value', 24 | '-Wno-missing-field-initializers', 25 | '-Wno-unused-but-set-variable' 26 | ], language: 'cpp') 27 | elif host_machine.system() == 'windows' 28 | add_project_arguments(['/W4'], language: 'cpp') 29 | endif 30 | 31 | # Find the system-installed Raylib library 32 | raylib_dep = dependency('raylib', required: true) 33 | 34 | # Include directories 35 | inc_dir = include_directories('includes') 36 | 37 | # Define the executable 38 | exe = executable( 39 | 'galaxy_visualization_raylib', 40 | 'src/frontend.cpp', 41 | dependencies: raylib_dep, 42 | include_directories: inc_dir, 43 | install: false, 44 | ) 45 | 46 | # Install directories and resources 47 | 48 | # Create a resources directory in the build directory 49 | resources_dir = custom_target( 50 | 'resources_dir', 51 | output: 'resources', 52 | command: ['mkdir', '-p', meson.build_root() / './resources'], 53 | build_by_default: true 54 | ) 55 | 56 | fonts_copy = custom_target( 57 | 'copy_fonts', 58 | output: 'fonts', 59 | command: ['cp', '-r', meson.source_root() / './resources/fonts', meson.build_root() / './resources'], 60 | build_by_default: true 61 | ) 62 | 63 | copy_input_data = custom_target( 64 | 'copy_input_data', 65 | output: 'input_data', 66 | command: ['cp', '-r', meson.source_root() / 'input_data', meson.build_root() / './input_data'], 67 | build_by_default: true 68 | ) 69 | 70 | copy_shaders = custom_target( 71 | 'copy_shaders', 72 | output: 'shaders', 73 | command: ['cp', '-r', meson.source_root() / 'shaders', meson.build_root() / 'shaders'], 74 | build_by_default: true 75 | ) 76 | -------------------------------------------------------------------------------- /redshift_input_data/seyfert.dat: -------------------------------------------------------------------------------- 1 | 2 | Version July 31, 2000. 3 | 4 | Catalogue of Bright Seyfert Galaxies and Other Bright AGN 5 | 6 | by J. Huchra 7 | 8 | Complete to 16th magnitude with some addtional entries beyond that. 9 | See the notes at the end of the listing for further information. 10 | 11 | NAME RA (1950) DEC MB VH VE VS TY X V B-V U-B REFERENCES NOTES 12 | ID UBV 13 | -------------------------------------------------------------------------------------- 14 | MK334 000035.6 214054 14.40 6605 32127 2 2.08 14.42 0.13 0.31 005 005 IVZW1 15 | 00029-1424 000256.8 -142426 1? 135 ULIRG z=0.044 16 | MK335 000345.2 195529 14.00 7757 28527 1 0.53 13.85 0.41 -.70 001 001 17 | 0005+1433 000530.0 1433 15.7 13768 41127 2 005 18 | 0006-4705 000614.6 -470542 17.0 21237 66910 1 096 C16.08 19 | 0007-0459 000730.0 -0459 13.8 8851 29127 2 005 20 | IIIZW2 000756.7 104149 15.60 26758 36127 1 1.87 15.56 0.52 -.70 001 001 21 | 0008-2121 000824.0 -2121 7783 39 091 E538-G25 22 | MK938 000830.0 -1223 14.0 5803 25527 2? 051 N N34 23 | A0015+2930 001551.2 293052 19.4 29979 55 9 136 24 | 4C25.01 001703.0 254613 15.4 85000 7 002 25 | 0017-5133 001712.0 -5133 6603 6 091 26 | A0017+1018 001746.9 101806 17.4 48866 55 1 136 27 | 0021+2508S 002130.0 2508 15.6 20226 R36 2 111 zsource 3516 28 | A0022+0804 002211.0 080419 17.2 20086 B54 Sy1 29 | 0022-4546 002234.5 -454623 16.0 16800156910 1 096 C17.01 30 | MK945 002321.6 -034151 15.0 4419 30527 5 051 NON-SY 31 | PG0026+129 002638.1 125930 14.95 42550 7 14.78 0.26 -.78 006 006 X-ray 32 | UM246 002710.0 -000600 18000 21 2 075 33 | A0029+2407 002943.2 240726 17.3 19786 B54 Sy1 34 | 0031-076 003140.8 -073814 17.8 87212 921 7 .033 17.9 -.1 015 015 35 | A0032+7921 003233.9 -792152 15.4 22184 55 1 136 36 | A0032+1458 003238.5 145832 16.3 55 9 136 37 | 0033+45 003336.9 452324 15.3 14293 48127 1 019 38 | MK955 003502.0 000021 15.4 10517 20127 2 049 39 | S10721 003549.4 411159 17.5 21728 1 013 VARIABLE 40 | 0037+06 003742.2 060714 17.9 18900 921 .037 17.0 0.9 0.1 015 015 41 | A0038+0758 003820.7 -075837 16.5 16488 55 1 136 42 | 5C3.100 003909.8 400508 15.7 21309 21 2?.065 003 ZCG0039.2+4005 43 | A85-F 003906.0 -0938 13429 28 27 2 005 44 | E012-G21 003914.4 -793052 14.5 9842 35 1 14.73 0.57 -.25 016 016 3U055-79 45 | IVZW29 003932.3 400310 17.20 30764 41127 1 001 M31 G000-145! 46 | N235 004024.4 -234852 15.4 6692 939 2 15.4 0.7 087 47 | 0040+3855 004045.4 385516 24800 -2 2 005 M31-000-225 48 | 0041-1737 004154.0 -1737 9305 39 091 E540-g17 49 | 0042+1905 004220.9 190517 16.7 54250 1 136 FSC00423+1905,RGBJ0044+193 50 | MK1146 004442.2 142551 15.2 11735 38127 1 059 51 | MK348 004604.9 314105 15.00 4546 32127 2 .028 14.59 0.95 0.17 001 001 NGC 262 52 | A0046+1515 004653.3 151554 71832 25 -1 1 53 | A0048+2917 004813.8 291707 40676 47 -1 2 54 | A0048+29 004853.1 290746 14.50 10763 35127 1 004 SBc 55 | MK1148 004916.5 170941 15.88 19180 9 1 006 56 | IZW1 005057.8 122520 14.30 18116 42127 1 .62 14.07 0.36 -.80 001 001 57 | 0052-7054 005206.0 -7054 21000300 2 088 58 | 0052-3218 005230.0 -3218 9622 39 091 E411-g29 59 | MK1149 005342.0 -1433 16.0 6320 32527 5 059 NON-SY(005,079) 60 | TonS180 005454.0 -223857 18490 59V27 14.4 61 | A0055+1707 005537.8 170702 20.3 55 9 136 62 | N334 005630.0 -3523 9220 39 6 091 63 | MK352 005709.1 313328 14.80 4636 29127 1 1.8 14.81 0.44 -.66 001 001 64 | 0057+3110 005724.0 3110 18.7 86000 .037 18.5 0.20 -.91 060 060 1E0057.4+3110 65 | 079-G16 010232.0 -642324 14.89 5785 812 2 14.38 0.50 -.23 017 017 66 | 3C33 010614.5 130415 17832 2 15.19 013 003 4C13.07,NRAO57, 67 | A0106+1800 010628.0 180008 16.6 55 9 136 68 | N404 010639.3 352710 11.47 -42 17027 6 11.72 0.83 0.32 044 008 69 | A0108+1310 010820.8 -131058 17.9 70151 55 9 136 70 | T0109-383 010909.8 -382056 14.89 3300 2 13.99 0.89 0.13 001 005 71 | 0109+2228 010923.6 222845 15.5 9 002 72 | 0109-4101 010934.8 -410129 17.0 16075114910 1 096 B16.20 73 | MK975 011112.4 130026 15.00 14735 37127 1 049 74 | MK1152 011124.0 -1507 15.0 15637 5 5 1 059 SY1.5 75 | I1657 011148.0 -3255 3564 39 2 091 76 | 0111-0132 011154.9 -013226 19.9 36000 9 .023 19.2 0.7 071 071 1E 77 | MK1 011319.6 324933 15.20 4793 121 2 14.84 0.90 0.09 001 001 NGC 449 78 | FAIR294 011347.0 -502712 5200 12 2 010 ESO195-G35 79 | MK984 011642.0 1211 15.1 14243 1 5 5 051 SEE REF 079 80 | 0218-4423 011806.0 -4423 7059 39 091 E244-G17 81 | IIZW1 011926.5 -011805 15.10 16292 37127 1 0.09 15.17 0.57 -.42 001 001 82 | MK356 011954.0 2636 15.7 9055 1 3 83 | PG0119+229 011957.0 225435 15.41 15900 7 006 84 | 0120-02140 012048.0 -0214 14.8 4835 30127 2? 005 IN A194 85 | N526A 012137.3 -351932 14.00 5669 42527 2 1.5 018 2A0120-353 86 | N513 012142.0 +3333 13.4 5840 22127 2 004 AKN41 87 | FAIR9 012151.2 -590358 13.43 13500 812 1 1.04 13.23 0.20 -.95 001 E113-IG45,4U010 88 | MK992 012159.2 315150 17.5 521 7 079 Z=0.6544 89 | MK993 012242.0 3153 0 14.00 4625 30127 2 13.43 1.04 0.23 049 008 1.5? 90 | A0123+1502 012317.7 150237 17.5 33277 55 1 136 91 | MK358 012345.0 312125 15.00 13618 29127 1 15.23 0.79 -.32 001 001 5-4-59 92 | MK359 012450.3 185512 15.5 5012 35127 2 13.68 0.87 -.08 005 004 93 | 0129-3323 012936.0 -3323 4970 39 2 091 E353-G9 94 | N600 013034.8 -073406 13.4 1867 0 6 12.57 0.61 -.07 044 008 95 | N591 013038.9 352443 15.5 4558 29527 2 059 MK1157 96 | MK1158 013206.0 3448 14.9 4492 31127 5 059 NON-SY(005) 97 | PHL1070 013443.3 32314 17.92 23700 1 17.60 0.32 -.50 002 002 98 | A0137+1114 013725.8 111418 16.2 19486 B54 Sy1 99 | VZW85 013735.7 315938 15.8 19620 124 2 019 100 | MK573 014122.9 020557 14.00 5173 23127 2 13.64 0.97 0.09 001 005 0-5-33 101 | 0141-3357 014124.0 -3357 8884 39 091 E353-G38 102 | 0144-00 014411.8 -005539 16.3 24000 8 .048 15.6 0.7 071 071 1E 103 | MK577 014649.4 121540 14.20 5221 25127 5 054 NON-SY(005,051) 104 | 0147-0740 014733.1 -074039 16.51 5219 24823 2 15.62 0.89 100 100 IR 105 | 0149-3626 014930.0 -3626 10046 39 1 091 E354-G4 106 | 0152+0622 015244.0 062236 14.5 5208 36127 2 004 SY1.5 UM 146, 1-5-48 107 | A0153+1447 015317.9 144733 19.8 23983 55 9 136 108 | A0156-2939B015658.3 -293904 18.18 41971 B23 138 IRAS F01569-2939, Sy1 109 | MK1014 015742.0 0010 15.2 48902 9 5 1 051 006 110 | MK584 015751.1 022540 15.30 23631 72127 1 001 111 | N788 015836.6 -070318 13.2 4078 28027 2 12.76 0.95 0.48 004 033 112 | P0202-76 020201.1 -763433 16. 912 7 068 Z=0.3896 113 | FAIR1078 020239.0 -420930 37580 75 31 2 092 114 | 153-IG16 020307.0 -552718 16.00 5830 812 2 15.64 0.35 -.27 017 017 115 | MK1018 020342.5 -003146 14.6 12722 29127 2 014 SY1.9 116 | 3C59 020408.9 291640 32700 1 013 4C29.06,NRAO93, 117 | 153-IG21 020450.0 -552700 15.00 16334 812 2 15.01 0.59 -.11 001 017 118 | MK586 020514.5 22843 15.68 46500 1 15.40 0.28 -.85 056 119 | A0205+7202 020552.4 -720234 18.8 77945 55 1 136 120 | GPX002 020614.9 521232 14747 39 27 1 072 121 | MK1019 020624.0 -0804 16.5 POSS-SY 122 | F377 020902.0 -495550 13850 2 010 E197g-27 123 | N863 021200.4 -005958 14.00 7894 17127 1 1.40 13.94 0.56 -.80 001 060 MK590 124 | A0213+2300 021342.5 230053 17.9 55 9 136 125 | AKN79 021419.8 381059 13.60 5254 18127 1 001 126 | MK1400 021736.0 758 15.60 8781 121 1 079 127 | 3C66A 021930.0 424830 15.83 9 15.50 0.33 -.58 003 003 Z=(0.444) 128 | AKN81 022023.9 315813 14.90 10500 1 5 1 001 AKN 80 CLOSE 129 | 0221+0302A 022136.0 0302 15.5 12389 42127 2 005 130 | 02223-1922 022218.0 -1922 13.99 10127 60B 1 15.94 0.61 110 MBG02223-1922 131 | FAIR296 022349.0 -632650 170000 1 010 132 | US3215 024728.5 005706 18.5 57860 92758 109 133 | N931 022516.5 310518 13.90 4927 32127 1 0.60 14.79 0.94 -.07 025 060 MK1040 134 | 0225+3120 022536.0 3120 17.5 17412 9 1 .090 16.82 0.67 -.69 060 060 1E0225.6+3120 135 | MK1044 022736.0 - 913 0 14.50 4900 5 5 1 049 136 | I1816 022948.0 -3653 5215 39 2 091 137 | MK1179 023026.9 274304 16.0 10954 5 5 1 059 SY1.5 138 | N985 023210.5 -090022 14.10 12950 6 1 001 001 VV 285,RING ! 139 | N1019 023552.3 14132 14.60 7251 1 1 1 042 140 | 0236-3101 023636.3 -310114 14.98 18852 6 1 107 IR, Eso416-G5 141 | 0236-4051 023651.8 -405122 15.61 18515 81810 1 15.22 0.39 -.92 096 096 B21.06 142 | I0237-0148 023719.4 -014850 22.69 B 2 24.01 0.13 1.4 130 130 IRAS, z=2.803 143 | N1052 023836.0 -0828 12.12 1488 21027 6 024 144 | MK595 023855.8 065827 15.00 7792 1 3 1 001 145 | A0239+0517 023936.7 051750 16.0 20686 55 1 136 146 | 0240+007 024003.9 004345 16.5 921 7 .010 17.0 -.5 015 015 Z=0.569 147 | N1068 024007.1 -001331 10.30 1153 16227 2 10.44 1.00 -.01 001 001 148 | A0241+62 024101.3 621527 17.8 13391 60927 1 1.29 16.40 1.40 026 026 4U0241+61 149 | U242-724 024253.9 -722930 16.0 30540 817 1 001 150 | 0244+1928 024454.0 1928 16.8 52750 7 .067 16.66 0.11 -.89 060 060 1E0244.9+1928 151 | MK1187 024537.3 134339 15.5 13352 5 5 1 059 152 | MK1055 024548.0 -0908 15.5 10991 25927 5 14.96 0.63 -.05 009 009 WISNIEWSKI VARI 153 | MK372 024631.4 190550 15.00 9290 1 5 2 1.02 14.81 1.05 -.03 001 001 IC 1854 154 | MK1058 024648.0 3447 15.4 5190 1 5 2 051 155 | 0247+0116 024707.6 011650 19.65 8 1 094 Z=0.3391 156 | 0247+0013 024732.9 001303 17.93 59479 8 1 094 157 | 0247-3859 024736.0 -3859 5008 39 091 E299-G20 158 | 0248+0107 024830.0 010709 18.65 69461 8 1 094 159 | 0248+0102 024855.3 010250 19.37 89940 8 1 093 160 | 0249+0031 024946.6 003115 18.96 52465 8 1 094 161 | N1144 025238.4 -002312 13.2 8641 32127 2 14.41 1.01 0.22 004 008 162 | 0252+0118 025258.6 011856 17.33 42270 8 1 094 163 | 0253-1641 025342.7 -164118 9538 38 27 2 005 IRAS 164 | 0254+0101 025412.2 010146 18.16 53060 8 1 094 165 | 0254-3223 025418.0 -3223 4901 39 091 ESO417-G6 166 | 0255+0132 025520.7 013237 18.88 84660 8 1 094 167 | MK1066 025649.8 363722 13.8 3611 33127 2 13.96 0.93 0.46 051 057 168 | 0257+0030 025703.9 003022 18.14 59060 8 1 094 169 | 0257+0051 025716.2 005111 18.86 77110 8 1 094 170 | 0257-0027 025718.3 -002715 19.27 30580 8 1 094 171 | A0257+1618 025720.4 161822 16.4 10493 55 1 136 172 | 0257+0042 025756.9 004207 19.38 59360 8 1 094 173 | 0258-1136 025804.0 -113655 14.5 8915 9710 2 18.32 0.98 0.36 097 097 MCG-2-8-39, IR 174 | N1167 025836.0 3501 14.0 4951 31127 6 004 175 | 0259+0133 025904.2 013313 18.86 55340 8 1 094 176 | 0259-0055 025911.8 -005551 19.56 8 1 094 Z=0.383 177 | A0300+0542 030051.5 054235 17.9 58759 55 9 136 178 | VZW317 030100.0 3111 16.5 17590 120 1 014 SY 1.9 179 | 0301-0230 030142.0 -0230 15.5 8483 63127 6? 002 LINER? 180 | 0302-223 030236.1 -223334 16.0 921 7 .019 16.0 0.0 015 015 Z=1.400 181 | N1229 030600.0 -2309 14.0 10676 5 1 2 061 VV337 182 | MK1073 031142.8 415103 14.0 7042 33127 2 14.19 0.80 0.11 049 057 183 | A0311+0608 031144.7 060849 17.9 55 9 136 184 | 0312+1551 031238.8 155131 11423 24 27 1 005 185 | 0313-4252 031308.4 -425200 18.0 37760 817 1 17.3 0.7 093 186 | A0313+0853 031331.1 085341 18.2 55 9 136 187 | 0314-2303 031454.0 -2303 3943 39 6 091 ESO481-G17 188 | 03156-1706 031540.9 -170602 1 135 ULIRG z=0.351 189 | N1275 031629.6 411952 12.44 5268 29227 1 2.8 12.55 0.64 -.23 001 001 PERSEUS A, MULT 190 | N3101 031818.0 -1854 4023 39 6 091 191 | FAIR 299 032012.0 -515010 17300 12 3 010 ESO200-IG09,SER31 192 | 0321-4224 032148.2 -422419 17.3 59940 817 1 16.6 0.7 093 193 | N1326 032200.0 -3638 1352 39 6 091 194 | 0323-4204 032315.2 -420428 16.11 17340 81810 1 15.43 0.68 -.91 096 096 B23.01 195 | MK609 032257.3 -061909 14.5 10250 021 1 0.62 -.26 001 070 SY 1.8 196 | FAIR1106 032314.0 -420515 16.14 17410100831 1 15.41 0.73 -.81 092 092 E301-G134 197 | FAIR 300 032329.0 -492553 11050 12 3 010 E200-616 198 | MK612 032810.1 -031828 15.5 6141 20527 2 051 199 | N1358 033110.8 -051530 13.5 4013 15227 2 1.47 13.19 1.04 0.56 061 008 200 | N1365 033142.0 -361818 10.20 1649 0 0 2 0.60 10.78 0.79 0.16 069 008 A0331-369 201 | 0331-3716 033147.1 -371654 16.4 19180 817 1 16.1 0.3 093 202 | A0332+1523 033205.3 -152338 15.8 10493 55 2 136 203 | N1386 033452.0 -360954 12.30 794 2 0 2 12.80 0.97 0.37 027 027 204 | 0335+09 033557.3 094827 16.5 10412 25927 6 004 2A0335+09 205 | 03360-2453 033603.9 -245335 19.2 75218 50V21 9 123 E0336-248 206 | 0336-35 033651.0 -353430 19. 33750 30917 2 074 207 | 054-IG15 033801.0 -711318 15.8 14335 25812 2 15.00 0.81 0.21 017 017 208 | IIIZW55 033838.0 -012744 15.4 7380 1 2 15.22 0.84 0.17 001 001 N1410, COMP W N 209 | 0339-4502 033945.4 -450235 21.4 1 137 AXJ03414-4453 z=0.6724 210 | 0343-3943 034324.9 -394328 15.55 12954 87810 1 14.83 0.72 -.48 096 096 B25.02 211 | FAIR1116 034956.3 -403649 14.99 17440 75831 1 14.53 0.46 -.70 092 092 B25.01 212 | FAIR1117 035013.0 -455430 20790150 31 1 092 213 | 0351+026 035133.5 024033 17.3 10357 50932 1 0.10 16.2 1.1 -.2 015 015 214 | 0352-1737 035254.0 -1737 8501 39 091 E549-G36 215 | P0353+027 035322.4 024744 19.1 21 1 013 Z=0.602 216 | 0354-1855 035454.0 -1855 7608 39 6 091 e549-g40 217 | 3C98 035610.3 101733 8995 30 27 2 14.45 013 003 218 | 0357+1046 035727.1 104548 17.1 54000 9 7 .084 16.78 0.30 -.75 060 060 1E0357.5+1046 219 | 3C99 035833.3 002811 19.0 2 013 Z=0.426 220 | 3C109 041054.8 110441 18.2 91600 V 1 17.76 013 003 4C11.18,NRAO169 221 | 0412-08 041227.0 -080308 15.66 11568 9 1 0.13 14.91 0.75 -.55 028 028 1E0412.5-0803 222 | 0413-0742 041338.2 -074239 20000 -2 2 005 A484-134 223 | 0414+00 041411.0 000901 16.0 10138 359-1 2 004 IRAS SOURCE 224 | 3C110 041449.2 -060104 15.3 7 15.00 0.30 -.70 002 002 Z=0.781 225 | FAIR1121 041455.0 -301930 17710 75 31 2 092 226 | 3C111 041500.6 375419 18.75 14550 8 1 2.50 18.05 0.70 003 H0412+378,CTA30 227 | N1566 041853.3 -550323 9.99 1487 142 1 10.09 0.70 -.04 001 001 228 | 0419-577 041900.0 -5742 1 H0419-577 229 | FAIR302 042121.0 -562030 13050 3 010 E157-G23 230 | N1569 042604.0 644425 11.9 -82 127 5 12.98 0.77 -.16 005 011 ARP210,VIIZW 16 231 | FAIR303 042933.0 -534300 3500 1? 010 THIS NEEDS CHEC 232 | 3C120 043031.6 051500 14.30 9892 10627 1 2.30 14.27 0.58 -.75 001 001 II ZW 14,PKS043 233 | N1614 043135.5 -84057 14.00 4763 28127 5? 14.56 0.84 -.16 056 060MK617 234 | MK618 043400.0 -102836 14.50 10398 30527 1 .50 14.86 0.51 -.76 001 060 -2-12-15 235 | FAIR304 043824.0 -661930 14650100 31 3 010 236 | A0439+0832 043929.5 -083213 15.7 13191 55 1 136 237 | A0441+1215 044141.2 121541 16.2 26681 B54 Sy1 238 | N1672 044455.0 -592012 11.03 1335 13312 5 0.03 042 XRAY SOURCE 239 | 0445-1741 044518.0 -1741 9021 39 6 091 E552-G4 240 | N1667 044612.0 -0624 13.30 4578 222 1 2 061 241 | 0446-2349 044648.0 -2349 8144 39 6 091 E485-G16 242 | 0449-6441 044921.3 -644115 17983 1 107 IR 243 | N1685 0450 0.0 - 301 0 14.50 4527 33 27 2 1.60 15.57 1.01 0.16 005 060 H0447-037 244 | 0450-2958 045032.8 -295827 85778 73 27 1 005 IRAS 245 | 0456+04 045630.0 0454 14.0 4732 20127 1 004 246 | 0457-7537 045730.0 -7537 14.5 5516 259 2 124 IRAS04575-7537 247 | 0459+0328 045931.1 +032734 16.0 4795 912 1 .578 063 SY1.5 248 | 0459-2257 045941.5 -225741 12316 38 27 2 005 IRAS 249 | A0502-1941 050226.3 -194110 51264 41 138 IRAS F05024-1941, Sy2 250 | FAIR305 050417.0 -493947 4750 12 3 010 E203-G19 251 | U3255 050708.0 072517 15.60 5669 23127 2 004 252 | 0509-3427 050918.0 -3427 4802 39 091 E362-G8 253 | AKN120 051337.9 -001215 14.60 9813 46127 1 1.69 13.95 0.42 -.80 001 MK1095 254 | 0513+0625 051345.7 062606 14.68 10176 39R27 1 004 A539-D65 255 | 0514-0030 051400.3 -0030 16.3 87500 9 7 .067 16.18 0.08 -.77 060 060 1E0514.0-0030 256 | A0515-3024 051536.6 -302423 50365 41 138 IRAS F05156-3024, Sy2 257 | 0517-3242 051742.0 -3242 3790 39 1 091 SY1.5,E362-G18 258 | PIC_A 051824.1 -454945 16.0 10510 3 0.7 029 H0517-456 ,CTA3 259 | A0518-2524 051859.0 -252439 15.47 12760 54827 138 IRAS F05189-2524, Sy2 260 | P0521-365 052113.7 -363012 15.75 16500 9 15.00 0.76 -.28 003 261 | 0521-1212 052148.6 -121242 14805 12 1 086 262 | 0529-4509 052906.0 -4509 10621 39 091 E253-G8 263 | 0531-2036 053157.4 -203641 11778 12 1 086 264 | A0533+4324 053355.7 -432435 16.8 19486 55 2 136 265 | P0537-441 053720.5 -440640 16.0 7 15.50 0.46 -.57 002 002 Z=0.894 266 | A0543+5533 054300.7 -553320 17.4 55 9 136 267 | P0548-322 054850.3 -321656 16.1 20700 9 15.50 0.57 -.30 002 002 X-RAY 268 | N2110 054946.4 -072802 14.00 2311 22927 2 2.0 13.00 0.87 1.26 034 005 S0549-074 269 | 0550-6637 055034.3 -663734 17.5 22850120912 1 .044 17.0 080 080 270 | M8-11-11 055109.7 462551 13.90 6009 22127 1 2.10 14.13 0.87 -.27 030 057 2A0551+466 271 | 0556-38 055621.2 -382015 14.5 10310 931 1 2.37 031 3A0557-383 272 | MK3 060948.4 710311 13.80 4091 35127 2 13.56 1.14 0.08 001 001 12-6-19 273 | 0611-3240 061130.3 -324059 14985 12 2 086 274 | FAIR1139 061824.0 -343600 13780100 31 1 092 275 | 0622-645 062200.0 -6400 38661 1 086 276 | FAIR1140 063604.0 -325030 11170 75 31 6 092 E366-G02 277 | N2273 064536.0 6054 12.5 1863 17127 2 12.29 0.98 0.44 004 004MK620 278 | MK6 064543.9 742910 14.80 5536 41127 1 14.19 0.97 0.02 001 001 IC 450 279 | 3C171 065111.0 541248 71500 2 18.89 013 003 280 | MK374 065534.6 541557 15.50 13043 39527 1 14.61 0.70 -.38 001 001 9-12-16 281 | 0700+63 070046.2 633808 15.2 45639 95127 1 012 IN ABELL 566, X 282 | VIIZW118 070224.1 644039 14.5 23880 46127 1 019 283 | A0710+3825 071016.2 382549 16.0 36874 B54 Sy1 284 | MK376 071036.2 454707 16.00 16754 40527 1 1.3 14.62 0.55 -.58 001 001 285 | 0717+4611 071418.8 461706 21.6 R 7 129 z=1.462 WNJ0717+4611 286 | 0714+44 071426.0 441051 15.5 18420 25927 1 014 287 | 0714-2914 071432.9 -291407 15.0 1630 517 2 010 M4-1,-5-18- 288 | 0720+2032 072000.0 2032 15.5 8616 20127 2? 005 Possible Sy 2 289 | N2377 072233.0 -093336 15.8 2370 6 14.89 024 0033C178 290 | MK9 073242.2 585256 15.20 11895 36127 1 0.21 14.50 0.54 -.64 001 001 291 | 3C184.1 073428.2 803332 17.5 35300 2 013 292 | MK78 073756.8 651742 15.00 11136 42527 2 .007 14.58 0.99 -.31 001 001 293 | MK79 073847.3 495541 13.30 6620 40127 1 1.3 14.00 0.41 -.83 001 001 8-14-33 294 | 4C31.30 074230.7 315016 16.0 7 002 Z=0.462 295 | MK10 074307.4 610325 14.00 8750 36127 1 14.55 0.67 -.55 001 001 10-11-138 296 | 0745+5545 074508.2 554527 18.4 52150 9 7 .024 17.84 0.57 -.86 060 060 1E0745.1+5545 297 | MK382 075203.6 391907 15.50 10138 52127 1 .29 15.50 0.51 -.63 001 001 7-17-1 298 | A0752+5840 075255.1 584041 17.7 50365 B35 Sy1 299 | OI090.4 075422.6 100439 15.0 9 14.32 0.40-1.00 002 002 BL Lac 300 | 0754+3928 075436.0 392834 14.7 28710 9 1 .16 14.36 0.38 -.71 060 060 1E0754.6+3928 301 | 07570+2334 075700.0 233400 15.4 8782 32127 2 005 302 | A0759+6508 075953.0 650822 14.5 44500 B12 138 QSO,IRAS F07599+6508, Sy1 303 | MK1210 080127.0 051500 14.4 3988 22127 2 005 304 | 3C192 080235.4 241827 17700 2 15.46 013 305 | PG0803+762 080435.4 761132 15.15 30000 9 1 006 306 | MK1212 080402.5 271616 15.2 12697 36127 5 0.88 -.04 059 070 NON-SY(005) 307 | MK622 080421.0 390859 14.40 7000 32127 2 14.08 0.82 0.22 051 057 SY1.8 308 | 0813-3235 081320.0 -323513 94400 1 117 GRB920501 309 | 0816+2116 081648.0 2116 15.5 5398 39127 2 005 IN CANCER 310 | OJ131 081836.2 -124925 16.01 9 002 311 | 3C198 081952.3 060647 24425 2 16.78 013 003 4C06.30,NRAO291 312 | 0834+4500 083427.5 450051 62207300 24 2 101 B30834+450A 313 | N2622 083513.1 250416 14.80 8564 62127 1 059 MK1218 314 | FAIR1146 083636.0 -354930 9467 75 31 1 092 SY1.5 315 | 3C206 083728.0 -120354 15.8 59900 7 15.76 0.02 -.85 002 002 NRAO299,OJ162,P 316 | VIIZW244 083831.6 770459 16.0 39496 91127 1 019 PG 317 | N2639 084006.0 5023 12.4 3226 16127 1 004 318 | 0844+377 084401.0 374354 17.2 921 7 .020 17.7 -.5 015 015 Z=0.451 319 | TON951 084433.9 345609 14.0 19200 1 006 320 | 0845+378 084507.1 375132 17.6 92000 921 7 .018 17.9 -.3 015 015 321 | 0849+28 084905.8 284516 21.4 62600 8 .009 20.5 0.9 071 071 1E 322 | N2655 084906.0 7825 11.22 1389 130 1 6 103 ARP 323 | N2691 085132.3 394346 13.90 4048 30127 1 13.99 0.72 0.08 052 004MK391 324 | MK1220 085148.0 1753 16.5 19403 50527 2 059 SY 1.8 325 | OJ287 085157.3 201759 14.4 91700 9 14.0 0.39 -.64 002 002 326 | A0855+1053 085558.8 105302 44158106 43 138 Sy2,IRAS F08559+1053, Sy2 327 | 0904+1728 090435.5 172824 16.62 29340 30812 090 US44 328 | 0906+4254 090610.6 425441 18.5 72500 9 7 .026 18.16 0.31 -.88 060 060 1E0906.2+4254 329 | N2768 090748.0 6015 11.48 1363 21027 6 11.90 1.04 0.54 024 008 330 | A0909+7854 090907.0 785412 17.2 31778 B54 Sy1 331 | A0910+3710 091006.1 371040 16.6 32078 B54 Sy1 332 | N2782 091053.8 401917 12.66 2550 10001 2? Arp215,Rosat source 333 | 0914-6206 091459.1 -620655 14.0 17178 12 1 13.18 100 IRAS 334 | MK704 091539.4 163059 15.20 8796 35127 1 14.28 0.60 -.40 001 057 3-24-43 335 | HYDRA_A 091541.2 -115304 14.8 16423 912 6 003 3C218,CTA47,PKS 336 | A0915+2129 091558.2 212953 44759 25 -1 1 337 | MK106 091618.6 553420 16.00 36909 43027 1 16.22 0.22 -.90 005 005 338 | 3C219 091750.7 455144 52270 2 17.22 013 003 4C45.19,NRAO320 339 | 0918+4427 091820.1 442701 74350600 24 2 101 B30918+444 340 | N2841 091836.0 5111 10.27 631 17027 6 10.45 0.99 0.50 024 341 | 0919+515 091919.6 513330 17.6 48250 921 1 .041 17.9 -.3 015 015 342 | 0921-213 092122.0 -212252 16.80 15584 1 343 | MK110 092144.4 523008 15.62 10465 37927 1 15.37 0.76 -.67 001 001 344 | MK705 092320.0 125704 13.90 8637 48127 1 14.71 0.56 -.77 001 060 VIIZW47, AKN202 345 | N2911 093106.0 1022 13.82 3254 25027 6 13.92 1.20 0.80 024 005 RADIO SOURCE 346 | MK707 093426.5 11914 15.40 15150 1 3 1 16.04 0.57 -.84 001 060 ZW EX COMP 347 | 0936+368 093612.0 3647 15.3 5999 41127 1 004 SY1.5 348 | 3C223 093650.9 360735 41100 2 17.06 013 003 4C36.16,NRAO328 349 | MK403 093755.7 212743 15.4 7206 25127 2 051 350 | 3C223.1 093818.8 395822 32200 2 16.36 013 003 4C39.28,NRAO329 351 | 0939+2355 093912.0 2355 15.3 6407 39127 1 004 352 | 0942+09 094248.8 095048 15.5 4021 32127 2 005 SY 1.5 FORMAN-J 353 | N2992 094318.4 -140548 13.00 2305 17227 2 1.6 13.27 1.04 0.37 004 005 ARP245,2A0943-1 354 | 09438+4735 094350.1 473536 18.11 1 18.11 125 125 z=0.541, RXJ0947.0+4721 355 | 3C227 094506.5 073917 17.0 25600 1 16.04 0.98 -.36 001 001 4C07.29,NRAO334 356 | MK124 094524.3 504329 16.00 16931 5 3 1 15.33 0.61 -.47 001 001 357 | 0945-30 094528.4 -304257 14.0 2517 19827 2 1.30 020 -5-23-16 358 | N3010B 094724.0 443254 15.1 4760 28127 6? 005 MK1237B, triple 359 | 0948+1443 094818.0 1443 17.59 0.54 -.72 060 060 1E0948.3+1443 360 | MK1239 094946.3 -012236 14.5 5974 38527 2 059 SY 1.5 361 | N3031 095130.0 691818 7.75 -38 5627 6 10.34 1.04 0.69 024 M81,WEAK X-RAY, 362 | N3034 095142.0 6955 0 9.7 267 41027 5 1.5 9.27 0.91 0.39 053 M82 363 | A0954+2447 095417.5 244734 15.8 24583 B54 Sy1 364 | AKN223 095442.0 726 15.0 6600 121 5 001 NON-SY-OSTERBRO 365 | 3C232 095525.4 323823 15.9 7 15.78 0.10 -.68 002 002 Z=0.533,TON469, 366 | N3081 095710.2 -223512 12.70 2409 28227 2 .024 12.91 0.95 0.37 042 033 367 | N3080 095714.2 131703 14.50 10493 31127 1 004 MK1243 368 | N3065 095734.6 722440 13.13 2004 14027 4 133 VIIZw303 369 | N3066 095753.0 722159 14.5 2092 28127 5 13.50 0.70 0.03 005 004MK133, NON-SY 370 | N3079 095836.0 5555 11.2 1114 25127 6 12.05 0.82 0.19 024 371 | 3C234 095857.4 290137 55400 1 17.27 013 003 372 | TON28 100112.0 2913 15.62 98600 7 15.50 0.12 -.90 002 002 373 | PG1001+054 100143.3 052735 16.13 48300 9 7 006 374 | 1003-2402 100313.6 -240221 17.5 46045240910 1 096 M00.02 375 | MK715 100205.1 150117 14.80 25344 21127 1 15.95 0.87 -.33 049 057 376 | N3125 100418.1 -294130 13.5 1097 24 27 5 13.55 0.26 -.46 005 005 TOLOLO 3 HEII 377 | 4C13.41 100445.1 130338 15.3 71900 7 15.15 0.13 -.82 002 002 PKS 378 | MK716 100727.5 232119 16.50 17083 0 3 050 379 | F427 100744.0 -423330 9980 2 010 E263-G13 380 | 1008+3452 100854.9 345246 18.4 43150 9 7 17.62 0.82 -.83 060 060 1E1008.9+3452 381 | TON490 101105.7 250411 15.4 7 002 Z=1.631 382 | FAIR1149 101112.0 -354445 8540 75 31 2 092 E374-G44 383 | P1011-282 101112.2 -281632 15.7 75800 7 002 384 | PG1011-040 101149.2 -040343 15.49 17400 9 7 006 385 | 1011+0329 101150.2 +032924 18.5 93800 9 7 .021 17.72 0.83 0.12 060 060 1E1011.8+0329 386 | PG1012+008 101220.8 004833 16.0 55400 7 006 387 | A1013+4225 101344.5 422524 15.2 16788 B54 Sy1 388 | I2560 101405.0 -331903 2893 30 31 2 084 389 | N3185 101454.0 2156 13.23 1237 0 1 6 044 390 | MK720 101500.6 71317 15.00 13500 1 5 2? 15.10 0.88 -.10 049 057 391 | MK141 101539.3 641306 15.20 11700 1 3 1 14.90 0.63 -.36 001 001 11-13-18 392 | TON34 101706.0 280100 16.06 7 15.69 0.37 -.86 002 002 Z=1.924 393 | N3227 102046.8 200706 12.20 1170 41127 2 1.3 13.52 0.82 -.11 001 001 VV 209,H1019+20 394 | MK142 102223.0 515550 16.12 13493 39927 1 .96 15.77 0.44 -.58 001 001 395 | I614 102424.0 -0312 14.8 10241120118 2 005 396 | TON524A 102846.5 290227 16.40 18000 27 1 .30 16.18 0.51 -.47 001 057 397 | N3281 102936.0 -3436 0 12.62 3395 196 1 2 1.74 042 3A1029-345 398 | A1029+3928 102949.7 392850 16.6 19187 B54 Sy1 399 | MK34 103051.5 601722 16.00 15355 36527 2 14.76 1.06 0.07 001 001 10-15-104 400 | 1031+5822 103107.6 582224 19.3 74325 9 7 .022 18.66 0.59 -.79 060 060 1E1031.1+5822 401 | 10317+3954 103144.2 395359 15.6 12951 137 1 127 xray 402 | 1034+0609 103400.0 0608 14.7 3507 32127 2 005 403 | N3312 103440.8 -271824 12.83 2774 162 0 6 044 404 | AKN253 104124.0 -0101 7800 5 001 001 NON-SY-OSTERBRO 405 | N3362 104212.0 0652 13.6 8328 27127 2 0.0 004 WEAK X-RAY 406 | 1044-2948 104401.5 -294822 17.0 15217 51910 1 096 M02.47 407 | 1051-2723 105111.2 -272314 48132 12 2 086 408 | MK1269 105230.0 4042 17.0 35964 521 1 409 | A1053+0308 105331.8 030815 19.5 70451 55 9 136 410 | MK634 105520.6 204518 16.0 19910 40527 1 15.31 0.67 -.34 051 057 411 | MK728 105824.6 111856 16.0 10703 21527 1 15.53 0.95 0.26 049 057 SY1.5 412 | A1058+45 105842.5 455522 14.1 8778 87127 2 004 413 | 1059+730 105908.4 730254 16.4 26670 921 .032 14.7 1.7 015 015 414 | T1059+105 105921.0 103348 15.5 10248 35127 1 011 SY1.8,IN ABELL 415 | 3C249.1 110027.4 771508 15.7 93200 7 15.72 -.02 -.77 002 002 416 | 1100-264 110059.9 -262905 16.0 7 002 Z=2.145 417 | 1101-3234 110108.4 -323451 17.5 910 1 096 Z=0.35543 418 | H1101-232 110111.1 -231320 17.00 55750 9 2.5 16.55 0.45 -.61 120 120 X-ray 419 | MK421 110140.6 382843 14.0 9230 9 13.11 0.41 -.62 003 005 420 | N3516 110322.8 725020 12.30 2648 33127 1 0.8 12.60 0.63 -.30 001 001 421 | 4C16.30 110435.2 164406 15.9 7 15.70 0.21 -.65 002 002 422 | 1105-1132 110548.4 -113146 16334 12 2 086 423 | 1108-2813 110822.0 -281342 14.9 7350300912 1 076 ESO438-G9 424 | 1108+2858 110830.0 2858 8619 33 27 6 005 ABELL 1185 C 425 | FAIR1150 111009.0 -360915 2930100 31 1 092 SY1?, ESO377-G24 426 | A1111+3257 111156.4 325754 56660300 41 138 IRAS F11119+3257, Sy1 427 | A1114+6538 111408.1 653830 16.8 44069 B54 Sy1 428 | PG1114+445 111420.5 443001 16.05 43200 9 7 006 429 | 1114-2845 111437.3 -284546 16.5 21123 40910 1 096 K02.01 430 | PG1115+407 111546.2 404214 16.02 46200 9 1 006 431 | 1116-2909 111624.0 -2909 9081 39 6 091 ESO438-G20 432 | TON1388 111630.1 213543 15.17 53000 7 006 PG1116+215 433 | MK734 111910.9 120046 14.65 14745 0 9 1 14.81 0.32 -.65 001 057 434 | N3642 111924.0 5921 11.96 1584 0 9 6 14.04 0.82 024 008 435 | A1121+0629 112132.3 062916 16.2 10792 55 2 136 436 | 1121-2806 112133.3 -280638 4076 12 2 086 437 | A1122-1244 112218.7 -124443 59658300 41 138 IRAS F11223-1244, Sy2 438 | MK40 112247.8 543927 16.00 6060 5 3 1 0.21 15.39 0.82 -.23 001 001 I ZW 26, VV144 439 | MK423 112407.6 353134 14.9 9789 33127 2 14.29 0.75 0.09 014 057 SY1.9 440 | MK1298 112643.6 -040735 15.43 17892 5 9 1 059 PG1126-041 441 | MK1447 112742.0 4951 16.0 28741 521 1 079 SY1.5 442 | 1128+6908 112809.0 690834 16.2 128886008 5 1 15.27 0.9 -.35 095 095 EXO1128+691 443 | TON580 112830.3 313040 16.0 86600 7 002 LB10236,PB2843 444 | N3718 112949.9 532039 11.72 987 100 2 024 445 | MK176 112955.4 531335 16.20 7919 38127 2 14.61 0.89 0.30 001 001 VV 150 446 | 1132-2823 113256.5 -282341 16.0 24694 57910 1 096 K03.01 447 | MK738 113324.0 2829 15.0 11755 527 5 15.30 0.67 0.04 049 057 NON SY(005) 448 | MK180 113330.0 7025 15.5 13478 31127 9 14.49 0.67 -.22 005 005 449 | N3758 113352.5 215222 14.80 8882 38127 1 14.08 0.78 -.02 001 057MK739,double nu 450 | N3783 113633.0 -372741 12.89 3033 2 1 1.91 13.43 0.56 -.70 001 001 451 | 1136+34 113635.9 341228 15.4 9834 57127 1 005 SY1.5 MEDIUM SU 452 | N3786 113704.9 321111 13.50 2657 30127 1 0.5 13.74 0.88 0.20 004 057MK744,TURNER39A 453 | MK745 113718.0 1714 14.6 31141005 5 2 14.62 0.39 -.06 049 057 AKN307, POSS SY 454 | 1139+1040 113941.0 304006 20.0 45014 9 1 .079 19.0 1.0 060 060 1E1139.7+1040 455 | A1139+2520 113955.5 252017 17.0 55161 B54 Sy1 456 | 1141+3727 114155.0 372706 34326150 24 2? 101 B31141+374s Poss 2 457 | A1142+7957 114216.2 795731 15.2 1799 55 1 136 458 | N3862 114229.6 195302 14.0 6462 24127 4 0.50 14.15 1.05 0.46 021 0053C264 459 | MK1457 114430.0 5244 15.6 14595 121 2 079 460 | N3898 114636.0 5622 11.60 1113 24027 6 11.83 0.96 0.54 024 008 461 | N3921 114828.0 552120 13.40 5895 1 0 6 13.35 0.79 0.39 044 004MK430,IZW28 462 | PG1149-110 114930.9 -110534 15.46 14700 9 1 006 463 | MK42 115105.7 462924 15.20 7395 251 3 1 15.45 0.79 -.19 001 001 8-22-28 464 | POX20 115324.0 -1851 18.5 18360 924 2 058 465 | N3982 115353.0 552400 12.45 1188 27027 2 061 466 | N3998 115520.9 554355 11.79 1030 16027 6 11.70 0.98 0.58 024 467 | 4C29.45 115658.1 293124 15.6 27 7 002 Z=0.729,TON599 468 | ISZ96 115806.0 -2034 0 14.7 18639 117 1 032 469 | MK1310 115840.8 -032358 15.1 5861 127 1 0.95 0.15 059 070 470 | N4036 115854.0 6210 11.87 1402 20027 6 11.20 1.01 0.58 024 471 | A1159-0112 115953.0 -011232 45177 61 27 138 IRAS F11598-0112, Sy1 472 | N4051 120036.4 444835 11.50 613 34127 1 0.8 12.64 0.80 0.05 001 001 473 | N4074 120156.2 203540 15.4 6600 1 5 2 14.44 0.99 0.37 001 057 AKN 347 474 | GQ_COMAE 120208.9 281053 15.7 49450 7 15.51 0.19 -.93 002 002 X-RAY 475 | N4111 120430.0 432100 12.08 794 0 0 6 11.22 0.90 0.48 024 476 | A1204+1729 120437.2 -172924 20.5 55 9 136 477 | N4117 120512.0 432400 14.3 958 28127 2? 004 478 | 1205+4657 120528.7 465747 18.1 30570 9 5 .051 17.53 0.62 -.53 060 060 1E1205.5+4657 479 | MK198 120643.3 472016 15.20 7169 1 3 2 14.73 0.82 0.07 055 005 8-22-73 480 | A1207-0444 120711.1 -044432 38480 60 43 138 IR89077,IRAS F12071-0444, Sy2 481 | N4151 120801.1 394102 11.20 970 127 1 6.8 11.91 0.58 -.57 001 001 482 | ON313 120805.4 321349 15.8 7 16.00 -.20 -.70 002 002 Z=0.388 483 | N4152 120806.0 161800 13.25 2161 027 5 13.03 0.66 -.06 049 007MK759,NON-SY(00 484 | N4156 120818.2 394503 14.28 6747 21027 5 0.02 13.77 0.89 0.07 021 021 485 | A1210+2601 121047.5 -260126 19.0 83342 55 9 136 486 | N4192 121112.0 151000 11.0 -98 15127 6 11.21 0.92 0.48 004 007 487 | PG1211+143 121144.8 141952 14.63 24273 39927 7 006 x-ray 488 | N4203 121233.9 332829 11.80 1117 23027 4 133 489 | N4235 121436.7 72809 12.86 2300100021 1 12.82 1.03 1.55 048 045 490 | ON325 121521.1 302340 16.0 9 15.50 0.46 -.61 002 002 491 | N4253 121555.6 300526 13.70 3836 1 3 1 0.17 13.55 0.72 0.06 050 057MK766 492 | P1216-10 121603.4 -100356 16. 26193 912 2 068 493 | N4258 121630.0 473500 9.19 449 0 2 6 11.65 0.78 0.30 024 494 | MK1320 121642.0 -0133 15.0 30779 5 5 1 059 QSO? 495 | N4278 121736.0 2933 11.2 631 14127 6 11.26 0.95 0.53 024 496 | 1219+305 121851.8 302714 16.0 9 9 3.0 15.85 0.65 -.50 046 046 2A1219+305 497 | N4303 121924.0 0445 10.9 1585 22127 6 12.88 0.78 0.19 004 008 498 | MK205 121933.5 753515 14.5 20978 5 5 1 15.16 0.31 -.90 005 005 499 | MK50 122050.7 025722 15.50 7013 5 3 1 0.66 -.36 040 070 500 | 1222+04 122248.0 043752 17. 22897 921 1 013 501 | 4C25.40 122309.1 251512 16.0 80300 7 002 TON616 ETC. 502 | N4388 122312.0 1256 12.2 2545 22127 2 .020 12.78 0.82 0.08 004 XRAY? 503 | N4395 122318.0 3349 10.84 318 5 2 1 13.13 0.57 -.18 099 008 Dwarf 504 | 1223+2522 122333.2 252249 17.9 20100 8 .044 17.3 0.6 071 071 1E 505 | N4419 122424.0 151900 12.23 -175 10027 6 11.71 0.93 0.39 044 008 506 | N4438 122513.6 131707 12.0 86 23127 6 .005 12.09 0.93 0.59 004 X-RAY,IN VIRGO 507 | N4450 122600.0 172200 11.29 1945 21027 6 13.19 1.01 0.62 044 008 508 | 3C273 122633.4 021942 13.1 47352 7 .91 12.86 0.21 -.85 002 002 X-RAY 509 | BB281 122706.0 150700 17.8 77629 605 5 1 073 510 | 1228+1642 122806.9 164219 17.8 9 7 .043 17.5 0.35 060 060 Z=0.839 511 | N4486 122818.0 124000 10.30 1292 10027 6 12.05 1.00 0.64 024 M87,VIRGO A 512 | N4501 122930.0 144200 10.49 2321 21027 6 12.20 1.05 0.65 044 513 | MK771 122933.2 202602 15.1 18881 1 5 1 15.30 0.27-1.02 050 002 AKN374,TON1542 514 | I3528 123224.0 155100 15.2 13830 37127 1 089 515 | N4507 123254.0 -393700 14.0 3480 30817 2 .030 12.84 0.92 1.08 001 033 T1232-396 516 | N4552 123308.4 124956 11.30 322 13027 6 134 M89 517 | N4569 123418.0 132600 10.58 -223 18027 6 12.31 0.75 0.17 044 033 518 | N4579 123512.0 120534 11.5 1502 19127 6 11.72 0.97 0.50 004 007 SY1.5? 519 | I3599 123512.9 265857 15.7 6459 721 0 1 113 RE1237+264 520 | N4593 123704.7 -050411 11.87 2698 0 1 1 0.60 042 521 | TOL74 123809.0 -362930 14.2 3292 27927 2 13.66 0.51 0.43 010 FAIR312,WEAK X- 522 | N4631 123945.3 324905 10.04 620 50 0 5 12.37 0.68 0.07 005 007 523 | PG1244+026 124402.1 023831 16.15 14400 9 7 006 524 | 1245-2709 124540.3 -270911 16.5 19900117910 1 096 K06.02 525 | N4696 124606.0 -410200 3008 39 6 091 526 | 1246-2916 124612.7 -291641 17.5 43923117910 1 096 K06.03 527 | 1246-1107 124653.6 -110744 14476 12 2 086 528 | 1247-2755 124724.2 -275536 17.5 55210 93910 1 096 K06.04 529 | N4719 124743.9 332547 14.2 7061 29127 5 050 MK446,NON-SY(00 530 | 1249-1308 124935.2 -130836 15.0 4386 33910 1 096 R12.02,MCG-2-33-34,IRAS 531 | FAIR315 125033.0 -412147 4850 12 010 AG-40 532 | N4785 125035.0 -482913 3750100 31 2 084 533 | 1251-2810 125142.7 -281005 17.0 20563 96910 1 096 K07.01 534 | 1252-2640 125215.1 -264040 16.5 17391 87910 1 096 M12.22 535 | FAIR316 125350.0 -463917 4950 12 010 536 | MK231 125405.0 570838 14.1 12431 25127 1 13.85 0.85 0.14 001 001 Sy1,MK231,Abs line 7850 30(27),IRAS F12540+5708 537 | N4826 125418.0 215700 9.60 414 0 2 6 9.62 0.86 0.36 044 007 538 | 1254-17 125436.0 -17 17. 14851 43827 1 005 A1644-6 539 | 1255-2930 125500.0 -293000 3085 39 6 091 ESO443-G17 540 | 1255-2324 125506.9 -233413 17.5 35837 90910 1 096 M12.23 541 | X_COMAE 125757.7 284011 16.5 27260 1 16.65 0.58 -.36 001 057 542 | MK236 125818.1 615526 17.00 14985 5 5 1 15.48 0.66 -.45 001 001 543 | 1258-3208 125836.0 -3208 9414 39 6 091 ESO443-G29 544 | N4903 125836.0 -3040 4974 39 6 091 545 | N4922B 125900.0 2935 15.0 7053 25127 2 004 546 | MK783 130030.4 164033 16.00 19984 0 3 2 15.55 0.49 -.50 001 057 547 | 1300-3158 130036.0 -3158 4863 39 6 091 ESO443-G41 548 | 1300-1325 130044.2 -132527 16.5 13862 96910 1 096 R12.01 549 | N4941 130136.0 -0517 12.17 720 240 0 2 044 550 | N4945 130231.0 -491200 9.48 563 14201 2 114 551 | P1302-102 130255.8 -101717 15.1 85700 7 14.92 0.12 -.90 002 002 552 | 1303-4008 130333.0 -400839 13.2 4475200 31 1 13.18 0.83 084 553 | 1304+3417 130403.7 341735 19.1 84200 9 7 .035 19.0 .07 060 060 1E1304.1+3417 554 | N4968 130424.0 -232442 3007 50 31 2 084 ESO508-G6,IRAS 555 | MK64 130448.1 344022 17.00 55715 57527 1 16.97 0.41 -.74 001 001 BSO 340 556 | 1305-2407 130559.6 -240702 4106 12 2 086 557 | N5005 130836.0 3719 10.85 1022 0 1 6 10.39 0.89 0.40 044 007 558 | 1309+4111 130926.7 411130 33067 60 24 2 101 B31309+412a 559 | 1309-2500 130945.2 -250051 17.5 19025 45910 1 096 M13.24 560 | IISZ10 131028.0 -105148 15.9 10210 1 1 032 561 | N5033 131109.2 365130 10.60 892 16627 1 1.4 11.09 0.82 0.27 034 007 H1310+371 562 | 1313+2140 131330.0 +214044 27 1 005 RX1315+2125 563 | I4218 131430.0 -0200 14.40 5808 42127 1 005 564 | I4214 131454.0 -3150 2297 39 6 091 565 | 1315+3141 131240.3 +315719 17.25 21580 B 2 131 AXJ131501+3141 566 | 1315+3142 131241.2 +315811 7? 131 AXJ131502+3142 567 | N5077 131654.0 -1224 12.0 2823 5 0 6 024 568 | TON153 131734.2 274352 15.3 7 002 Z=(1.022) 569 | N5101 131900.0 -2710 1848 39 6 091 570 | 1319-3048 131910.6 -304830 17.0 13430 51910 1 096 K08.02 571 | 1319-1627 131942.8 -162756 5005 12 2 086 MCG-3-34-63 572 | MK1347 132024.0 0825 15.40 14907110127 1 0.48 -.41 059 070 573 | 1321+0640 132106.0 0640 15.5 2? 005 574 | A1321+0552 132148.6 055224 19.1 61488 58B27 138 QSO,IRAS F13218+0552, Sy1 575 | 1322+2918 132222.2 291835 15.29 7060 R27 2 004 576 | N5128 132224.0 -4246 0 7.96 541 6 0 5 5.0 13.47 1.69 0.95 003 CEN A,2A1322-42 577 | N5135 132256.0 -293418 12.80 4112 022 2 .018 061 578 | I4253 132448.0 -2737 10197 39 091 579 | A1325+2424 132557.8 242457 17.9 66853 B54 Sy1 580 | I4271 132712.0 3741 15.6 17080 121 2 014? 6-30-15 DOUBL 581 | 1327+32 132725.7 320906 17.9 27711 44 27 1 .058 17.3 0.6 064 071 1E1327 (CHARLES 582 | N5194 132745.4 472718 9.03 474 23027 6 12.89 0.84 0.11 024 M51 583 | N5195 132752.8 473148 10.94 558 23027 6 12.30 1.21 0.73 024 M51 584 | A1328+2508 132827.9 -250835 15.7 7795 55 2 136 585 | 1329+0216 132919.5 021629 25864 12 2 086 586 | I894 132942.0 1718 14.90 6507 31127 2 004 587 | MK789 132955.4 112144 14.50 9318 1 5 1 0.64 14.68 0.57 -.18 050 057 VIIIZW 323 588 | 3C287.1 133020.5 021609 19.2 64700 1 18.27 0.92 -.15 001 001 589 | A1330-1739 133034.4 -173937 18.6 44350 817 2 17.2 1.4 093 Sy1,IRAS F13305-1739 590 | MC1331+170 133110.1 170424 16.0 7 002 Z=2.081 591 | 1331-2325 133151.5 -232528 2577 12 2 086 ESO509-IG64 592 | 1331-2311 133155.4 -231130 13367 12 2 086 ESO509-IG66 593 | 4C55.27 133215.8 551646 16.0 7 002 Z=1.249 594 | M-6-30-15 133301.5 -340230 15.0 2334 20927 1 2.6 020 2A1326-310,ESO383-G35 595 | A1334+3932 133412.5 393247 18.0 53756 419-2 138 IR99146,IRAS F13342+3932, Sy1 596 | 1335+39 133528.5 392431 14.2 6023 31127 2 004 597 | N5252 133542.0 0447 14.5 6926 127 2 004 598 | N5256 133614.7 483153 14.1 8239 35127 2 13.42 0.77 0.06 005 004MK266,IZW67 599 | 1338-1423 133831.8 -142332 16.0 12528 87910 1 096 R14.01 600 | CC_Boo 133803.9 275608 18.5 516003009 1 17.79 118 118 RX134021+2741, variable 601 | MK268 133854.0 303749 15.30 12266 33127 2 14.66 0.94 0.28 001 001 602 | 1339+053 133935.3 52012 16.7 79720 921 7 .039 16.8 -.1 015 015 603 | N5283 133941.4 675527 14.30 3134 26127 2 14.05 0.92 0.31 001 001MK270 604 | N5273 133955.1 355421 12.71 1089 23027 1 13.24 0.83 0.16 004 605 | TON730 134136.8 255355 15.93 26100 9 1 006 PG1341+258 606 | MK273 134251.7 560814 15.00 11180 35127 2 14.91 0.77 0.10 005 MK273,IZw71,VV851,IRAS F13428+5608,Sy2 607 | MK273X 134257.2 560911 20.8 11270 954 2 126 x-ray, faint companion toMK273 608 | MK69 134351.2 295309 16.50 22994 27527 1 15.93 0.52 -.44 001 057 609 | A1344+0802 134421.7 080214 40575 29 -5 138 IRAS F13443+0802, Sy2 610 | MK461 134504.4 342357 14.5 4894 34127 2? 005 611 | P1345+12 134506.2 123218 17.00 36384 2 035 4C12.50,OP175,D 612 | A1345-2956 134528.4 -295658 22728 24 43 138 IRAS F13454-2956, Sy2 613 | N5298 134542.0 -3011 4420 39 6 091 614 | 1346+26 134616.4 264602 16.5 17731 44927 2 005 1E1346+26,SY1.8 615 | I4329A 134627.9 -300340 12.79 4797 37227 1 3.6 14.44 0.96 0.51 001 001 616 | 1346-2757 134630.0 -2757 4995 39 091 E445-G51 617 | FAIR325 134824.0 -475010 2950 12 3 010 618 | T1351-375 135117.3 -373151 15.00 15510 1 15.37 1.25 0.10 001 036 619 | MK662 135146.4 234032 15.87 16533 8 5 2 15.37 0.69 -.24 051 057 PG1351+236 620 | PG1351+640 135146.3 640028 15.2 26373 9 7 14.84 0.34 -.72 006 006 621 | N5347 135105.4 334400 13.18 2335 200 6 2 12.70 0.76 0.04 005 008 622 | MK279 135153.6 693313 14.50 9129 25127 1 1.9 14.46 0.69 -.45 001 001 2-13-22 623 | A1352+3310 135206.8 331032 15.4 7795 55 1 136 624 | 1352+1820 135211.5 182058 15.6 45550 9 7 .43 15.5 0.08 060 060 1E1352.2+1820 625 | 1352+1828 135227.9 182805 18.5 9 7 .019 18.0 0.47 060 060 Z=0.9771E1352.5 626 | N5371 135336.0 4042 11.59 2561 0 1 6 12.63 0.98 0.52 024 627 | MK463 135339.9 183658 14.80 14940 1 5 2 14.22 0.79 -.10 001 057 MCG3-36-5, DOUBNUC 628 | MK464 135345.5 384907 16.50 15137 37527 1 1.24 0.83 -.43 001 070 629 | 1354-2636 135426.6 -263625 17.0 40106105910 1 096 M15.15 630 | 4C58.29 135635.8 580637 16.0 96203 7 002 631 | 1357-0228 135731.1 -022800 18.0 9 7 .036 18.1 -.11 060 060 Z=0.416 632 | N5393 135742.0 -2838 6019 39 6 091 633 | 1359-2518 135906.0 -2518 6389 39 091 ESO510-G46 634 | A1400+2214 140014.4 221416 16.7 19786 B54 Sy1 635 | N5427 140048.6 -054730 12.06 2565 160 0 2? 11.53 0.67 -.11 081 008 636 | 1401+0952 140142.0 095200 16.6 9 7 .062 16.6 0.02 060 060 Z=0.43 637 | PG1404+226 140402.8 223759 15.82 29400 9 7 006 638 | I4374 140436.0 -2647 6534 39 6 091 639 | MK668 140445.6 284129 16.00 23100 1 1.02 0.20 001 070 OQ208 640 | A1405-1958 140523.3 -195802 48536120 17 138 IRAS F14054-1958, Sy2 641 | A1407+0525 140700.3 052540 79591400 43 138 OH Gigamaser,IRAS F14070+0525, Sy2 642 | N5506 141039.1 -025826 13.60 1753 9 27 2 2.8 13.12 0.98 0.15 037 005 2A1410-029 643 | PB1732 141150.1 441412 14.99 26700 9 7 002 644 | 1414-2510 141404.5 -251021 15.5 70829150910 1 096 M16.11 645 | 1415+5244 141500.0 5244 6 116 QSO Z=0.986 646 | PG1415+451 141504.3 450957 15.74 34200 9 7 006 647 | MK673 141506.1 270515 15.0 10933 541 5 2? 067 648 | N5548 141543.5 252201 13.10 5185 40127 1 1.7 13.76 0.48 -.71 001 001 2A1415+255 649 | PG1416-129 141621.3 -125658 15.40 38700 9 7 006 650 | A1416+2624 141629.5 -262454 14.9 6595 55 1 136 651 | 1416+0809 141636.0 0809 15.5 16836 29127 2 005 652 | P1417-19 141702.6 -191442 17.5 35814 921 1 013 653 | OQ530 141800.0 5440 15.0 9 002 654 | MK471 142046.8 330444 14.5 10244 28127 2? 14.42 0.85 0.08 053 655 | TON202 142521.9 264538 15.9 7 15.68 0.20 -.73 002 002 Z=0.366 656 | MK813 142617.6 195456 15.50 33270 521 1 15.27 0.15 -.79 050 057 657 | MK1383 142633.8 013027 15.05 25552 42927 1 0.48 -1.0 059 070 PG1426+015 658 | H1426+428 142635.9 425346 16.95 38665 9 3.3 16.45 0.50 -.55 120 120 X-ray 659 | 1428+4217 142826.7 421753 20.9 R 6 132 GB1428+4217 z=4.715 660 | N5643 142928.0 -435712 11.36 1200 0 2 2?.039 061 661 | 1430+0527 143027.4 52713 17.0 59949 52927 1 005 1E1430+055 662 | N5675 143036.4 363119 14.0 3973 26127 6 004 663 | N5674 143122.5 054038 13.7 7442 32127 2 0.00 005 WEAK X-RAY 664 | MK816 143142.0 5300 16.5 265451005 5 5 049 NON-SY(051) 665 | 1431-3237 143142.8 -323719 7642 12 2 086 666 | MK474 143306.1 485247 15.30 10650 1 3 1 0.16 15.25 0.97 -.18 001 001 NGC 5683 667 | MK817 143457.9 590039 14.30 9430 35127 1 13.86 0.31 -.57 001 057 668 | Q1435+630 143500.0 6300 15.0 7 002 Z=2.060 669 | N5695 143519.7 364702 13.9 4262 31127 2 13.60 0.95 0.28 051 057MK686 670 | PG1435-067 143537.5 -064522 15.54 38700 9 7 006 671 | 1438+0840 143818.0 0840 15.2 9062 53127 1 005 SY 1.5 672 | MK477 143902.6 534304 15.2 11200 1 2 14.84 1.01 0.22 001 I ZW 92 673 | A1439+5332 143928.5 533258 31450 50 21 138 IR107734,IRAS F14394+5332, Sy2 674 | N5728 143936.6 -170224 12.21 2834 10027 2 .022 042 675 | MK478 144004.5 353907 15.00 23676 5 5 1 14.58 0.33 -.84 001 001 PG1440+356 676 | A1442+0313 144229.9 -031335 17.2 55 9 136 677 | A1444+0820 144458.1 -082056 16.4 58759 55 1 136 678 | A1447+2758 144722.6 275844 18.6 67453 55 9 136 679 | MK1388 144824.0 2256 15.7 6384 30121 2 085 680 | PG1448+273 144858.6 272142 15.01 19500 9 1 006 681 | MK830 144906.0 5851 16.0 62937 521 1 077 682 | 1459+1655 145912.0 1655 15.4 9460 127 2? 005 weak sy2 or Starburst 683 | A1500+1433 150010.8 143315 48790 70 43 138 IR110899,IRAS F15001+1433, Sy2 684 | MK841 150136.3 103756 14.00 10921 37527 1 0.71 0.68 -.89 001 070 PG1501+106 685 | OR103 150200.2 104121 15.5 7 002 Z=1.833 686 | N5851 150430.8 130302 14.9 6486 25127 6 004 687 | MK845 150612.5 513837 15.60 13862 1 5 1 051 688 | A1506+2720 150634.2 272034 18.5 55 9 136 689 | 1509-2107 150906.9 -210739 15.5 13512228910 1 096 J18.01 690 | 4C37.43 151246.9 370156 15.5 7 002 Z=0.371 691 | N5899 151312.0 4214 12.79 2554 0 6 6 12.08 0.80 0.26 044 692 | A1513+1512 151331.0 -151243 19.6 55 9 136 693 | A1513-1958 151301.2 -195815 32792 57 43 138 IRAS F15130-1958, Sy2 694 | P1514+00 151405.0 0026 16.5 15524 912 6 068 695 | 3C317 151417.0 071217 14.8 10500 1 2 013 696 | APLIB 151445.3 -241122 15.8 14700 9 15.00 0.80 -.29 002 002 OK225,PKS 697 | MK849 151742.0 2845 0 17.00 24721 5 5 1 050 698 | 1518+3052 151840.0 305209 23263 49 27 1 005 A2061-191 699 | PG1519+226 151902.1 223822 16.09 41100 9 7 006 700 | 1519+279 151923.8 275511 17.2 68630 921 7 .018 18.2 -1.0 015 015 701 | 1519+5050b 151936.0 505048 17058 90 11 1 108 CG693A 702 | 1521-2457 152100.2 -245743 17.16 42604 51810 1 16.72 0.43 096 096 M19.05 703 | A1522+0955 152208.5 -095526 17.3 43170 55 1 136 704 | 1524+0046 152404.6 004603 15165 12 2 086 705 | N5929 152418.9 415041 14.00 2504 23127 2 13.40 0.98 0.23 004 005 ARP90,IZW112 706 | MK854 152436.0 433400 17.5 46558 5 5 1 051 707 | 1526+285 152637.8 283558 16.4 921 7 .049 16.40 0.00 -.60 015 015 Z=0.40 708 | MK1098 152738.0 303924 15.1 10453 1 5 2 059 709 | A1528+2036 152835.6 203616 16.7 64755 55 1 136 710 | N5940 152851.5 073737 14.30 10160 26127 1 1.2 004 1-39-025,U9876 711 | A1529+2029 152927.2 202937 17.2 15289 55 1 136 712 | 1529+0504 152959.3 050402 18.0 65500 9 2 .062 17.8 0.18 060 060 1E1529.9+0504 713 | 15307+3252 153042.0 325200 2 115 z=0.93, IRAS15307+3252 714 | 1530+1511 153054.9 151108 18.6 27000 9 .062 18.0 0.63 060 060 1E1530.9+1511 715 | 4C35.37 153145.2 355421 46950 1 17.80 001 003 OR353 716 | 1533+14 153332.8 144057 14.7 5910 28127 2 .038 15.9 0.9 004 071 1E813-1(MEDSUR) 717 | MK290 153444.8 580401 15.54 9030 9 3 1 0.84 14.96 0.60 -.62 001 001 PG1534+580 718 | MK486 153520.7 544322 15.2 11400 1 3 1 14.78 0.43 -.68 001 001 IZW121,PG1535+5 719 | MK860 153718.0 250600 15.5 6687 527 5 049 NON-SY(005) 720 | 4C14.60 153830.6 145725 16.02 9 15.50 0.52 -.60 002 002 721 | A1544+8204 154413.9 820431 17.6 55 9 136 722 | 1545-1336 154500.0 -133600 2622 39 27 2 098 IRAS 723 | SP55 154601.0 413300 16.0 9844 927 2 005 SANDULEAK&PESCH 724 | A1546-0450 154617.9 -045028 30150 60 43 138 IR119351,IRAS F15462-0450, Sy1 725 | 1548-0344 154803.5 -034418 9020 12 2 086 726 | PG1552+085 155219.2 083106 16.02 35700 9 7 006 727 | MK291 155254.1 192016 15.00 10746 38527 1?0.22 15.14 0.51 -.37 001 728 | 1554+2957 155441.8 295726 25838 76 -1 1 005 D21-AY 729 | MK493 155716.3 351015 14.9 9561 39127 1 051 SY 1.5 730 | 1557+272 155718.2 271204 17.2 19480 921 .019 16.30 0.90 0.10 015 015 731 | 3C327 155955.7 020612 31266 40 27 2 15.88 013 003 4C02.41,DA396,N 732 | 1602+2410 160245.1 +241041 17.7 26160 9 7 .047 17.1 0.59 060 060 1E1602.7+2410 733 | 1602+2818 160254.0 281800 15.5 23064 35127 1 005 734 | MK298 160321.9 175611 15.20 10285 72127 2 15.19 1.01 -.09 001 001 IC 1182 735 | MK871 160615.5 122744 14.90 10100 1 3 1 0.67 -.18 001 070 IC 1198 736 | WKK6092 160732.7 -603011 14.96 5012 5B25 1 128 737 | 1611+3725 161112.0 37 25 15.5 20871 40127 1 004 738 | TON256 161208.7 261146 16.0 39300 9 7 15.41 0.65 -.78 002 002 739 | MK876 161336.2 655037 15.37 38688 75927 1 0.8 15.29 0.47 -.66 001 PG1613+658,H162 740 | N6104 161440.1 354950 14.1 8377 24127 1 005 ?SY 741 | 1615+06 161518.2 061112 16.7 11358 911 1 0.5 16.0 0.72 038 038 1E1615+061 742 | A1615+0146 161536.2 014637 39572 41 138 IRAS F16155+0146, Sy2 743 | 3C332 161547.0 322951 16.5 45550 9 1 013 4C32.51,NRAO498 744 | 1616+25 161636.0 2546 15.5 14442 38127 1 005 745 | MK877 161756.5 173135 15.53 34166 921 1 050 PG1617+175 746 | MK699 162205.3 411148 15.40 10500 1 5 1 001 IIIZW 77 747 | PG1626+554 162651.5 552905 16.17 39900 9 1 060 748 | MK883 162747.2 243307 15.20 11407 1 5 2 050 4-39-8 749 | MK885 162942.9 672906 15.4 7636 127 1 14.56 0.82 -.17 051 750 | PG1634+706 163451.7 703737 14.9 9 7 006 Z=1.334 751 | VIIZW653 163600.0 8536 0 16.3 18780 124 1 019 752 | N6251 163757.0 823818 14.0 7400 22127 6 075 753 | 1641+399 164153.4 395905 18.7 921 7 .014 19.3 -.6 015 015 Z=0.594 754 | 1647+3618 164718.0 3618 15.2 9250100127 6 005 755 | N6221 164825.2 -590800 11.75 1418 5 2.60 043 H1649-595 756 | N6240 165029.5 022936 14.7 7298 331 5 2 13.37 0.94 0.61 078 008 757 | MK501 165211.7 395026 14.5 10200 9 13.80 0.74 -.25 003 005 B2,DA426,4c39.4 758 | 1652+3930 165227.0 393020 17.27 20656 30821 1 .037 16.74 0.53 102 102 IR 759 | MK504 165910.4 292844 17.00 11000 5 3 1 0.19 15.78 0.85 -.47 001 001 5-40-26 760 | MK700 170121.6 313139 15.40 10143 38127 1 0.74 0.14 001 070 761 | 1701+61 170156.3 610238 17.4 49150 921 .023 17.0 0.4 015 015 762 | U10683B 170224.7 -012823 16.5 9231 90 10 1 1.35 047 1H1703-01 763 | A1703+7257 170341.2 725733 16.4 15889 55 1 136 764 | 3CR351 170403.5 604831 15.5 7 15.28 0.13 -.75 002 002 X-RAY 765 | 1704+607 170443.0 604559 18.9 24000 921 17.70 1.20 0.50 015 015 WEAK X-RAY 766 | 1710+3557 171042.0 3557 15.1 8050 43127 1 005 767 | N6323 171142.0 4350 14.8 7761 127 2 005 768 | N6300 171218.0 -624548 11.54 1107 0 1 2 061 769 | A1717+5444 171754.3 544450 44211 -5 138 IRAS F17179+5444, Sy2 770 | ARP102B 171756.3 490149 15.5 7493 921 1 0.12 022 VV10 771 | N6328 171847.0 -645740 15.50 4360 90 17 6 039 PKS1718-649 772 | V396_HERC 172038.0 243906 15.91 52450 7 16.38 0.47 -.89 002 002 773 | MK506 172045.6 305539 15.30 12957 44127 1 0.42 14.68 0.74 -.55 001 001 5-41-12 774 | PDS456 172529.3 -141332 14.69 55149300B39 1 14.03 0.66 -.57 122 775 | 1726+499 172601.6 495529 18.7 921 7 .012 19.3 -.6 015 015 Z=0.815 776 | IZW187 172704.3 501530 16.10 16603 9 16.02 0.75 -.30 002 040 IIZW77,OT546,VA 777 | 1736+3458 173618.0 3458 13220 62 27 1 005 778 | GR1734-292 173417.6 -290617 18.3 6414150 12 1 121 121 GRS1734-292, X-ray 779 | 1747+6836 174718.0 683658 17.1 18940 9 1 .129 16.5 0.64 060 060 1E1747.3+6836 780 | MK507 174855.8 684305 16.00 16533 46527 1 .037 052 781 | N6500 175348.0 182042 13.5 3016 33127 6 044 782 | FAIR332 175520.0 -634330 010 E103-G56 783 | Q1803+676 180337.4 673754 16.0 40800 7 002 784 | 3C371 180718.5 694857 15165 9 14.81 003 003 H1807+69 785 | 1821+6418 182100.0 641800 14.1 90000 1 106 X-ray 786 | P1821+107 182141.6 104244 16.0 7 002 Z=1.360 787 | 1822+4638 182245.6 463835 20136 37 27 2 098 IRAS 788 | 1825+1955 182506.0 1955 15.3 11991 42 -1 1 005 789 | AKN539 182734.4 502019 15.0 5065 90121 2 075 790 | 3C381 183224.4 472439 18.0 48100 1 17.24 013 003 4C47.49,NRAO568 791 | 1832-5926 183233.6 -592640 6065 70 43 2 086 FAIRall 49, IR --> Sy1 792 | 3C382 183312.0 323918 16.80 17458 50 27 1 0.96 15.88 0.89 -.14 001 001 H1832+325 793 | E103-G35 183322.0 -652818 15.0 3986 90 10 2 1.36 041 H1834-653 ? 794 | FAIR182 183837.0 -640912 15. 3300 12 2? 010 E103-G56,STEINE 795 | FAIR51 184015.0 -622458 15.10 4210 208 7 1 1.63 14.10 0.73 -.17 001 017 E140-G43,H1834- 796 | I4777 184410.0 -531211 5600 12 2 010 FAIR334,ESO183-G13 797 | 3C390.3 184537.6 794307 15.8 16661 36 27 1 1.5 14.50 0.68 -.69 001 001 VAR,4U1847+78 798 | 1846-786 184600. -7836 22800 1 1.6 066 H1846-786 799 | 1847+335 184724.8 +333011 17.2 921 7 .036 17.7 -.5 015 015 Z=0.509 800 | 1851+2746 185105.3 274641 18400 -1 1 005 IRAS 801 | 1903+4223 190350.8 422301 15.4 7960 135 1 104 802 | 1904+4049 190426.6 +404817 15.7 16322 37 27 2 005 803 | N6764 190701.2 505108 13.20 2379 32127 2 14.23 0.64 -.16 001 804 | E141-G55 191657.0 -584551 14.10 110301509 1 0.8 001 2A1914+589 805 | F513 191825.0 -740400 21050 2 010 806 | 184-IG65 192135.0 -530554 16.3 18504 812 2 15.65 0.60 -.39 017 017 807 | I4870 193248.0 -655530 14.5 760 29912 5 14.43 0.12 -.34 001 017 NON-SY-VERON(04) 808 | P1934-63 193448.3 -634937 19.0 54500 6 024 809 | FAIR1163 193450.0 -390115 5640 75 31 2 092 SY2?,E338-G17 810 | N6814 193955.8 -102633 11.90 1552 28227 1 1.5 14.21 1.12 0.37 001 001 811 | E185-IG13 194103.0 -542218 15.2 5552 33912 5 14.98 0.17 -.19 001 017 NON-SY-VERON(04) 812 | 1953+0916 195350.6 091551 15.1 7000 1-1 1 005 813 | CYG_A 195744.4 403545 17.5 17082 2 16.22 013 0033CR405,4C40.40, 814 | 2003-3441 200345.1 -344136 15.5 7480 84910 1 096 A03.01 815 | N6860 200430.0 -6115 4479 39 1 091 816 | FAIR339 200759.0 -571400 16000 1 010 817 | P2014-55 201406.1 -554852 15.5 17982 912 2 068 818 | N6890 201449.8 -445724 13.30 2466 2 1 2 12.43 0.56 042 008 819 | I4995 201613.0 -524647 4700 12 2 010 FAIR341,E186-G3 820 | 2021+1121 202102.8 112151 15.83 16905 25823 2 100 100 IR 821 | 2021+614 202113.0 612718 19.5 67912 609-2 2 082 OW637 822 | A2036+3029 203623.0 -302930 16.0 23983 55 1 136 823 | N6951 203636.0 6556 12.41 1403 18027 6 12.88 1.16 0.57 044 008 824 | MK509 204126.1 -105418 13.00 10358 35527 1 1.9 13.12 0.23 -.93 001 001 2A2040-115 825 | MK896 204344.5 -025946 16.0 78451005 5 1 049 826 | FAIR1168 204454.0 -342715 12080 75 31 1 092 827 | 2046+1925 204601.8 192549 17.65 54262300V10 2 17.65 088 088 IR PSC 828 | I5063 204812.0 -5716 13.16 3402 2 1 2 14.54 1.04 0.16 042 PKS2048-57 829 | I5064 204848.0 -5725 3377 39 091 830 | E286-IG19 205509.0 -425036 15.3 12783 812 6 14.70 0.57 -.07 017 105 831 | IIZW101 210512.0 340 14.5 7839 27127 2 005 =IIZW102 832 | 2114-4552 211443.4 -455202 17.5 20050 66910 1 096 C07.59 833 | 3C433 212130.5 215133 30450 2 16.24 013 003 4C24.54,CTA95,N 834 | A2121-1757B212154.4 -175749 33098 27 138 Q21219-1757,IRAS F21219-1757, Sy1 835 | IIZW136 213001.2 095501 14.30 18912 41127 1 14.43 0.39 -.97 001 001 PG2130+099 836 | P2135-147 213501.2 -144627 15.63 59900 7 15.53 0.10 -.83 002 002 PHL1657 837 | P2141+175 214113.8 173002 15.7 63800 7 15.50 0.16 -.75 002 002 838 | I5135 214518.0 -3511 13.10 4796 2 1 2 14.15 0.67 -.17 042 033 839 | A2147+1424 214732.5 -142452 18.5 68652 55 9 136 840 | A2150-1528 215035.6 -152822 23324 60 1 140 Narrow Line,RXJ215319-1514 841 | P2152-69 215257.8 -695540 13.8 8541 912 2 068 842 | MK516 215352.8 070743 15.4 8541 121 2 014 SY 1.8 843 | P2155-304 215558.2 -302752 14.0 9 002 X-RAY 844 | 2157-3357 215730.0 -3337 4480 39 6 091 845 | I1417 215736.0 -1322 5446 39 091 846 | 2159-2244 215906.0 -2244 5330 39 6 091 ESO532-G12 847 | N7172 215906.3 -320627 12.82 2568 36627 2?2.0 12.74 1.07 0.50 053 008 H2158-321 848 | OY401 220039.4 420209 15.5 20700 9 14.50 0.97 -.10 002 002 849 | 4C31.63 220101.1 313110 15.5 89000 7 002 850 | 2201+0319 220147.3 31915 18387 36 27 2 005 IRAS 851 | N7212 220436.0 1000 15.1 7800 135 2 023 INTERACTING 852 | 2204-3249 220450.8 -324943 15.5 17637129910 1 096 A09.25 853 | N7217 220536.0 3107 11.29 948 0 1 6 11.85 1.07 0.55 044 008 854 | N7213 22 612.0 -4725 0 11.57 1769 210 0 1 1.1 12.70 1.00 0.00 043 043 H2209-471 855 | N7214 220617.4 -280318 13.0 6832 40627 1 14.10 0.53 -.39 005 008 856 | I5169 220712.0 -3620 3028 39 091 857 | PG2209+184 220930.2 182701 15.86 21000 9 1 006 858 | MK304 221445.9 135920 14.60 19707 54127 1 1.39 14.16 0.51 -.92 001 001 IIZW175,PG2214+ 859 | 2215-0347 221511.7 -034750 17.2 72250 921 7 .041 17.20 0.00 -.70 015 015 860 | 3C445 222114.7 -022127 16.9 16850 9 1 15.77 1.16 -.17 013 003NOT X-RAY SOURC 861 | FAIR357 222339.0 -703900 8550100 2 010 E76- 862 | N7279 222418.0 -3524 9097 39 6 091 863 | 2227+3628A 222742.0 3628 15.5 7539 30127 6 005 UGC12056 864 | 2230+0757 223000.0 757 15.2 7542 38 27 1 005 SY1.5 865 | FAIR194 223135.0 -620837 010 E147- 866 | N7314 223300.0 -261830 11.60 1626 6 0 2 1.83 12.12 0.76 0.11 065 008 3A2233-259 867 | 2233+0123 223308.8 012359 16962100 12 1 119 A2457-7 868 | N7319 223348.0 3343 14.8 6764 28127 2 13.53 1.04 0.27 004 008 IN STEPHANS QUI 869 | MK915 223407.3 -124818 15.0 7237 527 1 042 SY1.5 870 | 2237+0747 223746.5 74734 14.30 7487 36127 1 0.6 004 871 | MK917 223848.1 315430 14.50 7335 36127 2 049 872 | AKN564 224018.3 292747 14.40 7371 25127 1 0.54 -.48 001 070 SY1.5 873 | 2240-4612 224030.0 -461254 14.8 9930 17812 3? 14.26 0.61 -.04 017 017 ESO290-G01 874 | A2241+1247 224102.7 -124723 20.0 67753 55 9 136 875 | 2241-6049 224157.5 -604948 33960 1 107 IR 876 | 3C452 224333.0 392526 16.5 24300 6 024 4C39.71,DA584,N 877 | N7378 224518.0 -1205 2580 39 091 878 | A2249+2626 224945.5 262643 16.0 20086 B54 Sy1 879 | MK309 225009.9 242752 15.3 12620 37127 2? 15.22 0.47 -.46 051 005 IV ZW 121 SEE REF 079 880 | 2251-1751 225103.7 -175135 17.4 20400 9 2?.056 16.45 0.91 0.05 060 060 1E2251.1-1751 881 | MR2251-178 225125.9 -175054 14.0 19133 25 27 7 002 X-RAY 882 | 4C11.72 225140.6 112039 16.1 96800 7 15.82 0.21 -.84 002 002 883 | 22518+1130 225151.3 113105 15.7 8476 9122 2 139 AXJ2254+1146,UGC 12237 884 | A2254+0833 225411.3 083322 49799 42 -5 138 IRAS F22542+0833, Sy2 885 | N7450 225810.0 -131114 14.5 3103 29527 2 059 MK1126 886 | 2258-4434 225826.6 -443415 16.8 20080 817 1 16.1 0.7 093 887 | N7466 225936.0 2647 14.40 7497 28127 5 059 MK1127,NON-SY REF 004,079 888 | P2300-18 230023. -185730 18.3 38661 912 1 068 889 | N7469 230044.5 83618 13.13 4793 21227 1 1.3 13.10 0.48 -.75 001 001 2A2259+085 890 | MK315 230135.7 222116 14.80 11653 25127 1 0.08 14.78 0.82 -.09 001 001 IIZW187 891 | M-2-58-22 230207.2 - 85720 14.5 14380 5 5 1 1.3 001 MK926,2A2302-08 892 | N7479 230224.0 1203 11.93 2399 32027 6 13.10 0.96 0.44 044 008 893 | 2303+1702 230327.0 170206 16.19 12591 30R 2 112 UCM2303+1702 894 | 4C39.72 230343.7 391110 18. 61800 2 17.8 013 003 895 | PB5250 230430.1 041641 15.44 12600 9 1 006 PG2304+042 896 | 2304-22 230457.5 -225919 18.2 57842 910 2 .042 028 1E2304.9-2259(A 897 | A2306+0505 230601.0 050508 51847 48 -1 2 005 IRAS F23060+0505, Sy2 898 | N7496 230658.8 -434200 12.0 1470 20 0 0.52 -.05 042 899 | 4C09.72 230847.2 095156 15.0 7 002 Z=0.432 900 | 2312-5919 231251.0 -591936 15.21 13267 921 2 14.73 0.48 -.10 017 017 ESO148-IG02 901 | N7582 231536.4 -423842 11.84 1576 31027 2 1.5 13.96 0.91 1.07 042 033 2A2315-428 902 | N7592 231547.8 -044123 14.0 7328 34 27 3 005 VV731 903 | N7603 231622.9 -000147 14.40 8872 54127 1 0.6 14.01 0.72 -.21 001 001MK530 904 | I1481 231654.0 0538 14.5 6118 30127 6 004 905 | 2317+15 231730.0 1545 21950 36 27 2 012 WEAK X-RAY 906 | 2319+09 231924.0 901 15.7 11800 27 2 004 907 | P2322-12 232243.5 -122357 16.5 24600 6 024 908 | A2323+2817 232320.7 281747 34179 37 -5 138 IRAS F23233+2817, Sy2 909 | A2323+2136 232324.7 213645 15.9 35975 55 1 136 910 | N7672 232500.0 1207 14.8 4002 34127 5 004 911 | N7674 232524.4 83013 13.60 8698 25127 2 13.67 0.76 -.03 051 005MK533,VV343 912 | N7682 232630.7 031528 14.3 5109 29127 2 13.46 0.94 004 008 NEXT TOMK534 913 | T2327-027 232758.1 - 24418 15.0 10006 35527 1 001 001 -1-59-27 914 | I1495 232812.0 -1347 6392 39 2 091 915 | A2329+2857 232931.6 285749 90009 73 -1 1 916 | N7714 233342.0 0153 13.10 2804 10127 5 13.30 0.44 -.49 005 005MK538,ARP284WEA 917 | 2337-4448 233742.0 -4448 15462 39 091 E292-G9 918 | A2338+0921 233833.5 092130 16.5 12291 55 1 136 919 | A2338+0300 233857.1 030052 43470 33 43 138 IRAS F23389+0300, Sy2 920 | N7733 233948.0 -6614 10198 39 091 921 | N7734 233954.0 -6613 10624 39 091 922 | MK1133 234136.0 2727 15.5 7417 32527 5 059 NON-SY?(005,079) 923 | N7743 234148.0 939 12.5 1658 25127 6 13.85 0.94 0.30 044 008 924 | A2344+2411 234456.7 241105 17.1 47067 55 1 136 925 | 2348+19 234840.8 195711 15.7 13045 39127 2 005 X-RAY 1E2348+19 926 | P2349-01 234922.3 -012554 17.5 52200 912 1 001 927 | A2349+2423 234952.4 242328 63555 47 138 IRAS F23498+2423, Sy2 928 | 2353+2514 235318.0 2514 15.0 17114 43127 1 005 929 | MK541 235328.4 71442 15.50 11753 26127 1 1.9 15.45 0.89 -.25 001 060 930 | I1515 235336.0 -0116 14.8 6674 26127 2 061 931 | 2354-3457 235424.0 -3457 12641 39 6 091 E349-G9 932 | 2354-3044 235453.2 -304426 15.5 9202 485-3 1 083 SY1.2,1H2351-315 933 | P2356-61 235629.4 -611141 16. 28711 912 2 058 934 | A2357+0506 235738.0 050635 16.4 11992 B54 Sy1 935 | N7811 235952.5 3 427 14.90 7690 31127 1 001 MKy 543,double n 936 | ----------------------------------------------------------------------------------------- 937 | ACTIVE GALACTIC NUCLEI CATALOG 938 | 939 | ( INCLUDES ALL SEYFERTS AND SOME SUSPECTED SEYFERTS PLUS ALL QSO'S AND 940 | BL LAC OBJECTS BRIGHTER THAN ~ 16.0 PLUS SELECTED X-RAY 941 | DETECTED AGN AND RADIO GALAXIES. WE HAVE RETAINED THE DEBUNKED 942 | SUSPECTED SEYFERTS AS CLASS 5 OBJECTS AND NOTED THEM AS NON-SY ) 943 | 944 | BASIC VELOCITY DATA SOURCES SIMILAR TO ZCAT, 945 | 946 | 947 | GALAXY ACTIVITY TYPES (COL 38) 948 | 949 | 0 UNKNOWN 950 | 1 SY 1 951 | 2 SY 2 952 | 3 NARROW LINE SEYFERT (NONTHERMAL INDICATIONS) 953 | 4 X-RAY GAL WITH WEAK LINES ONLY 954 | 5 NARROW LINE (THERMAL ?) - USUALLY DEBUNKED SEYFERT 955 | 6 LINER (A LA HECKMAN) 956 | 7 QSO (STELLAR ON POSS) 957 | 9 BL LAC TYPE 958 | 959 | NOTE: BLRG are usually classified as SY1 and NLRG as SY 2. 960 | Additional accurate positions come from references in 062. 961 | Objects are classified as LINERS (class 6) if they have [OI] 962 | strong relative to [OIII] - usually [OI] > 0.3 * [OIII]. 963 | Objects are classified as Sy 1 or Sy 2 by the precepcts of 964 | Huchra, Wyatt and Davis (1982), or Osterbrock et al. 965 | 966 | REFERENCES 967 | 968 | 001 Weedman, D. 1977, Ann. Rev. Astron. and Ap. 15, 69. 969 | Weedman, D. 1978, M.N.R.A.S. 184, 11p. 970 | 002 Hewitt, A. and Burbidge, G. 1980, Ap. J. Suppl. 43, 57. 971 | 003 Burbidge, G. and Crowne, A. 1979, Ap. J. Suppl. 40, 583. 972 | Koski, A. 1978, Ap. J. 223, 56. 973 | 004 Huchra, J., Wyatt, W. and Davis, M. 1982, A. J. 87, 1628. 974 | Huchra, J. 1977, Ap. J. Suppl. 35, 171. 975 | 005 Cruz-Gonzales, I. and Huchra, J. in preparation. 976 | Huchra, J. private catalog and unpublished photometry. 977 | 006 Schmidt, M. and Green, R. 1983, Ap. J. in press. 978 | 007 de Vaucouleurs, G. 1961, Ap. J. Suppl. 5, 233. 979 | 008 de Vaucouleurs, G. and de Vaucouleurs, A. 1972, Mem. R.A.S. 980 | 77, 1. 981 | de Vaucouleurs, G. de Vaucouleurs, A. and Corwin, H., 982 | 1978, A. J. 83, 1331. 983 | Longo, G. and de Vaucouleurs, A. 1983, University of Texas 984 | Monographs #3, A General Catalogue of Photoelectric 985 | Magnitudes in the UBV System. 986 | Longo, G. and de Vaucouleurs, A. 1985, University of Texas 987 | Monographs #3A, Supplement to the General Catalogue of 988 | Photoelectric Magnitudes in the UBV System. 989 | 009 Wisniewski, K. 1980, private communication. 990 | Wisniewski, IAU Circ 3557. 991 | 010 Fairall, A. preprint. 992 | Fairall, A. 1979, M.N.R.A.S. 188, 349. 993 | Fairall, A. 1983, M.N.R.A.S. 203, 47. 994 | Fairall, A. and Calabretta, M. 995 | 011 Ables, H. Pub. U.S.N.O. 996 | 012 Harris, D. 1981, private communication. 997 | Harris, D., Robertson, J., Dewdney, P. and Costain, C. 1982, 998 | Astron. and Ap. 111, 299. 999 | 013 Osterbrock, D. and Grandi, S. 1979, Ap. J. 228, L59. 1000 | Grandi, S. and Osterbrock, D. 1978, Ap. J. 220, 783. 1001 | Stoughton, R. and Osterbrock, D. 1980, P.A.S.P. 92, 117. 1002 | 014 Osterbrock, D. 1981, Ap. J. 249, 462. 1003 | Osterbrock, D. 1982, private communication ? (6-30-15) 1004 | 015 Chanan, G., Margon, B. and Downes, R., 1981, Ap. J. 243, L5. 1005 | Bothun, et. al. preprint. 1006 | 016 West, R. IAU Circ. 3415. 1007 | West, R. Grosbol, P. and Sterian, 1982, preprint. 1008 | 017 West, R. et al. 1977, Astron. and Ap. Suppl. 31, 55. 1009 | West, R., Danks, A. and Alcaino, G. 1978, Astron. and Ap. 65, 151. 1010 | 018 Griffiths, R., Doxsey, R., Johnston, M., Schwartz, D., 1011 | Schwartz, J. and Blades, J. 1979, Ap. J. 230, L21. 1012 | 019 Kunth, D. and Sargent, W. 1979, Astron. and Ap. 76, 50. 1013 | ________________________ 1979, Astron. and Ap. Suppl. 36, 259. 1014 | 020 Schnopper, H., Davis, M., Delvaille, J., Geller, M. and 1015 | Huchra, J. 1978. Nature 275, 719. 1016 | Pineda, F. et al. IAU Circ 3202. 1017 | 021 Elvis, M., Schrier, E., Tonry, J. Davis, M. and Huchra, J. 1018 | 1981, Ap. J. 246, 20. 1019 | 022 Stauffer, J., Schild, R. and Keel, W. 1983 preprint. 1020 | 023 Wasilewski, A. 1981, P.A.S.P. 93, 560. 1021 | 024 Heckman, T. 1980, Astron. and Ap. 87, 152. 1022 | Heckman, T., Balick, B. and Crane, P. 1980, Astron. and Ap. 1023 | Suppl. 40, 295. 1024 | 025 Ward, A. and Wilson, A. 1978, Astron. and Ap. 70, L79. 1025 | 026 Apparao, K., Maraschi, L., Bignami, G., Helmken, H., Margon, B. 1026 | Hjellming, R., Bradt, H. and Dower, R. 1978, Nature 273, 453. 1027 | Margon, B. and Kwitter, K. 1978, Ap. J. 224, L43. 1028 | 027 Phillips, M. and Frogel, J. 1980, Ap. J. 235, 761. 1029 | Persson, S. E., Frogel, J. and Aaronson, M. 1979, 1030 | Ap. J. Suppl. 39, 61. 1031 | 028 Steiner, J., Grindlay, J. and Maccacaro, T. 1982, 1032 | Ap. J. 259, 482. 1033 | 029 Danziger, I., Fosbury, A. and Penston, M. 1977, M.N.R.A.S. 179 41p. 1034 | 030 Ward, J., Wilson, A., Disney, M., Elvis, M. and Maccacaro, T. 1035 | 1977, Astron. and Ap. 59 L19. 1036 | 031 Mc Hardy, I., Pye, and Fairall, A. 198_, IAU Circ. 3587. 1037 | 032 Rodgers, A. Peterson, B. and Harding, P. 1978, Ap. J. 225, 768. 1038 | 033 Griersmith, D. 1980, A.J. 85, 789. 1039 | 034 Schuder, J. 1980, Ap. J. 240, 32. 1040 | 035 Grandi, S. 1977, Ap. J. 215, 446. 1041 | 036 Bohuski, T., Fairall, A. and Weedman, D. 1978, Ap. J. 221, 776. 1042 | 037 Wilson, A., Penston, M., Fosbury, R. and Boksenberg, A. 1976, 1043 | M.N.R.A.S. 177, 673. 1044 | 038 Pravado,S., Nugent, J., Nousek, J., Jensen, K., Wilson, A. and 1045 | Becker, R. 1981, Ap. J. 251, 501. 1046 | 039 Fosbury, R., Mebold, U., Goss, W., and van Woerden, H. 1977, 1047 | M.N.R.A.S. 179, 89. 1048 | 040 Sargent, W.L.W. 1970, Ap. J. 159, 765. 1049 | ______________, 1970, Ap. J. 160, 405. 1050 | 041 Phillips, M., Feldman, F., Marshall, F. and Wamsteker, W. 1979, 1051 | Astron. and Ap. 76 L14. 1052 | 042 Veron, P. 1981, Astron. and Ap. 100, 12. 1053 | Veron, P., Veron, M. and Zuidervijk, E. 1981, Astron. and Ap. 1054 | 98, 34. 1055 | Veron, P., Veron, M., Bergeron, J. and Zuidervijk, E. 1981, 1056 | Astron. and Ap. 97, 71. 1057 | 043 Philips, M. 1979, Ap. J. 227, L121. 1058 | 044 Stauffer, J. 1981, Ph. D. Thesis, U.C. Berkeley. 1059 | 045 Sandage, A. and Visvanathan, 1060 | Visvanathan, and Griersmith, D. 1061 | 046 Wilson, A., Ward, M., Axon, A., Elvis, M., and Meurs, E. 1062 | 1979, M.N.R.A.S. 187, 109. 1063 | 047 Wilson, A., Wood, K., Ward, M., Griffiths, R. and Mushotzky, R. 1064 | 1981, A. J. 86, 1289. 1065 | 048 Abell, G., Eastmond, T. and Jenner, D. 1978, Ap. J. 221, L1. 1066 | 049 Afanas'ev, V., Denisyuk, E. and Lipovetskii, V.A. 1979, 1067 | Sov. Astron. Lett. 5, 144. 1068 | 050 Denisyuk, E. and Lipovetskii, V. 1974, Astrofiz. 10, 315. 1069 | ________________________________ 1977, Sov. Astron. Lett. 3, 3. 1070 | 051 Afanas'ev, V., Lipovetskii, V., Markarian, B. and Stepanian, J. 1071 | 1980, Astrofiz. 16, 193. 1072 | 052 Arakelian, M., Dibai, E. and Esipov, V. 1972, Astrofiz. 8, 329. 1073 | ______________________________________ 1973, Astrofiz. 9, 319. 1074 | ______________________________________ 1973, Astrofiz. 9, 325. 1075 | 053 Elvis, M. private communication. 1076 | Piccinotti, G., Mushotzsky, R., Boldt, E., Holt, S., Marshall, F., 1077 | Serlemitsos, P. and Shafer, R., 1982, Ap. J. 253, 485. 1078 | 054 Denisyuk, E. and Lipovetskii, V. 1974, Astrofiz. 10, 315. 1079 | 055 Arakelian, M., Dibai, E., Esipov, V. and Markarian, B. 1970, 1080 | Astron. Tsirk. #586. 1081 | 056 Denisyuk, E., Lipovetskii, V. and Afanas'ev, V. 1976, Astrofiz. 1082 | 12, 665. 1083 | 057 Doroshenko, V. and Terebizh, V. 1979, Sov. Astron. Lett. 5, 305. 1084 | 058 Kunth, D., Sargent, W.L.W. and Kowal, C. 1981, Astron. and Ap. 1085 | Suppl. 44, 229. 1086 | 059 Markarian, B., Lipovetskii, V. and Stepanian, J. 1980a, 1087 | Astrofiz. 16, 5. 1088 | ____________________________________ 1980b, Astrofiz. 16, 609. 1089 | 060 Kriss, G. 1982, Ph.D. Thesis, Massachusetts Institute of Technology. 1090 | Kriss, G. and Canizares, C. 1982, Ap. J. 261, 51. 1091 | 061 Phillips, M., Charles, P. and Baldwin, J. 1983, Ap. J. 266, 485. 1092 | (see also Sandage, a. 1978, A.J. 83, 904) 1093 | 062 Peterson, S. 1973, A.J. , . 1094 | Clements, E. 1981, M.N.R.A.S. 197, 829. 1095 | Clements, E. 1982, private communication. 1096 | Cruz-Gonzales, I. and Huchra 1983, private communication 1097 | 063 Ghigo, F., Wycoff, S., Wardle, J.F., and Cohen, N. 1982, 1098 | A. J. 87, 1438. 1099 | 064 Charles, P. and Griffiths, R. 1982 ? 1100 | 065 McHardy, I., Lawrenece, A. Pye, J. and Pounds, K. 1981, 1101 | M. N. R. A. S. 197, 893. 1102 | 066 Remilard, R. et al. 1983, private communication. 1103 | 067 Petrosyan, A., Saakyan, K. and Khachikyan, E. 1979, 1104 | Astrofiz. 15, 373. 1105 | 068 Danziger, I. and Goss, W. M. 1983, M.N.R.A.S. in press. (ESO preprint) 1106 | 069 Edmunds, M. and Pagel, B. 1982, M.N.R.A.S. 198, 1089. 1107 | 070 H. R. Miller, 1983, private communication. 1108 | 071 Stocke, J., Liebert, J., Gioia, I., Griffiths, R., Maccacaro, T. 1109 | Danziger, J., Kunth, D. and Lub, J. 1983, preprint (Einstein Medium 1110 | Survey). 1111 | 072 Hertz, P. and Grindlay, J. 1983, private communication. 1112 | 073 Karachentsev, I. and Karachentseva, V. 1982, Sov. Astron. 1113 | Lett. 8, 104. 1114 | 074 Carter, D. and Malin, D. 1983, M.N.R.A.S. 203, 49P. 1115 | 075 Shuder, J. and Osterbrock, D. 1981, Ap. J. 250, 55. 1116 | Miley, G. and Osterbrock, D. 1979, P.A.S.P. 91, 257. 1117 | 076 Kollatschny, W. and Fricke, K. 1983, Astron. and Ap. 125, 1118 | 276. 1119 | 077 Osterbrock, D., Grandi, S. and Cohen, R. 1978, PASP 90, 493. 1120 | 078 Zasov, A. and Karachentsev, I. 1979, Sov. Astron. Lett. 5, 3. 1121 | 079 Osterbrock, D. and Dahari, O. 1983, Ap. J. 273, 478. 1122 | 080 Cristiani, S. and Tarenghi, M. 1984, Astron. and Ap. in press 1123 | (ESO preprint #296). 1124 | 081 Kennicutt, R. and Keel, W. 1984, Ap. J. Lett. 279, L5. 1125 | 082 Bartel, N., Shapiro, I., Huchra, J. and Kuhr, H. 1984, 1126 | Ap. J. 279, 112. 1127 | 083 Schwartz, D. and Remillard, 1984, private communication. 1128 | 084 Fairall, A. 1986, M.N.R.A.S. 218, 453. 1129 | 085 Osterbrock, D. 1985, P.A.S.P. 97, 25. 1130 | 086 de Grijp, M. H., Keel, W. and Miley, G. 1986, in Second IRAS 1131 | Symposium, Pasadena. de Grijp, Miley, G., Lub, J. and de Jong, T. 1132 | 1985, Nature 314, 240. 1133 | 087 Monk, A. S., Penston, M., Pettini, M. and Blades, J. 1986, 1134 | M.N.R.A.S. 222, 787. 1135 | 088 Frogel, J. and Elias, J. 1987, Ap. J. lett. in press. 1136 | Frogel, J. et. al. 1989, Ap. J. 343, 672. 1137 | 089 Stocke, J.,Schneider, P., Morris, S., Gioia, I., Maccacaro, T. 1138 | and Schild, R. 1987, Ap. J. Lett. 315, 11. 1139 | 090 Christiani, S. and Koehler, B. 1987, A. and A. Suppl. in press. (US44) 1140 | 091 Maia, M., da Costa, L., Willmer, C., Pellegrini, P. and Rite, C. 1141 | 1987, A. J. in press. 1142 | 092 Fairall, A. 1988, M. N. R. A. S. 233, 691. 1143 | 093 Monk, A., Penston, M., Pettini, M. and Blades, J. C. 1988, M.N.R.A.S. 234, 193. 1144 | 094 Cristiani, S., Barbieri, C., Iovino, A., La Franca, F. and Nota, A. 1988, 1145 | preprint on SA94. Astron. and Ap. Suppl. in press. 1146 | 095 Bedford, D., Vilhu, O. and Petrov, P. 1988, MNRAS 234, 319. 1147 | 096 Maza, J., Ruiz, M. T., Gonzalez, L. and Wischnjewsky, M. 1989, Ap. J. Suppl. 69, 349. 1148 | 097 Heisler, C. Vader, P. and Frogel, J., 1989, A. J. 97, 986. 1149 | 098 IRAS surveys - Low, Huchra, Kleinmann and Cutri; Strauss et al. 1150 | 099 Fillipenko, A. and Sargent, W. L. W. 1989, Ap. J. Lett. 342, L11. 1151 | 100 Perez, E. etal. 1989, Astrn. and Ap. 215, 262; 1990 227, 407. 1152 | 101 Djorgovski, etal. 1990, P.A.S.P. 102, 113. 1153 | 102 Bassani, L. etal. 1989, Ap. J. 344, 726. 1154 | 103 Silchenko et al. 1990, A. and Ap. 1155 | 104 Proust, D. 1990, IAU Circ 5134. 1156 | 105 Johansson, L. 1991, Astr. and Ap. 241, 389. 1157 | 106 Pravdo, S. and Marshall, F. 1984, Ap. J. 281, 570. 1158 | 107 Colina, L., Lipari, S. and Machetto, F. 1992, Ap. J. Lett. in press. 1159 | Lipari, S. and Machetto, F. 1992, Ap. J. in press (March 10). 1160 | 108 Weistrop, D. et al. 1991, B.A.A.S. Jan 92 mtg (zsource 1133) 1161 | 109 Howell, S. and Usher, P. 1993, PASP105,383 (zsource 2758) 1162 | 110 Coziol, R., Pena, M., Demers, S. and Torres-Piembert, S. 1993, MNRAS 261,170. 1163 | 111 Davoust, E., Considere, S and Poulain, P. 1991, A&Ap 252, 69. 1164 | 112 Rego, M. Zamorano, J., Gallego, J. and Vitores, A. 1994, A&Ap 281, 348. 1165 | 113 Brandt, W., Pounds, K., and Fink, H. 1995, MNRAS 273, L47. 1166 | 114 Mauersberger, R. Henkel, C. Whiteoak, J. Chin, Y.-N. and Tieftrunk, A. 1996, A&A, submitted 1167 | 115 Liu, M., Graham, J. and Wright, G. 1996, ApJ 470, 771 IRAS15307+3252 1168 | 116 LeFevre, O., Crampton, D., Hammer, F., Lilly, S. and Tresse, L. 1994, ApJ 423, L89 1169 | 117 Drinkwater, M. \etal 1997, IAU Circ 6600. 1170 | 118 Margon, B. and Deutsch, E. 1997, PASP in press, Astroph/9704063. 1171 | 119 Maurogordato, S. \etal 1997, A&AS 123, 411 1172 | 120 Remilard et al ApJ 345, 141. 1173 | 121 Marti, J., Mirabel, I., Chaty, S. and Rodriguez, L. 1997, A&A 1174 | preprint, Astroph9710136 1175 | 122 Torres, C., Quast, G., Cozoil, R., Jablonski, F., De la Reza, R., Lepine, J. 1176 | and Gregorio-Hetem, J. 1997, ApJL, 488, L19 1177 | 123 Halpern, J., Eracleous, M. and Forster, K. 1997, AJ 114, 1736. 1178 | 124 Kirhakos, S. and Steiner, J. 1990, AJ 99, 1722 1179 | 125 Molthagen, K., Bade, N. & Wendker, H. 1998, A&A in press (astroph9712306) 1180 | 126 Xia, X. etal in press. (Astroph9801238) 1181 | 127 Pounds etal 1993, MNRAS 260, 77 1182 | 128 Woudt etal 1998, A&A in press. Astroph9804052 1183 | 129 DeBreuck etal 1998, AJ in press Astroph9804092 1184 | 130 Ivison etal 1998, MNRAS in press. Astroph 9712161 1185 | 131 Sakano etal 1998, ApJ in press Astroph/9804118 1186 | 132 Hook and McMahon 1998 (also Fabian etal 1998 MNRAS 295, L25 1187 | 133 Iyomoto etal 1998, Astroph 9806158 (N3065 + N4203) 1188 | 134 Cappellari, etal 1998, ApJ in press Astroph 9807063. 1189 | 135 Clements, D., Saunders, W. \& McMahon, R. 1998, MNRAS in press. Astroph9808311 1190 | 136 Siebert, J. et al 1999 Astroph9903481, A\&A in press. 1191 | 137 Boyle etal 1998, MNRAS 297, L53. 1192 | 138 Veilleux etal 1999 astro-ph/9904149 1193 | 139 Della Ceca, R. etal 2000, A\&A in press. Ast0001030. AXJ2254+1146 1194 | 140 Singh, K. \& Jones, L. 2000, Ast0005165 RXJ215319-1514 1195 | 1196 | X-ray fluxes are from compendia by Kriss et al., Forman et al., 1197 | Halpern and Steiner, Elvis, Mushotzsky, or from the identification 1198 | source. 1199 | 1200 | 1201 | Format is 1202 | 1203 | (A10,2I2,F4.1,A1,3I2,F5.2,I5,I3,I1,I2,I2,1X,F4.0,F6.2,2F5.2,2A4,... 1204 | 1205 | COL DESIGNATION 1206 | 1207 | 1 - 10 NAME 1208 | 11,12 RA HOURS 1950 1209 | 13,14 RA MINUTES 1210 | 15 - 18 RA SECONDS, TENTHS 1211 | 19 DEC SIGN 1212 | 20,21 DEC DEGREES 1213 | 22,23 DEC MINUTES 1214 | 24,25 DEC SECONDS 1215 | 26 - 30 B MAGNITUDE 1216 | 31 - 35 HELIOCENTRIC VELOCITY (KM/SEC) 1217 | 36 - 38 ERROR IN VELOCITY 1218 | 39 MAGNITUDE SOURCE 1219 | 40,41 VELOCITY SOURCE (27 = CFA SURVEY WORK) 1220 | 42,43 ACTIVITY TYPE (SEE ABOVE) 1221 | 45 - 48 X-RAY FLUX IN UFU'S (SORRY ABOUT THAT) 1222 | 50 - 54 V MAGNITUDE (REAL NUCLEAR PHOTOMETRY !) 1223 | 55 - 59 B-V 1224 | 60 - 64 U-B 1225 | ETC. 1226 | -------------------------------------------------------------------------------- /resources/Earth_1_12756.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Avicted/galaxy_visualization_raylib/334f5136ddb45e1c40898a74ea649cb44c8e7efe/resources/Earth_1_12756.glb -------------------------------------------------------------------------------- /resources/fonts/SuperMarioBros2.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Avicted/galaxy_visualization_raylib/334f5136ddb45e1c40898a74ea649cb44c8e7efe/resources/fonts/SuperMarioBros2.ttf -------------------------------------------------------------------------------- /resources/images/galaxy_demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Avicted/galaxy_visualization_raylib/334f5136ddb45e1c40898a74ea649cb44c8e7efe/resources/images/galaxy_demo.gif -------------------------------------------------------------------------------- /resources/images/galaxy_test_texture_diffuse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Avicted/galaxy_visualization_raylib/334f5136ddb45e1c40898a74ea649cb44c8e7efe/resources/images/galaxy_test_texture_diffuse.png -------------------------------------------------------------------------------- /resources/images/galaxy_test_texture_specular.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Avicted/galaxy_visualization_raylib/334f5136ddb45e1c40898a74ea649cb44c8e7efe/resources/images/galaxy_test_texture_specular.png -------------------------------------------------------------------------------- /resources/images/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Avicted/galaxy_visualization_raylib/334f5136ddb45e1c40898a74ea649cb44c8e7efe/resources/images/screenshot.png -------------------------------------------------------------------------------- /resources/images/screenshot_free_look.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Avicted/galaxy_visualization_raylib/334f5136ddb45e1c40898a74ea649cb44c8e7efe/resources/images/screenshot_free_look.png -------------------------------------------------------------------------------- /shaders/lighting.fs: -------------------------------------------------------------------------------- 1 | #version 330 2 | 3 | // Input vertex attributes (from vertex shader) 4 | in vec3 fragPosition; 5 | in vec2 fragTexCoord; 6 | in vec3 fragNormal; 7 | 8 | // Input uniform values 9 | uniform sampler2D texture0; // Diffuse texture 10 | uniform sampler2D specularMap; // Specular map 11 | uniform vec4 colDiffuse; 12 | uniform float shininess; // Shininess (exponent for specular reflection) 13 | 14 | // Output fragment color 15 | out vec4 finalColor; 16 | 17 | #define MAX_LIGHTS 8 18 | #define LIGHT_DIRECTIONAL 0 19 | #define LIGHT_POINT 1 20 | 21 | struct Light { 22 | int enabled; 23 | int type; 24 | vec3 position; 25 | vec3 target; 26 | vec4 color; 27 | }; 28 | 29 | // Input lighting values 30 | uniform Light lights[MAX_LIGHTS]; 31 | uniform vec4 ambient; 32 | uniform vec3 viewPos; 33 | 34 | void main() 35 | { 36 | // Fetch texel color from the diffuse texture 37 | vec4 texelColor = texture(texture0, fragTexCoord); 38 | 39 | // Fetch specular map value 40 | vec3 specularMapColor = texture(specularMap, fragTexCoord).rgb; 41 | 42 | // Lighting and specular setup 43 | vec3 lightDot = vec3(0.0); 44 | vec3 normal = normalize(fragNormal); 45 | vec3 viewD = normalize(viewPos - fragPosition); 46 | vec3 specular = vec3(0.0); 47 | 48 | for (int i = 0; i < MAX_LIGHTS; i++) 49 | { 50 | if (lights[i].enabled == 1) 51 | { 52 | vec3 lightDir = vec3(0.0); 53 | 54 | if (lights[i].type == LIGHT_DIRECTIONAL) 55 | { 56 | lightDir = -normalize(lights[i].target - lights[i].position); 57 | } 58 | 59 | if (lights[i].type == LIGHT_POINT) 60 | { 61 | lightDir = normalize(lights[i].position - fragPosition); 62 | } 63 | 64 | // Diffuse lighting 65 | float NdotL = max(dot(normal, lightDir), 0.0); 66 | lightDot += lights[i].color.rgb * NdotL; 67 | 68 | // Specular reflection 69 | if (NdotL > 0.0) 70 | { 71 | vec3 reflectDir = reflect(-lightDir, normal); 72 | float specCo = pow(max(dot(viewD, reflectDir), 0.0), shininess); // Shininess controls the sharpness of the reflection 73 | specular += specCo * specularMapColor; // Modulate specular by the specular map 74 | } 75 | } 76 | } 77 | 78 | // Combine the texel color with lighting and specular 79 | finalColor = (texelColor * (colDiffuse + vec4(specular, 1.0)) * vec4(lightDot, 1.0)); 80 | 81 | // Add ambient lighting 82 | finalColor += texelColor * (ambient / 2.0) * colDiffuse; 83 | 84 | // Gamma correction 85 | finalColor = pow(finalColor, vec4(1.0 / 2.2)); 86 | } 87 | -------------------------------------------------------------------------------- /shaders/lighting_instancing.vs: -------------------------------------------------------------------------------- 1 | #version 330 2 | 3 | // Input vertex attributes 4 | in vec3 vertexPosition; 5 | in vec2 vertexTexCoord; 6 | in vec3 vertexNormal; 7 | 8 | in mat4 instanceTransform; 9 | 10 | // Input uniform values 11 | uniform mat4 mvp; 12 | uniform mat4 matNormal; 13 | 14 | // Output vertex attributes (to fragment shader) 15 | out vec3 fragPosition; 16 | out vec2 fragTexCoord; 17 | out vec4 fragColor; 18 | out vec3 fragNormal; 19 | 20 | void main() 21 | { 22 | // Compute MVP for current instance 23 | mat4 mvpi = mvp*instanceTransform; 24 | 25 | // Send vertex attributes to fragment shader 26 | fragPosition = vec3(mvpi*vec4(vertexPosition, 1.0)); 27 | fragTexCoord = vertexTexCoord; 28 | fragNormal = normalize(vec3(matNormal*vec4(vertexNormal, 1.0))); 29 | 30 | // Calculate final vertex position 31 | gl_Position = mvpi*vec4(vertexPosition, 1.0); 32 | } -------------------------------------------------------------------------------- /src/frontend.cpp: -------------------------------------------------------------------------------- 1 | // Defines ----------------------------------------------------------------------- 2 | #define RLIGHTS_IMPLEMENTATION 3 | 4 | // Includes ---------------------------------------------------------------------- 5 | #include "includes.h" 6 | #include "raylib_includes.h" 7 | 8 | // Types ------------------------------------------------------------------------- 9 | struct ArcminData 10 | { 11 | f64 right_ascension = 0.0f; 12 | f64 declination = 0.0f; 13 | f64 redshift = 0.0f; 14 | }; 15 | 16 | enum Draw_Data 17 | { 18 | // Draw the data from the files from the ÅA course 19 | DRAW_DATA_A, 20 | DRAW_DATA_B, 21 | DRAW_ALL_DATA, 22 | 23 | // Draw the redshift data, not from the course 24 | DRAW_REDSHIFT_DATA, 25 | }; 26 | 27 | // Variables --------------------------------------------------------------------- 28 | i32 SCREEN_WIDTH = 640 * 2; 29 | i32 SCREEN_HEIGHT = 360 * 2; 30 | 31 | bool Debug = false; 32 | bool DataAIsLoaded = false; 33 | bool IsPaused = false; 34 | 35 | u64 CPUMemory = 0L; 36 | 37 | constexpr f64 PIdividedBy180 = (PI / 180.0); 38 | 39 | const char *DataAFilename = "./input_data/data_100k_arcmin.txt"; 40 | const char *DataBFilename = "./input_data/flat_100k_arcmin.txt"; 41 | const char *RedshiftDataFilename = "./redshift_input_data/seyfert.dat"; 42 | 43 | Font MainFont = {0}; 44 | 45 | Camera3D MainCamera = {}; 46 | f64 Zoom = 1.0f * PI; 47 | 48 | const unsigned long int MAX_DATA_POINTS = 100000UL; 49 | unsigned long int MAX_REDSHIFT_DATA_POINTS = 100000UL; // @Note(Victor): This is set when we read the redshift data 50 | 51 | // @Note(Victor): Data from the course, only celestial coordinates, no redshift (distance) 52 | ArcminData *DataPointsA = nullptr; 53 | ArcminData *DataPointsB = nullptr; 54 | 55 | // @Note(Victor): Data from the redshift file with the appriximated distances to the galaxies 56 | ArcminData *RedshiftData = nullptr; 57 | 58 | // Batch rendering in Raylib with a custom shader 59 | Matrix *MatrixTransformsA = nullptr; 60 | Matrix *MatrixTransformsB = nullptr; 61 | Matrix *MatrixTransformsRedshift = nullptr; 62 | 63 | Shader CustomShader = {0}; 64 | 65 | Draw_Data DataToDraw = DRAW_ALL_DATA; 66 | 67 | // Define mesh to be instanced 68 | Material matInstances; 69 | Mesh SphereMesh; 70 | 71 | // 3D Models 72 | Model EarthModel; 73 | 74 | // Redshift data calculations 75 | // ---------------------------------------------------------------------------------- 76 | // Function to convert RA from HHMMSS to degrees 77 | internal f64 78 | ConvertRaToDegrees(f64 raHHMMSS) 79 | { 80 | int hours = (int)(raHHMMSS / 10000); 81 | int minutes = (int)((raHHMMSS - (hours * 10000)) / 100); 82 | f64 seconds = raHHMMSS - (hours * 10000) - (minutes * 100); 83 | 84 | return 15.0 * (hours + (minutes / 60.0) + (seconds / 3600.0)); // 1 hour = 15 degrees 85 | } 86 | 87 | // Function to convert DEC from DDMMSS to degrees 88 | // DEC: Declination 89 | // DDMMSS: Degrees, minutes, seconds 90 | internal f64 91 | ConvertDecToDegrees(f64 decDDMMSS) 92 | { 93 | int degrees = (int)(decDDMMSS / 10000); 94 | int minutes = (int)((decDDMMSS - (degrees * 10000)) / 100); 95 | f64 seconds = decDDMMSS - (degrees * 10000) - (minutes * 100); 96 | 97 | f64 decDegrees = abs(degrees) + (minutes / 60.0) + (seconds / 3600.0); 98 | return (degrees < 0) ? -decDegrees : decDegrees; 99 | } 100 | 101 | // Assuming speed of light in km/s for converting redshift to distance (simplified calculation) 102 | const f64 speedOfLight = 299792.458; // Speed of light in km/s 103 | const f64 hubbleConstant = 70.0; // Hubble constant in km/s/Mpc 104 | 105 | internal f64 106 | RedshiftToDistance(f64 redshift) 107 | { 108 | // Distance in Megaparsecs (Mpc) 109 | return (speedOfLight * redshift) / hubbleConstant; 110 | } 111 | 112 | // Convert spherical coordinates (RA, Dec, distance) to Cartesian (X, Y, Z) 113 | internal void 114 | CalculatePosition(f64 ra, f64 dec, f64 redshift, f64 &X, f64 &Y, f64 &Z) 115 | { 116 | f64 distance = RedshiftToDistance(redshift); // Convert redshift to distance (Mpc) 117 | 118 | // Convert degrees to radians 119 | f64 raRad = ra * PIdividedBy180; 120 | f64 decRad = dec * PIdividedBy180; 121 | 122 | // Calculate Cartesian coordinates 123 | X = distance * cos(decRad) * cos(raRad); 124 | Y = distance * cos(decRad) * sin(raRad); 125 | Z = distance * sin(decRad); 126 | } 127 | // ---------------------------------------------------------------------------------- 128 | 129 | internal void 130 | ParseInputArgs(i32 argc, char **argv) 131 | { 132 | if (argc == 1) 133 | { 134 | printf("\tNo input args OK!\n"); 135 | printf("\tCurrent working directory: %s\n", GetWorkingDirectory()); 136 | return; 137 | } 138 | 139 | for (i32 i = 1; i < argc; ++i) 140 | { 141 | if (strcmp(argv[i], "GALAXY_DEBUG") == 0) 142 | { 143 | printf("\tRunning in DEBUG mode !!!\n"); 144 | Debug = true; 145 | } 146 | } 147 | } 148 | 149 | internal void 150 | HandleWindowResize(void) 151 | { 152 | if (IsWindowResized() && !IsWindowFullscreen()) 153 | { 154 | SCREEN_WIDTH = GetScreenWidth(); 155 | SCREEN_HEIGHT = GetScreenHeight(); 156 | } 157 | 158 | // Check for alt + enter 159 | if (IsKeyPressed(KEY_ENTER) && (IsKeyDown(KEY_LEFT_ALT) || IsKeyDown(KEY_RIGHT_ALT))) 160 | { 161 | // See which display we are on right now 162 | i32 Display = GetCurrentMonitor(); 163 | 164 | if (IsWindowFullscreen()) 165 | { 166 | // If we are full screen, then go back to the windowed size 167 | SetWindowSize(SCREEN_WIDTH, SCREEN_HEIGHT); 168 | } 169 | else 170 | { 171 | // If we are not full screen, set the window size to match the monitor we are on 172 | SetWindowSize(GetMonitorWidth(Display), GetMonitorHeight(Display)); 173 | } 174 | 175 | // Toggle the state 176 | ToggleFullscreen(); 177 | 178 | SCREEN_WIDTH = GetScreenWidth(); 179 | SCREEN_HEIGHT = GetScreenHeight(); 180 | } 181 | } 182 | 183 | internal void 184 | RotateCameraAroundOrigo(f64 DeltaTime) 185 | { 186 | Camera3D *Cam = &MainCamera; 187 | f64 Speed = 10.0f * DeltaTime; 188 | f64 VerticalSpeed = 5.0f * DeltaTime; 189 | 190 | local_persist f64 Yaw = 45.80f; 191 | local_persist f64 Pitch = 42.12f; 192 | local_persist bool CursorEnabled = false; 193 | 194 | local_persist Vector3 direction; 195 | direction.x = cosf(DEG2RAD * Pitch) * cosf(DEG2RAD * Yaw); 196 | direction.y = sinf(DEG2RAD * Pitch); 197 | direction.z = cosf(DEG2RAD * Pitch) * sinf(DEG2RAD * Yaw); 198 | direction = Vector3Normalize(direction); 199 | 200 | local_persist Vector3 right = Vector3Normalize(Vector3CrossProduct(direction, Cam->up)); 201 | local_persist Vector3 up = Vector3Normalize(Vector3CrossProduct(right, direction)); 202 | 203 | if (IsPaused) 204 | { 205 | // Disable the cursor to lock it to the center and hide it 206 | if (CursorEnabled) 207 | { 208 | DisableCursor(); 209 | CursorEnabled = false; 210 | 211 | // Set the camera to look at the data from the earths position, roughly 212 | Cam->position = {4.911170f, -4.564987f, 11.718232f}; 213 | Cam->target = {5.357430f, -3.781510f, 12.150687f}; 214 | direction = {-0.446259f, -0.783477f, -0.432455f}; 215 | Yaw = -136.600; 216 | Pitch = -51.580; 217 | } 218 | 219 | // printf("\tFree Look mode\n"); 220 | // printf("\tposition: x=%f, y=%f, z=%f\n", Cam->position.x, Cam->position.y, Cam->position.z); 221 | // printf("\ttarget: x=%f, y=%f, z=%f\n", Cam->target.x, Cam->target.y, Cam->target.z); 222 | // printf("\tdirection: x=%f, y=%f, z=%f\n", direction.x, direction.y, direction.z); 223 | // printf("\tYaw: %f\n", Yaw); 224 | // printf("\tPitch: %f\n", Pitch); 225 | 226 | Vector2 mouseDelta = GetMouseDelta(); 227 | 228 | // Update yaw and pitch based on mouse movement 229 | Yaw += mouseDelta.x * 0.1f; 230 | Pitch += mouseDelta.y * 0.1f; 231 | 232 | // Clamp pitch to avoid flipping the camera 233 | if (Pitch > 89.0f) 234 | Pitch = 89.0f; 235 | if (Pitch < -89.0f) 236 | Pitch = -89.0f; 237 | 238 | // Go slower with LShift 239 | if (IsKeyDown(KEY_LEFT_SHIFT)) 240 | { 241 | Speed *= 0.1f; 242 | VerticalSpeed *= 0.1f; 243 | } 244 | 245 | // Move camera based on input 246 | if (IsKeyDown(KEY_W)) 247 | { 248 | Cam->position = Vector3Subtract(Cam->position, Vector3Scale(direction, Speed)); 249 | } 250 | if (IsKeyDown(KEY_S)) 251 | { 252 | Cam->position = Vector3Add(Cam->position, Vector3Scale(direction, Speed)); 253 | } 254 | if (IsKeyDown(KEY_D)) 255 | { 256 | Cam->position = Vector3Subtract(Cam->position, Vector3Scale(right, Speed)); 257 | } 258 | if (IsKeyDown(KEY_A)) 259 | { 260 | Cam->position = Vector3Add(Cam->position, Vector3Scale(right, Speed)); 261 | } 262 | if (IsKeyDown(KEY_Q)) 263 | { 264 | Cam->position = Vector3Subtract(Cam->position, Vector3Scale(up, VerticalSpeed)); 265 | } 266 | if (IsKeyDown(KEY_E)) 267 | { 268 | Cam->position = Vector3Add(Cam->position, Vector3Scale(up, VerticalSpeed)); 269 | } 270 | 271 | // Update camera target to reflect the new direction 272 | Cam->target = Vector3Subtract(Cam->position, direction); 273 | } 274 | else 275 | { 276 | // If not in free look mode, enable the cursor and restore the original camera logic 277 | if (!CursorEnabled) 278 | { 279 | EnableCursor(); 280 | CursorEnabled = true; 281 | } 282 | 283 | local_persist f64 PreviousTimeSinceStart = 0.0f; 284 | PreviousTimeSinceStart += DeltaTime * 0.2f; 285 | 286 | Cam->position.x = 25.0f * cosf(PreviousTimeSinceStart) * Zoom; 287 | Cam->position.y = 50.0f; 288 | Cam->position.z = 25.0f * sinf(PreviousTimeSinceStart) * Zoom; 289 | 290 | Cam->target = Vector3Zero(); 291 | } 292 | 293 | // printf("Direction: x=%f, y=%f, z=%f\n", direction.x, direction.y, direction.z); 294 | // printf("Right: x=%f, y=%f, z=%f\n", right.x, right.y, right.z); 295 | // printf("Up: x=%f, y=%f, z=%f\n", up.x, up.y, up.z); 296 | } 297 | 298 | internal void 299 | GameUpdate(f64 DeltaTime) 300 | { 301 | HandleWindowResize(); 302 | 303 | if (IsKeyPressed(KEY_ESCAPE)) 304 | { 305 | CloseWindow(); 306 | } 307 | 308 | if (IsKeyPressed(KEY_F11)) 309 | { 310 | ToggleFullscreen(); 311 | } 312 | 313 | if (IsKeyPressed(KEY_ONE)) 314 | { 315 | DataToDraw = DRAW_DATA_A; 316 | } 317 | 318 | if (IsKeyPressed(KEY_TWO)) 319 | { 320 | DataToDraw = DRAW_DATA_B; 321 | } 322 | 323 | if (IsKeyPressed(KEY_THREE)) 324 | { 325 | DataToDraw = DRAW_ALL_DATA; 326 | } 327 | 328 | // @Note(Victor): This is not working as intended, yet 329 | // if (IsKeyPressed(KEY_FOUR)) 330 | // { 331 | // DataToDraw = DRAW_REDSHIFT_DATA; 332 | // } 333 | 334 | if (IsKeyPressed(KEY_SPACE)) 335 | { 336 | IsPaused = !IsPaused; 337 | printf("\tIsPaused: %s\n", IsPaused ? "true" : "false"); 338 | } 339 | 340 | RotateCameraAroundOrigo(DeltaTime); 341 | 342 | f64 Scroll = GetMouseWheelMove(); 343 | if (Scroll != 0.0f) 344 | { 345 | const f64 ZoomChange = -2.5f; 346 | f64 Speed = ZoomChange; 347 | Zoom = Clamp(Zoom + Scroll * Speed * DeltaTime, 0.0f, 10.0f); 348 | } 349 | } 350 | 351 | internal void 352 | GameRender(f64 DeltaTime) 353 | { 354 | BeginDrawing(); 355 | ClearBackground(BLACK); 356 | 357 | if (!DataAIsLoaded) 358 | { 359 | return; 360 | } 361 | 362 | // Draw the data around a sphere in 3D 363 | BeginMode3D(MainCamera); 364 | 365 | /* { 366 | // Override the projection matrix to set custom near/far planes 367 | rlMatrixMode(RL_PROJECTION); 368 | rlLoadIdentity(); 369 | 370 | // Set the correct aspect ratio 371 | f64 aspect = (f64)GetScreenWidth() / (f64)GetScreenHeight(); 372 | f64 nearPlane = 0.1f; 373 | f64 farPlane = 100000000000.0; 374 | 375 | // Convert fovy from degrees to radians 376 | f64 fovyRadians = MainCamera.fovy * DEG2RAD; 377 | f64 top = nearPlane * tan(fovyRadians / 2.0f); 378 | f64 bottom = -top; 379 | f64 right = top * aspect; 380 | f64 left = -right; 381 | 382 | // Set the frustum parameters correctly 383 | rlFrustum(left, right, bottom, top, nearPlane, farPlane); 384 | 385 | rlMatrixMode(RL_MODELVIEW); 386 | rlLoadIdentity(); 387 | } */ 388 | 389 | DrawSphere({0.0f, 0.0f, 0.0f}, 1.0f, BLUE); 390 | 391 | // Draw the Earth model at the origin (0, 0, 0) 392 | Vector3 EarthPosition = {0.0f, 0.0f, 0.0f}; 393 | const f64 EarthScale = 1.0f; 394 | DrawModel(EarthModel, EarthPosition, EarthScale, WHITE); 395 | 396 | // Draw instanced meshes 397 | if (DataToDraw == DRAW_DATA_A || DataToDraw == DRAW_ALL_DATA) 398 | { 399 | Color MyDARKBLUE = {0, 0, 255, 255}; 400 | matInstances.maps[MATERIAL_MAP_DIFFUSE].color = MyDARKBLUE; 401 | DrawMeshInstanced(SphereMesh, matInstances, MatrixTransformsA, MAX_DATA_POINTS); 402 | } 403 | 404 | if (DataToDraw == DRAW_DATA_B || DataToDraw == DRAW_ALL_DATA) 405 | { 406 | matInstances.maps[MATERIAL_MAP_DIFFUSE].color = RED; 407 | DrawMeshInstanced(SphereMesh, matInstances, MatrixTransformsB, MAX_DATA_POINTS); 408 | } 409 | 410 | if (DataToDraw == DRAW_REDSHIFT_DATA) 411 | { 412 | matInstances.maps[MATERIAL_MAP_DIFFUSE].color = MAGENTA; 413 | DrawMeshInstanced(SphereMesh, matInstances, MatrixTransformsRedshift, MAX_REDSHIFT_DATA_POINTS); 414 | } 415 | 416 | EndMode3D(); 417 | 418 | // UI ------------------------------------------------------ 419 | 420 | // Draw the FPS with our font 421 | DrawTextEx(MainFont, TextFormat("FPS: %i", GetFPS()), {10, 10}, 20, 2, WHITE); 422 | 423 | if (!IsPaused) 424 | { 425 | // Scroll to zoom 426 | DrawTextEx(MainFont, TextFormat("Scroll to zoom: %.2f", Zoom), {10, 50}, 16, 2, WHITE); 427 | } 428 | 429 | // Press F11 to toggle fullscreen 430 | DrawTextEx(MainFont, TextFormat("Press F11 to toggle fullscreen"), {10, 70}, 16, 2, WHITE); 431 | 432 | // Press 1, 2 or 3 to toggle which data to draw 433 | DrawTextEx(MainFont, TextFormat("Press 1, 2, 3 or 4 to toggle which data to draw"), {10, 90}, 16, 2, WHITE); 434 | 435 | // Red are uniformly distributed, blue are real data 436 | DrawTextEx(MainFont, TextFormat("Red are uniformly distributed"), {10, 110}, 16, 2, RED); 437 | DrawTextEx(MainFont, TextFormat("Blue are real data"), {10, 130}, 16, 2, BLUE); 438 | 439 | // @Note(Victor): This is not working as intended 440 | // DrawTextEx(MainFont, TextFormat("Magenta are redshift data"), {10, 160}, 16, 2, MAGENTA); 441 | 442 | if (IsPaused) 443 | { 444 | DrawTextEx(MainFont, TextFormat("Press W, A, S, D, Q, E to move the camera + Mouse"), {10, 150}, 16, 2, WHITE); 445 | DrawTextEx(MainFont, TextFormat("Press LShift to move slower"), {10, 170}, 16, 2, WHITE); 446 | } 447 | 448 | // Press space to pause in the center bottom 449 | if (IsPaused) 450 | { 451 | const f64 TextWidth = MeasureText("Press Space again to go back to Auto Look", 16); 452 | DrawTextEx(MainFont, TextFormat("Press Space again to go back to Auto Look"), {(float)(SCREEN_WIDTH / 2.0f - (float)TextWidth - 64.0f / 2.0f), (float)SCREEN_HEIGHT - 30.0f}, 16, 2, PURPLE); 453 | } 454 | else 455 | { 456 | // Highlight the paused text 457 | const f64 TextWidth = MeasureText("Press Space to enter Free Look mode", 16); 458 | DrawTextEx(MainFont, "Press Space to enter Free Look mode", {(float)(SCREEN_WIDTH / 2.0f - (float)TextWidth - 64.0f / 2.0f), (float)SCREEN_HEIGHT - 30.0f}, 16, 2, GREEN); 459 | } 460 | 461 | if (IsPaused) 462 | { 463 | const char *IsPausedText = "Free Look"; 464 | const int IsPausedTextLength = strlen(IsPausedText); 465 | DrawTextEx(MainFont, IsPausedText, {SCREEN_WIDTH - 128.0f - 64.0f, 30}, 20, 2, PURPLE); 466 | } 467 | else 468 | { 469 | const char *IsPausedText = "Auto Look"; 470 | const int IsPausedTextLength = strlen(IsPausedText); 471 | DrawTextEx(MainFont, IsPausedText, {SCREEN_WIDTH - 64.0f - 128.0f - 32.0f, 30}, 20, 2, GREEN); 472 | } 473 | 474 | EndDrawing(); 475 | } 476 | 477 | internal void 478 | PrintMemoryUsage(void) 479 | { 480 | printf("\n\tMemory used in GigaBytes: %f\n", (f64)CPUMemory / (f64)Gigabytes(1)); 481 | printf("\tMemory used in MegaBytes: %f\n", (f64)CPUMemory / (f64)Megabytes(1)); 482 | } 483 | 484 | internal void 485 | CleanupOurStuff(void) 486 | { 487 | CloseWindow(); // Close window and OpenGL context 488 | printf("\n\tClosed window and OpenGL context\n"); 489 | 490 | free(DataPointsA); 491 | CPUMemory -= MAX_DATA_POINTS * sizeof(ArcminData); 492 | printf("\n\tFreeing DataPointsA %lu\n", MAX_DATA_POINTS * sizeof(ArcminData)); 493 | PrintMemoryUsage(); 494 | 495 | free(DataPointsB); 496 | CPUMemory -= MAX_DATA_POINTS * sizeof(ArcminData); 497 | printf("\n\tFreeing DataPointsB: %lu\n", MAX_DATA_POINTS * sizeof(ArcminData)); 498 | PrintMemoryUsage(); 499 | 500 | free(MatrixTransformsA); 501 | CPUMemory -= MAX_DATA_POINTS * sizeof(Matrix); 502 | printf("\n\tFreeing MatrixTransformsA: %lu\n", MAX_DATA_POINTS * sizeof(Matrix)); 503 | PrintMemoryUsage(); 504 | 505 | free(MatrixTransformsB); 506 | CPUMemory -= MAX_DATA_POINTS * sizeof(Matrix); 507 | printf("\n\tFreeing MatrixTransformsB: %lu\n", MAX_DATA_POINTS * sizeof(Matrix)); 508 | PrintMemoryUsage(); 509 | 510 | free(RedshiftData); 511 | CPUMemory -= MAX_REDSHIFT_DATA_POINTS * sizeof(ArcminData); 512 | printf("\n\tFreeing RedshiftData: %lu\n", MAX_REDSHIFT_DATA_POINTS * sizeof(ArcminData)); 513 | PrintMemoryUsage(); 514 | 515 | free(MatrixTransformsRedshift); 516 | CPUMemory -= MAX_REDSHIFT_DATA_POINTS * sizeof(Matrix); 517 | printf("\n\tFreeing MatrixTransformsRedshift: %lu\n", MAX_REDSHIFT_DATA_POINTS * sizeof(Matrix)); 518 | PrintMemoryUsage(); 519 | 520 | // @Note(Victor): There should be no allocated memory left 521 | Assert(CPUMemory == 0); 522 | } 523 | 524 | internal void 525 | SigIntHandler(i32 Signal) 526 | { 527 | printf("\tCaught SIGINT, exiting peacefully!\n"); 528 | 529 | CleanupOurStuff(); 530 | 531 | exit(0); 532 | } 533 | 534 | internal bool 535 | ReadInputDataFromRedshiftFile(const char *FileName, ArcminData *DataPointsLocation) 536 | { 537 | // Data format: 538 | // Name: Galaxy name 539 | // RA (1950): Right ascension (celestial longitude) in the 1950 epoch (format: HHMMSS.s) 540 | // DEC: Declination (celestial latitude) in the 1950 epoch (format: DDMMSS) 541 | // VH/VE/VS: Heliocentric velocity or redshift-related data. 542 | // Other columns: Additional parameters like magnitude, velocity types, or uncertainties. 543 | 544 | FILE *f = fopen(FileName, "r"); 545 | if (f == NULL) 546 | { 547 | printf("Error opening redshift file: %s\n", FileName); 548 | return false; 549 | } 550 | 551 | const int bufferSize = 4096; 552 | char Line[bufferSize]; // Buffer to store each line from the file 553 | 554 | // Skip the header lines (13 lines in this case) 555 | const int HeaderLines = 13; 556 | for (int i = 0; i < HeaderLines; ++i) 557 | { 558 | if (fgets(Line, sizeof(Line), f) == NULL) 559 | { 560 | printf("Error reading header!\n"); 561 | fclose(f); 562 | return false; 563 | } 564 | } 565 | 566 | unsigned long int i = 0; 567 | while (fgets(Line, sizeof(Line), f) != NULL && i < MAX_REDSHIFT_DATA_POINTS) 568 | { 569 | // Remove leading/trailing whitespace (if any) 570 | char *trimmedLine = strtok(Line, "\n"); 571 | 572 | // Skip empty lines 573 | if (trimmedLine == NULL || strlen(trimmedLine) == 0) 574 | continue; 575 | 576 | // Tokenize the line assuming space-separated values 577 | char *Token = strtok(trimmedLine, " "); 578 | int j = 0; 579 | 580 | while (Token != NULL) 581 | { 582 | switch (j) 583 | { 584 | case 1: // RA (1950) 585 | DataPointsLocation[i].right_ascension = atof(Token); 586 | break; 587 | case 2: // DEC 588 | DataPointsLocation[i].declination = atof(Token); 589 | break; 590 | case 4: // Redshift (VH) 591 | DataPointsLocation[i].redshift = atof(Token); 592 | break; 593 | default: 594 | break; 595 | } 596 | 597 | Token = strtok(NULL, " "); // Continue to the next token 598 | j++; 599 | } 600 | 601 | i++; 602 | } 603 | 604 | if (f != NULL) 605 | { 606 | fclose(f); 607 | } 608 | 609 | printf("\tSuccessfully read %ld redshift data points from %s\n", i, FileName); 610 | 611 | return true; 612 | } 613 | 614 | internal bool 615 | ReadInputDataFromFile(const char *FileName, ArcminData *DataPointsLocation) 616 | { 617 | FILE *f = fopen(FileName, "r"); 618 | if (f == NULL) 619 | { 620 | printf("Error opening file!\n"); 621 | return (false); 622 | } 623 | 624 | // read the header 625 | char Line[1024]; // Adjust size as needed 626 | 627 | if (fgets(Line, sizeof(Line), f) == NULL) 628 | { 629 | printf("Error reading header!\n"); 630 | return (false); 631 | } 632 | 633 | // Read the data into the DataPointsLocation the data is in arcmin declination and right ascension \t separated 634 | i32 i = 0; 635 | while (fgets(Line, sizeof(Line), f) != NULL) 636 | { 637 | // printf("Retrieved line of length %zu:\n", Read); 638 | // printf("%s", Line); 639 | 640 | // @Note(Victor): We expect the input data to be separated by tabs !!! 641 | // Parse the line 642 | char *Token = strtok(Line, "\t"); 643 | i32 j = 0; 644 | while (Token != NULL) 645 | { 646 | // printf("Token: %s\n", Token); 647 | 648 | if (j == 0) 649 | { 650 | DataPointsLocation[i].right_ascension = atof(Token); 651 | } 652 | else if (j == 1) 653 | { 654 | DataPointsLocation[i].declination = atof(Token); 655 | } 656 | else 657 | { 658 | printf("Error parsing line!\n"); 659 | return (false); 660 | } 661 | 662 | Token = strtok(NULL, "\t"); 663 | j++; 664 | } 665 | 666 | i++; 667 | } 668 | 669 | fclose(f); 670 | 671 | return (true); 672 | } 673 | 674 | i32 main(i32 argc, char **argv) 675 | { 676 | signal(SIGINT, SigIntHandler); 677 | 678 | ParseInputArgs(argc, argv); 679 | 680 | // Allocate the memory for the data with calloc 681 | DataPointsA = (ArcminData *)calloc(MAX_DATA_POINTS, sizeof(ArcminData)); 682 | CPUMemory += MAX_DATA_POINTS * sizeof(ArcminData); 683 | 684 | DataPointsB = (ArcminData *)calloc(MAX_DATA_POINTS, sizeof(ArcminData)); 685 | CPUMemory += MAX_DATA_POINTS * sizeof(ArcminData); 686 | 687 | RedshiftData = (ArcminData *)calloc(MAX_REDSHIFT_DATA_POINTS, sizeof(ArcminData)); 688 | 689 | if (ReadInputDataFromFile(DataAFilename, DataPointsA)) 690 | { 691 | printf("\tReadInputDataFromFile: %s succeeded!\n", DataAFilename); 692 | } 693 | else 694 | { 695 | printf("\tReadInputDataFromFile: %s failed!\n", DataAFilename); 696 | CleanupOurStuff(); 697 | return (1); 698 | } 699 | 700 | if (ReadInputDataFromFile(DataBFilename, DataPointsB)) 701 | { 702 | printf("\tReadInputDataFromFile: %s succeeded!\n", DataBFilename); 703 | } 704 | else 705 | { 706 | printf("\tReadInputDataFromFile: %s failed!\n", DataBFilename); 707 | CleanupOurStuff(); 708 | return (1); 709 | } 710 | 711 | if (ReadInputDataFromRedshiftFile(RedshiftDataFilename, RedshiftData)) // or another appropriate data structure 712 | { 713 | printf("\tSuccessfully loaded redshift data from %s\n", RedshiftDataFilename); 714 | CPUMemory += MAX_REDSHIFT_DATA_POINTS * sizeof(ArcminData); 715 | } 716 | else 717 | { 718 | printf("Failed to load redshift data from %s\n", RedshiftDataFilename); 719 | CleanupOurStuff(); 720 | return 1; 721 | } 722 | 723 | printf("\tHello from raylib_galaxy_application!\n\n"); 724 | 725 | unsigned long int Count = 0; 726 | for (unsigned long int i = 0; i < MAX_DATA_POINTS; ++i) 727 | { 728 | if (DataPointsA[i].right_ascension != 0.0f) 729 | { 730 | Count++; 731 | } 732 | } 733 | 734 | Assert(Count == MAX_DATA_POINTS); 735 | Assert(DataPointsB != NULL); 736 | 737 | Count = 0; 738 | for (unsigned long int i = 0; i < MAX_DATA_POINTS; ++i) 739 | { 740 | if (DataPointsB[i].right_ascension != 0.0f) 741 | { 742 | Count++; 743 | } 744 | } 745 | 746 | Assert(Count == MAX_DATA_POINTS); 747 | 748 | DataAIsLoaded = true; 749 | 750 | // Set the camera to rotate around the center of the data 751 | // MainCamera.position = {0.0f, 60.0f, 100.0f}; 752 | MainCamera.position = {0.0f, 0.0f, 0.0f}; 753 | MainCamera.target = {0.0f, 0.0f, 0.0f}; 754 | MainCamera.up = {0.0f, 1.0f, 0.0f}; 755 | MainCamera.fovy = 65.0f; // Adjust if necessary 756 | MainCamera.projection = CAMERA_PERSPECTIVE; 757 | 758 | // Define transforms to be uploaded to GPU for instances 759 | { 760 | MatrixTransformsA = (Matrix *)calloc(MAX_DATA_POINTS, sizeof(Matrix)); 761 | CPUMemory += MAX_DATA_POINTS * sizeof(Matrix); 762 | 763 | MatrixTransformsB = (Matrix *)calloc(MAX_DATA_POINTS, sizeof(Matrix)); 764 | CPUMemory += MAX_DATA_POINTS * sizeof(Matrix); 765 | 766 | MatrixTransformsRedshift = (Matrix *)calloc(MAX_REDSHIFT_DATA_POINTS, sizeof(Matrix)); 767 | CPUMemory += MAX_REDSHIFT_DATA_POINTS * sizeof(Matrix); 768 | 769 | Matrix rotation = MatrixRotateXYZ({0.0f, 0.0f, 0.0f}); 770 | 771 | for (unsigned long int i = 0; i < MAX_DATA_POINTS; ++i) 772 | { 773 | // DataPointsA real galaxies 774 | { 775 | // Transform the arc minutes into radians that the trigonometric functions take as input. (sinf, cosf, tanf) 776 | f64 RightAscensionRad = (DataPointsA[i].right_ascension / 60.0f) * PIdividedBy180; 777 | f64 DeclinationRad = (DataPointsA[i].declination / 60.0f) * PIdividedBy180; 778 | 779 | // Calculate the position on the sphere using spherical coordinates 780 | f64 Radius = 50.0f; 781 | f64 X = Radius * cosf(RightAscensionRad) * cosf(DeclinationRad); 782 | f64 Y = Radius * sinf(DeclinationRad); 783 | f64 Z = Radius * sinf(RightAscensionRad) * cosf(DeclinationRad); 784 | 785 | // Create a model matrix for each data point to position it 786 | MatrixTransformsA[i] = MatrixIdentity(); 787 | MatrixTransformsA[i] = MatrixMultiply(MatrixTransformsA[i], MatrixScale(0.1f, 0.1f, 0.1f)); 788 | MatrixTransformsA[i] = MatrixMultiply(MatrixTransformsA[i], MatrixTranslate(X, Y, Z)); 789 | } 790 | 791 | // DataPointsB uniformly distributed (galaxies) 792 | { 793 | f64 RightAscensionRad = (DataPointsB[i].right_ascension / 60.0f) * PIdividedBy180; 794 | f64 DeclinationRad = (DataPointsB[i].declination / 60.0f) * PIdividedBy180; 795 | 796 | // Calculate the position on the sphere using spherical coordinates 797 | f64 Radius = 50.0f; 798 | f64 X = Radius * cosf(RightAscensionRad) * cosf(DeclinationRad); 799 | f64 Y = Radius * sinf(DeclinationRad); 800 | f64 Z = Radius * sinf(RightAscensionRad) * cosf(DeclinationRad); 801 | 802 | // Create a model matrix for each data point to position it 803 | MatrixTransformsB[i] = MatrixIdentity(); 804 | MatrixTransformsB[i] = MatrixMultiply(MatrixTransformsB[i], MatrixScale(0.1f, 0.1f, 0.1f)); 805 | MatrixTransformsB[i] = MatrixMultiply(MatrixTransformsB[i], MatrixTranslate(X, Y, Z)); 806 | } 807 | } // end of for loop for the course data 808 | 809 | // Redshift data points with distance from the earth 810 | // Redshift can be mapped to a distance value in megaparsecs (Mpc) or another suitable unit for distance. 811 | // Assuming Redshift has already been scaled to represent the distance directly, we use it as the radius. 812 | for (unsigned long int i = 0; i < MAX_REDSHIFT_DATA_POINTS; ++i) 813 | { 814 | // Convert RA and DEC to radians 815 | f64 rightAscensionRad = (RedshiftData[i].right_ascension / 60.0f) * PIdividedBy180; 816 | f64 declinationRad = (RedshiftData[i].declination / 60.0f) * PIdividedBy180; 817 | 818 | // Convert redshift to distance in Megaparsecs 819 | f64 distanceMpc = RedshiftToDistance(RedshiftData[i].redshift); 820 | 821 | // Convert distance to some meaningful scale for your simulation 822 | // For example, if you want to work in parsecs instead of megaparsecs: 823 | f64 distance = distanceMpc * hubbleConstant; // Convert Mpc to parsecs 824 | 825 | // Calculate the position in 3D space using spherical to Cartesian conversion 826 | f64 X = distance * cos(declinationRad) * cos(rightAscensionRad); 827 | f64 Y = distance * cos(declinationRad) * sin(rightAscensionRad); 828 | f64 Z = distance * sin(declinationRad); 829 | 830 | // Apply this position to your model matrix (for example) 831 | MatrixTransformsRedshift[i] = MatrixIdentity(); 832 | MatrixTransformsRedshift[i] = MatrixMultiply(MatrixTransformsRedshift[i], MatrixScale(10000.0f, 10000.0f, 10000.0f)); 833 | MatrixTransformsRedshift[i] = MatrixMultiply(MatrixTransformsRedshift[i], MatrixTranslate(X, Y, Z)); 834 | } 835 | } 836 | 837 | // Raylib 838 | { 839 | SetTraceLogLevel(LOG_WARNING); 840 | SetConfigFlags(FLAG_WINDOW_RESIZABLE); 841 | InitWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "galaxy_visuazation_raylib"); 842 | 843 | #if defined(PLATFORM_WEB) 844 | emscripten_set_main_loop(UpdateDrawFrame, 0, 1); 845 | #else 846 | SetTargetFPS(60); 847 | } 848 | 849 | MainFont = LoadFontEx("./resources/fonts/SuperMarioBros2.ttf", 32, 0, 250); 850 | CustomShader = LoadShader("./shaders/lighting_instancing.vs", "./shaders/lighting.fs"); 851 | SphereMesh = GenMeshSphere(0.2f, 16, 16); 852 | 853 | // Get shader locations 854 | CustomShader.locs[SHADER_LOC_MATRIX_MVP] = GetShaderLocation(CustomShader, "mvp"); 855 | CustomShader.locs[SHADER_LOC_VECTOR_VIEW] = GetShaderLocation(CustomShader, "viewPos"); 856 | CustomShader.locs[SHADER_LOC_MATRIX_MODEL] = GetShaderLocationAttrib(CustomShader, "instanceTransform"); 857 | 858 | // Lighting 859 | { 860 | // Setting shader values 861 | i32 AmbientLoc = GetShaderLocation(CustomShader, "ambient"); 862 | f64 AmbientValue[4] = {1.0, 1.0, 1.0, 1.0}; 863 | SetShaderValue(CustomShader, AmbientLoc, &AmbientValue, SHADER_UNIFORM_VEC4); 864 | 865 | i32 ColorDiffuseLoc = GetShaderLocation(CustomShader, "colorDiffuse"); 866 | f64 DiffuseValue[4] = {1.0, 1.0, 1.0, 1.0}; 867 | SetShaderValue(CustomShader, ColorDiffuseLoc, &DiffuseValue, SHADER_UNIFORM_VEC4); 868 | 869 | // Like the sun shining on the earth 870 | CreateLight(LIGHT_DIRECTIONAL, {1000.0f, 1000.0f, 0.0f}, Vector3Zero(), WHITE, CustomShader); 871 | 872 | // @Note(Victor): We can add more lights to the scene to better show the colors of the galaxies 873 | CreateLight(LIGHT_DIRECTIONAL, {-1000.0f, -1000.0f, 0.0f}, Vector3Zero(), WHITE, CustomShader); 874 | CreateLight(LIGHT_DIRECTIONAL, {0.0f, 0.0f, 1000.0f}, Vector3Zero(), WHITE, CustomShader); 875 | CreateLight(LIGHT_DIRECTIONAL, {0.0f, 0.0f, -1000.0f}, Vector3Zero(), WHITE, CustomShader); 876 | 877 | // We can also add a point light at the center of the earth 878 | CreateLight(LIGHT_POINT, {0.0f, 0.0f, 0.0f}, Vector3Zero(), WHITE, CustomShader); 879 | } 880 | 881 | // Material 882 | { 883 | // NOTE: We are assigning the intancing shader to material.shader 884 | // to be used on mesh drawing with DrawMeshInstanced() 885 | Material GalaxyMaterial = LoadMaterialDefault(); 886 | GalaxyMaterial.shader = CustomShader; 887 | 888 | GalaxyMaterial.maps[MATERIAL_MAP_DIFFUSE].texture = LoadTexture("./resources/images/galaxy_test_texture_diffuse.png"); 889 | GalaxyMaterial.maps[MATERIAL_MAP_SPECULAR].texture = LoadTexture("./resources/images/galaxy_test_texture_specular.png"); 890 | 891 | GalaxyMaterial.maps[MATERIAL_MAP_DIFFUSE].color = WHITE; 892 | GalaxyMaterial.maps[MATERIAL_MAP_SPECULAR].value = 1.0f; 893 | 894 | // Set the shininess for specular reflections 895 | float shininess = 32.0f; 896 | SetShaderValue(GalaxyMaterial.shader, GetShaderLocation(GalaxyMaterial.shader, "shininess"), &shininess, SHADER_UNIFORM_FLOAT); 897 | 898 | matInstances = GalaxyMaterial; 899 | matInstances.shader = CustomShader; 900 | matInstances.maps[MATERIAL_MAP_DIFFUSE].color = WHITE; 901 | } 902 | 903 | printf("\n\tMemory usage before we start the game loop\n"); 904 | PrintMemoryUsage(); 905 | 906 | // Load the Earth model 907 | EarthModel = LoadModel("./resources/Earth_1_12756.glb"); 908 | 909 | // Optionally, you can scale the model if needed 910 | Matrix scaleMatrix = MatrixScale(0.01f, 0.01f, 0.01f); 911 | EarthModel.transform = MatrixMultiply(EarthModel.transform, scaleMatrix); 912 | 913 | // Main loop 914 | while (!WindowShouldClose()) // Detect window close button or ESC key 915 | { 916 | f64 DeltaTime = GetFrameTime(); 917 | GameUpdate(DeltaTime); 918 | GameRender(DeltaTime); 919 | } 920 | #endif 921 | CleanupOurStuff(); 922 | 923 | return (0); 924 | } 925 | --------------------------------------------------------------------------------