INFO702 - TPs
|
L'objectif de ce TP est de vous familiariser avec la programmation objet classique en C++. Il n'y aura pas explicitement de la généricité, mais on définira néanmoins des objets classiques en programmation générique (comme les itérateurs). Ce TP servira de base à l'écriture d'une classe générique image au TP suivant. A l'issue de cette séance, vous maîtriserez:
vector
et du quasi-conteneur string
Le fil conducteur est l'écriture d'une classe pour représenter les images en niveaux de gris. Vous développerez un certain nombre de services autour de ces images:
Les sites suivants pourront être utile pendant le TP:
Note: Tout bon logiciel de manipulation d'image peut importer ou exporter du portable pixmap (PBM, PGM, PPM). Le logiciel ImageMagick (commandes convert
et display
notamment) est bien pratique pour convertir en ligne de commande une image:
prompt> convert toto.jpg toto.pgm prompt> display toto.pgm
make
démarre le TP en 5 minutes.ios::binary
ou ios::text
à l'ouverture des fichiers)Nous représenterons les images en niveaux de gris de façon classique, avec un tableau de taille W*H de caractères (les niveaux de gris sont un nombre entre 0 et 255), et W et H sont respectivement la largeur et la hauteur de l'image. Vous déclarerez donc la classe GrayLevelImage2D dans un fichier GrayLevelImage2D.hpp. Un extrait du fichier entête donne:
On utilisera la classe std::vector de la STL. Cela nous évitera toute allocation dynamique ! Il suffit soit de l'initialiser avec la bonne taille (i.e. donc largeur * hauteur), soit d'appeler vector::resize pour changer la taille. Ecrivez donc cette première version de la classe GrayLevelImage2D, avec les deux constructeurs précisés. Faut-il réécrire le constructeur par copie et l'affectation ?
NB: les méthodes seront écrites dans un fichier source GrayLevelImage2D.cpp.
Le principe est que les valeurs de l'image sont stockées les unes à la suite des autres en balayant l'axe des x d'abord. Par exemple, cela donne les indices suivants dans le tableau m_data:
Pixel (x,y): | (0,0) | (1,0) | ... | (w-1,0) | (0,1) | (1,1) | ... | (w-1,h-1) |
---|---|---|---|---|---|---|---|---|
Indice | 0 | 1 | w-1 | w | w+1 | w*(h-1)+w-1 |
On écrira donc une méthode (privée) int index( int x, int y ) const
qui retourne l'indice du pixel de coordonnées (x,y)
.
Cette fonction sera utilisée partout où il faut convertir les coordonnées en l'indice dans m_data
.
On ajoutera aussi les méthodes suivantes:
On testera les méthodes précédents en créant un fichier testGrayLevelImage2D.cpp. Vous pourrez utiliser le Makefile
suivant:
############################################################################# # Makefile for building: collider.app/Contents/MacOS/collider # Generated by qmake (3.1) (Qt 6.5.1) # Project: collider.pro # Template: app # Command: /opt/homebrew/Cellar/qt/6.5.1_3/bin/qmake -o Makefile collider.pro ############################################################################# MAKEFILE = Makefile EQ = = ####### Compiler, tools and options CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang CXX = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ DEFINES = -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB CFLAGS = -pipe -O2 $(EXPORT_ARCH_ARGS) -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -mmacosx-version-min=13.0 -Wall -Wextra $(DEFINES) CXXFLAGS = -pipe -stdlib=libc++ -O2 -std=gnu++1z $(EXPORT_ARCH_ARGS) -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -mmacosx-version-min=13.0 -Wall -Wextra $(DEFINES) INCPATH = -I. -I/opt/homebrew/lib/QtWidgets.framework/Headers -I/opt/homebrew/lib/QtGui.framework/Headers -I/opt/homebrew/lib/QtCore.framework/Headers -I. -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk/System/Library/Frameworks/AGL.framework/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk/System/Library/Frameworks/AGL.framework/Headers -I/opt/homebrew/share/qt/mkspecs/macx-clang -F/opt/homebrew/lib QMAKE = /opt/homebrew/Cellar/qt/6.5.1_3/bin/qmake DEL_FILE = rm -f CHK_DIR_EXISTS= test -d MKDIR = mkdir -p COPY = cp -f COPY_FILE = cp -f COPY_DIR = cp -f -R INSTALL_FILE = install -m 644 -p INSTALL_PROGRAM = install -m 755 -p INSTALL_DIR = cp -f -R QINSTALL = /opt/homebrew/Cellar/qt/6.5.1_3/bin/qmake -install qinstall QINSTALL_PROGRAM = /opt/homebrew/Cellar/qt/6.5.1_3/bin/qmake -install qinstall -exe DEL_FILE = rm -f SYMLINK = ln -f -s DEL_DIR = rmdir MOVE = mv -f TAR = tar -cf COMPRESS = gzip -9f DISTNAME = collider1.0.0 DISTDIR = /Users/lachaud/ownCloud\ -\ LACHAUD\ Jacques-Olivier@mycore.cnrs.fr/Cours/INFO702/Tests/TP0/.tmp/collider1.0.0 LINK = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ LFLAGS = -stdlib=libc++ -headerpad_max_install_names $(EXPORT_ARCH_ARGS) -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -mmacosx-version-min=13.0 -Wl,-rpath,@executable_path/../Frameworks -Wl,-rpath,/opt/homebrew/lib LIBS = $(SUBLIBS) -F/opt/homebrew/lib -framework QtWidgets -framework QtGui -framework AppKit -framework ImageIO -framework Metal -framework QtCore -framework IOKit -framework DiskArbitration -framework AGL -framework OpenGL AR = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar cq RANLIB = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib -s SED = sed STRIP = strip ####### Output directory OBJECTS_DIR = ./ ####### Files SOURCES = collider.cpp \ objects.cpp qrc_collider.cpp OBJECTS = collider.o \ objects.o \ qrc_collider.o DIST = /opt/homebrew/share/qt/mkspecs/features/spec_pre.prf \ /opt/homebrew/share/qt/mkspecs/features/device_config.prf \ /opt/homebrew/share/qt/mkspecs/common/unix.conf \ /opt/homebrew/share/qt/mkspecs/common/mac.conf \ /opt/homebrew/share/qt/mkspecs/common/macx.conf \ /opt/homebrew/share/qt/mkspecs/common/sanitize.conf \ /opt/homebrew/share/qt/mkspecs/common/gcc-base.conf \ /opt/homebrew/share/qt/mkspecs/common/gcc-base-mac.conf \ /opt/homebrew/share/qt/mkspecs/common/clang.conf \ /opt/homebrew/share/qt/mkspecs/common/clang-mac.conf \ /opt/homebrew/share/qt/mkspecs/qconfig.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3danimation.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3danimation_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dcore.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dcore_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dextras.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dextras_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dinput.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dinput_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dlogic.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dlogic_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquick.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquick_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickanimation.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickanimation_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickextras.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickextras_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickinput.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickinput_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickrender.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickrender_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickscene2d.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickscene2d_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3drender.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3drender_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_bluetooth.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_bluetooth_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_bodymovin_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_charts.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_charts_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_chartsqml.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_chartsqml_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_coap.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_coap_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_concurrent.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_concurrent_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_core.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_core5compat.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_core5compat_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_core_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_datavisualization.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_datavisualization_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_datavisualizationqml.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_datavisualizationqml_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_dbus.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_dbus_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_declarativeopcua.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_declarativeopcua_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_designer.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_designer_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_designercomponents_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_example_icons_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_fb_support_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_grpc.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_grpc_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_gui.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_gui_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_help.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_help_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_httpserver.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_httpserver_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_hunspellinputmethod.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_hunspellinputmethod_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_jsonrpc_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labsanimation.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labsanimation_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labsfolderlistmodel.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labsfolderlistmodel_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labsqmlmodels.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labsqmlmodels_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labssettings.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labssettings_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labssharedimage.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labssharedimage_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labswavefrontmesh.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labswavefrontmesh_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_languageserver_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_linguist.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_linguist_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_location.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_location_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_mqtt.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_mqtt_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_multimedia.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_multimedia_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_multimediaquick_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_multimediawidgets.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_multimediawidgets_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_network.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_network_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_networkauth.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_networkauth_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_nfc.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_nfc_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_opcua.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_opcua_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_opengl.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_opengl_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_openglwidgets.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_openglwidgets_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_packetprotocol_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_pdf.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_pdf_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_pdfquick.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_pdfquick_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_pdfwidgets.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_pdfwidgets_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_positioning.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_positioning_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_positioningquick.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_positioningquick_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_printsupport.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_printsupport_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_protobuf.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_protobuf_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qml.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qml_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlcompiler_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlcore.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlcore_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmldebug_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmldom_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlintegration.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlintegration_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmllocalstorage.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmllocalstorage_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlmodels.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlmodels_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmltest.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmltest_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmltyperegistrar_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlworkerscript.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlworkerscript_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlxmllistmodel.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlxmllistmodel_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3d.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3d_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dassetimport.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dassetimport_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dassetutils.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dassetutils_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3deffects.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3deffects_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dglslparser_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dhelpers.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dhelpers_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dhelpersimpl.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dhelpersimpl_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3diblbaker.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3diblbaker_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dparticleeffects.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dparticleeffects_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dparticles.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dparticles_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dphysics.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dphysics_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dphysicshelpers.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dphysicshelpers_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3druntimerender.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3druntimerender_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dspatialaudio_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dutils.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dutils_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickcontrols2.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickcontrols2_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickcontrols2impl.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickcontrols2impl_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickcontrolstestutilsprivate_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickdialogs2.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickdialogs2_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickdialogs2quickimpl.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickdialogs2quickimpl_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickdialogs2utils.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickdialogs2utils_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickeffects_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quicklayouts.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quicklayouts_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickparticles_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickshapes_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quicktemplates2.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quicktemplates2_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quicktestutilsprivate_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quicktimeline.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quicktimeline_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickwidgets.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickwidgets_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_remoteobjects.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_remoteobjects_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_remoteobjectsqml.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_remoteobjectsqml_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_repparser.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_repparser_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_scxml.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_scxml_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_scxmlqml.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_scxmlqml_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_sensors.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_sensors_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_sensorsquick.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_sensorsquick_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_serialbus.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_serialbus_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_serialport.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_serialport_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_shadertools.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_shadertools_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_spatialaudio.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_spatialaudio_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_sql.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_sql_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_statemachine.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_statemachine_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_statemachineqml.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_statemachineqml_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_svg.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_svg_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_svgwidgets.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_svgwidgets_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_testlib.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_testlib_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_texttospeech.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_texttospeech_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_tools_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_uiplugin.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_uitools.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_uitools_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_virtualkeyboard.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_virtualkeyboard_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webchannel.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webchannel_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webenginecore.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webenginecore_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webenginequick.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webenginequick_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webenginequickdelegatesqml.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webenginequickdelegatesqml_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webenginewidgets.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webenginewidgets_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_websockets.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_websockets_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webview.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webview_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webviewquick.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webviewquick_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_widgets.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_widgets_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_xml.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_xml_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_plugin_qdarwinbluetoothpermission.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_plugin_qdarwincalendarpermission.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_plugin_qdarwincamerapermission.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_plugin_qdarwincontactspermission.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_plugin_qdarwinlocationpermission.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_plugin_qdarwinmicrophonepermission.pri \ /opt/homebrew/share/qt/mkspecs/features/qt_functions.prf \ /opt/homebrew/share/qt/mkspecs/features/qt_config.prf \ /opt/homebrew/share/qt/mkspecs/macx-clang/qmake.conf \ /opt/homebrew/share/qt/mkspecs/features/spec_post.prf \ .qmake.stash \ /opt/homebrew/share/qt/mkspecs/features/exclusive_builds.prf \ /opt/homebrew/share/qt/mkspecs/features/mac/sdk.prf \ /opt/homebrew/share/qt/mkspecs/features/toolchain.prf \ /opt/homebrew/share/qt/mkspecs/features/mac/toolchain.prf \ /opt/homebrew/share/qt/mkspecs/features/default_pre.prf \ /opt/homebrew/share/qt/mkspecs/features/mac/default_pre.prf \ /opt/homebrew/share/qt/mkspecs/features/resolve_config.prf \ /opt/homebrew/share/qt/mkspecs/features/default_post.prf \ /opt/homebrew/share/qt/mkspecs/features/mac/default_post.prf \ /opt/homebrew/share/qt/mkspecs/features/mac/objective_c.prf \ /opt/homebrew/share/qt/mkspecs/features/mac/mac.prf \ /opt/homebrew/share/qt/mkspecs/features/warn_on.prf \ /opt/homebrew/share/qt/mkspecs/features/permissions.prf \ /opt/homebrew/share/qt/mkspecs/features/qt.prf \ /opt/homebrew/share/qt/mkspecs/features/resources_functions.prf \ /opt/homebrew/share/qt/mkspecs/features/resources.prf \ /opt/homebrew/share/qt/mkspecs/features/moc.prf \ /opt/homebrew/share/qt/mkspecs/features/unix/opengl.prf \ /opt/homebrew/share/qt/mkspecs/features/uic.prf \ /opt/homebrew/share/qt/mkspecs/features/unix/thread.prf \ /opt/homebrew/share/qt/mkspecs/features/qmake_use.prf \ /opt/homebrew/share/qt/mkspecs/features/file_copies.prf \ /opt/homebrew/share/qt/mkspecs/features/mac/rez.prf \ /opt/homebrew/share/qt/mkspecs/features/mac/asset_catalogs.prf \ /opt/homebrew/share/qt/mkspecs/features/testcase_targets.prf \ /opt/homebrew/share/qt/mkspecs/features/exceptions.prf \ /opt/homebrew/share/qt/mkspecs/features/yacc.prf \ /opt/homebrew/share/qt/mkspecs/features/lex.prf \ collider.pro objects.hpp collider.cpp \ objects.cpp QMAKE_TARGET = collider DESTDIR = TARGET = collider.app/Contents/MacOS/collider ####### Custom Variables EXPORT_QMAKE_MAC_SDK = macosx EXPORT_QMAKE_MAC_SDK_VERSION = 13.3 EXPORT_QMAKE_XCODE_DEVELOPER_PATH = /Applications/Xcode.app/Contents/Developer EXPORT__QMAKE_STASH_ = /Users/lachaud/ownCloud - LACHAUD Jacques-Olivier@mycore.cnrs.fr/Cours/INFO702/Tests/TP0/.qmake.stash EXPORT_VALID_ARCHS = arm64 EXPORT_DEFAULT_ARCHS = arm64 EXPORT_ARCHS = $(filter $(EXPORT_VALID_ARCHS), $(if $(ARCHS), $(ARCHS), $(if $(EXPORT_DEFAULT_ARCHS), $(EXPORT_DEFAULT_ARCHS), $(EXPORT_VALID_ARCHS)))) EXPORT_ARCH_ARGS = $(foreach arch, $(if $(EXPORT_ARCHS), $(EXPORT_ARCHS), $(EXPORT_VALID_ARCHS)), -arch $(arch)) EXPORT__PRO_FILE_ = /Users/lachaud/ownCloud - LACHAUD Jacques-Olivier@mycore.cnrs.fr/Cours/INFO702/Tests/TP0/collider.pro include /opt/homebrew/share/qt/mkspecs/features/mac/sdk.mk first: all ####### Build rules collider.app/Contents/MacOS/collider: $(OBJECTS) @test -d collider.app/Contents/MacOS/ || mkdir -p collider.app/Contents/MacOS/ $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS) Makefile: collider.pro /opt/homebrew/share/qt/mkspecs/macx-clang/qmake.conf /opt/homebrew/share/qt/mkspecs/features/spec_pre.prf \ /opt/homebrew/share/qt/mkspecs/features/device_config.prf \ /opt/homebrew/share/qt/mkspecs/common/unix.conf \ /opt/homebrew/share/qt/mkspecs/common/mac.conf \ /opt/homebrew/share/qt/mkspecs/common/macx.conf \ /opt/homebrew/share/qt/mkspecs/common/sanitize.conf \ /opt/homebrew/share/qt/mkspecs/common/gcc-base.conf \ /opt/homebrew/share/qt/mkspecs/common/gcc-base-mac.conf \ /opt/homebrew/share/qt/mkspecs/common/clang.conf \ /opt/homebrew/share/qt/mkspecs/common/clang-mac.conf \ /opt/homebrew/share/qt/mkspecs/qconfig.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3danimation.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3danimation_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dcore.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dcore_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dextras.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dextras_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dinput.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dinput_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dlogic.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dlogic_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquick.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquick_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickanimation.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickanimation_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickextras.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickextras_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickinput.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickinput_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickrender.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickrender_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickscene2d.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickscene2d_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3drender.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3drender_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_bluetooth.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_bluetooth_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_bodymovin_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_charts.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_charts_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_chartsqml.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_chartsqml_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_coap.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_coap_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_concurrent.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_concurrent_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_core.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_core5compat.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_core5compat_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_core_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_datavisualization.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_datavisualization_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_datavisualizationqml.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_datavisualizationqml_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_dbus.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_dbus_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_declarativeopcua.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_declarativeopcua_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_designer.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_designer_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_designercomponents_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_example_icons_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_fb_support_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_grpc.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_grpc_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_gui.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_gui_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_help.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_help_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_httpserver.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_httpserver_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_hunspellinputmethod.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_hunspellinputmethod_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_jsonrpc_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labsanimation.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labsanimation_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labsfolderlistmodel.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labsfolderlistmodel_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labsqmlmodels.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labsqmlmodels_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labssettings.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labssettings_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labssharedimage.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labssharedimage_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labswavefrontmesh.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labswavefrontmesh_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_languageserver_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_linguist.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_linguist_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_location.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_location_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_mqtt.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_mqtt_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_multimedia.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_multimedia_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_multimediaquick_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_multimediawidgets.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_multimediawidgets_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_network.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_network_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_networkauth.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_networkauth_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_nfc.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_nfc_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_opcua.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_opcua_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_opengl.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_opengl_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_openglwidgets.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_openglwidgets_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_packetprotocol_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_pdf.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_pdf_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_pdfquick.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_pdfquick_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_pdfwidgets.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_pdfwidgets_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_positioning.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_positioning_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_positioningquick.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_positioningquick_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_printsupport.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_printsupport_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_protobuf.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_protobuf_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qml.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qml_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlcompiler_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlcore.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlcore_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmldebug_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmldom_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlintegration.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlintegration_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmllocalstorage.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmllocalstorage_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlmodels.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlmodels_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmltest.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmltest_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmltyperegistrar_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlworkerscript.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlworkerscript_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlxmllistmodel.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlxmllistmodel_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3d.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3d_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dassetimport.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dassetimport_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dassetutils.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dassetutils_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3deffects.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3deffects_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dglslparser_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dhelpers.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dhelpers_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dhelpersimpl.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dhelpersimpl_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3diblbaker.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3diblbaker_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dparticleeffects.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dparticleeffects_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dparticles.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dparticles_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dphysics.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dphysics_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dphysicshelpers.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dphysicshelpers_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3druntimerender.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3druntimerender_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dspatialaudio_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dutils.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dutils_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickcontrols2.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickcontrols2_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickcontrols2impl.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickcontrols2impl_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickcontrolstestutilsprivate_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickdialogs2.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickdialogs2_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickdialogs2quickimpl.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickdialogs2quickimpl_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickdialogs2utils.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickdialogs2utils_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickeffects_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quicklayouts.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quicklayouts_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickparticles_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickshapes_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quicktemplates2.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quicktemplates2_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quicktestutilsprivate_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quicktimeline.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quicktimeline_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickwidgets.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickwidgets_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_remoteobjects.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_remoteobjects_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_remoteobjectsqml.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_remoteobjectsqml_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_repparser.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_repparser_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_scxml.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_scxml_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_scxmlqml.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_scxmlqml_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_sensors.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_sensors_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_sensorsquick.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_sensorsquick_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_serialbus.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_serialbus_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_serialport.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_serialport_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_shadertools.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_shadertools_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_spatialaudio.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_spatialaudio_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_sql.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_sql_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_statemachine.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_statemachine_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_statemachineqml.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_statemachineqml_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_svg.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_svg_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_svgwidgets.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_svgwidgets_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_testlib.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_testlib_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_texttospeech.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_texttospeech_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_tools_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_uiplugin.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_uitools.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_uitools_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_virtualkeyboard.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_virtualkeyboard_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webchannel.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webchannel_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webenginecore.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webenginecore_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webenginequick.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webenginequick_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webenginequickdelegatesqml.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webenginequickdelegatesqml_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webenginewidgets.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webenginewidgets_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_websockets.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_websockets_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webview.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webview_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webviewquick.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webviewquick_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_widgets.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_widgets_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_xml.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_lib_xml_private.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_plugin_qdarwinbluetoothpermission.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_plugin_qdarwincalendarpermission.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_plugin_qdarwincamerapermission.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_plugin_qdarwincontactspermission.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_plugin_qdarwinlocationpermission.pri \ /opt/homebrew/share/qt/mkspecs/modules/qt_plugin_qdarwinmicrophonepermission.pri \ /opt/homebrew/share/qt/mkspecs/features/qt_functions.prf \ /opt/homebrew/share/qt/mkspecs/features/qt_config.prf \ /opt/homebrew/share/qt/mkspecs/macx-clang/qmake.conf \ /opt/homebrew/share/qt/mkspecs/features/spec_post.prf \ .qmake.stash \ /opt/homebrew/share/qt/mkspecs/features/exclusive_builds.prf \ /opt/homebrew/share/qt/mkspecs/features/mac/sdk.prf \ /opt/homebrew/share/qt/mkspecs/features/toolchain.prf \ /opt/homebrew/share/qt/mkspecs/features/mac/toolchain.prf \ /opt/homebrew/share/qt/mkspecs/features/default_pre.prf \ /opt/homebrew/share/qt/mkspecs/features/mac/default_pre.prf \ /opt/homebrew/share/qt/mkspecs/features/resolve_config.prf \ /opt/homebrew/share/qt/mkspecs/features/default_post.prf \ /opt/homebrew/share/qt/mkspecs/features/mac/default_post.prf \ /opt/homebrew/share/qt/mkspecs/features/mac/objective_c.prf \ /opt/homebrew/share/qt/mkspecs/features/mac/mac.prf \ /opt/homebrew/share/qt/mkspecs/features/warn_on.prf \ /opt/homebrew/share/qt/mkspecs/features/permissions.prf \ /opt/homebrew/share/qt/mkspecs/features/qt.prf \ /opt/homebrew/share/qt/mkspecs/features/resources_functions.prf \ /opt/homebrew/share/qt/mkspecs/features/resources.prf \ /opt/homebrew/share/qt/mkspecs/features/moc.prf \ /opt/homebrew/share/qt/mkspecs/features/unix/opengl.prf \ /opt/homebrew/share/qt/mkspecs/features/uic.prf \ /opt/homebrew/share/qt/mkspecs/features/unix/thread.prf \ /opt/homebrew/share/qt/mkspecs/features/qmake_use.prf \ /opt/homebrew/share/qt/mkspecs/features/file_copies.prf \ /opt/homebrew/share/qt/mkspecs/features/mac/rez.prf \ /opt/homebrew/share/qt/mkspecs/features/mac/asset_catalogs.prf \ /opt/homebrew/share/qt/mkspecs/features/testcase_targets.prf \ /opt/homebrew/share/qt/mkspecs/features/exceptions.prf \ /opt/homebrew/share/qt/mkspecs/features/yacc.prf \ /opt/homebrew/share/qt/mkspecs/features/lex.prf \ collider.pro \ collider.qrc \ /opt/homebrew/lib/QtWidgets.framework/Resources/QtWidgets.prl \ /opt/homebrew/lib/QtGui.framework/Resources/QtGui.prl \ /opt/homebrew/lib/QtCore.framework/Resources/QtCore.prl $(QMAKE) -o Makefile collider.pro /opt/homebrew/share/qt/mkspecs/features/spec_pre.prf: /opt/homebrew/share/qt/mkspecs/features/device_config.prf: /opt/homebrew/share/qt/mkspecs/common/unix.conf: /opt/homebrew/share/qt/mkspecs/common/mac.conf: /opt/homebrew/share/qt/mkspecs/common/macx.conf: /opt/homebrew/share/qt/mkspecs/common/sanitize.conf: /opt/homebrew/share/qt/mkspecs/common/gcc-base.conf: /opt/homebrew/share/qt/mkspecs/common/gcc-base-mac.conf: /opt/homebrew/share/qt/mkspecs/common/clang.conf: /opt/homebrew/share/qt/mkspecs/common/clang-mac.conf: /opt/homebrew/share/qt/mkspecs/qconfig.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3danimation.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3danimation_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dcore.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dcore_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dextras.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dextras_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dinput.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dinput_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dlogic.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dlogic_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquick.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquick_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickanimation.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickanimation_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickextras.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickextras_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickinput.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickinput_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickrender.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickrender_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickscene2d.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3dquickscene2d_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3drender.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_3drender_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_bluetooth.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_bluetooth_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_bodymovin_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_charts.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_charts_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_chartsqml.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_chartsqml_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_coap.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_coap_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_concurrent.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_concurrent_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_core.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_core5compat.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_core5compat_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_core_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_datavisualization.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_datavisualization_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_datavisualizationqml.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_datavisualizationqml_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_dbus.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_dbus_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_declarativeopcua.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_declarativeopcua_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_designer.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_designer_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_designercomponents_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_devicediscovery_support_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_example_icons_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_fb_support_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_grpc.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_grpc_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_gui.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_gui_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_help.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_help_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_httpserver.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_httpserver_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_hunspellinputmethod.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_hunspellinputmethod_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_jsonrpc_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labsanimation.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labsanimation_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labsfolderlistmodel.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labsfolderlistmodel_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labsqmlmodels.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labsqmlmodels_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labssettings.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labssettings_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labssharedimage.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labssharedimage_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labswavefrontmesh.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_labswavefrontmesh_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_languageserver_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_linguist.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_linguist_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_location.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_location_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_mqtt.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_mqtt_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_multimedia.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_multimedia_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_multimediaquick_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_multimediawidgets.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_multimediawidgets_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_network.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_network_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_networkauth.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_networkauth_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_nfc.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_nfc_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_opcua.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_opcua_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_opengl.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_opengl_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_openglwidgets.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_openglwidgets_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_packetprotocol_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_pdf.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_pdf_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_pdfquick.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_pdfquick_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_pdfwidgets.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_pdfwidgets_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_positioning.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_positioning_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_positioningquick.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_positioningquick_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_printsupport.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_printsupport_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_protobuf.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_protobuf_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qml.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qml_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlcompiler_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlcore.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlcore_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmldebug_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmldom_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlintegration.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlintegration_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmllocalstorage.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmllocalstorage_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlmodels.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlmodels_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmltest.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmltest_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmltyperegistrar_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlworkerscript.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlworkerscript_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlxmllistmodel.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_qmlxmllistmodel_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3d.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3d_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dassetimport.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dassetimport_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dassetutils.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dassetutils_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3deffects.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3deffects_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dglslparser_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dhelpers.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dhelpers_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dhelpersimpl.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dhelpersimpl_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3diblbaker.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3diblbaker_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dparticleeffects.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dparticleeffects_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dparticles.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dparticles_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dphysics.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dphysics_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dphysicshelpers.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dphysicshelpers_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3druntimerender.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3druntimerender_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dspatialaudio_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dutils.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick3dutils_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quick_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickcontrols2.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickcontrols2_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickcontrols2impl.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickcontrols2impl_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickcontrolstestutilsprivate_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickdialogs2.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickdialogs2_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickdialogs2quickimpl.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickdialogs2quickimpl_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickdialogs2utils.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickdialogs2utils_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickeffects_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quicklayouts.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quicklayouts_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickparticles_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickshapes_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quicktemplates2.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quicktemplates2_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quicktestutilsprivate_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quicktimeline.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quicktimeline_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickwidgets.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_quickwidgets_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_remoteobjects.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_remoteobjects_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_remoteobjectsqml.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_remoteobjectsqml_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_repparser.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_repparser_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_scxml.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_scxml_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_scxmlqml.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_scxmlqml_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_sensors.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_sensors_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_sensorsquick.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_sensorsquick_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_serialbus.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_serialbus_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_serialport.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_serialport_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_shadertools.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_shadertools_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_spatialaudio.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_spatialaudio_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_sql.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_sql_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_statemachine.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_statemachine_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_statemachineqml.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_statemachineqml_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_svg.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_svg_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_svgwidgets.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_svgwidgets_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_testlib.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_testlib_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_texttospeech.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_texttospeech_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_tools_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_uiplugin.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_uitools.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_uitools_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_virtualkeyboard.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_virtualkeyboard_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webchannel.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webchannel_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webenginecore.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webenginecore_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webenginequick.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webenginequick_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webenginequickdelegatesqml.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webenginequickdelegatesqml_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webenginewidgets.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webenginewidgets_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_websockets.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_websockets_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webview.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webview_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webviewquick.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_webviewquick_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_widgets.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_widgets_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_xml.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_lib_xml_private.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_plugin_qdarwinbluetoothpermission.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_plugin_qdarwincalendarpermission.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_plugin_qdarwincamerapermission.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_plugin_qdarwincontactspermission.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_plugin_qdarwinlocationpermission.pri: /opt/homebrew/share/qt/mkspecs/modules/qt_plugin_qdarwinmicrophonepermission.pri: /opt/homebrew/share/qt/mkspecs/features/qt_functions.prf: /opt/homebrew/share/qt/mkspecs/features/qt_config.prf: /opt/homebrew/share/qt/mkspecs/macx-clang/qmake.conf: /opt/homebrew/share/qt/mkspecs/features/spec_post.prf: .qmake.stash: /opt/homebrew/share/qt/mkspecs/features/exclusive_builds.prf: /opt/homebrew/share/qt/mkspecs/features/mac/sdk.prf: /opt/homebrew/share/qt/mkspecs/features/toolchain.prf: /opt/homebrew/share/qt/mkspecs/features/mac/toolchain.prf: /opt/homebrew/share/qt/mkspecs/features/default_pre.prf: /opt/homebrew/share/qt/mkspecs/features/mac/default_pre.prf: /opt/homebrew/share/qt/mkspecs/features/resolve_config.prf: /opt/homebrew/share/qt/mkspecs/features/default_post.prf: /opt/homebrew/share/qt/mkspecs/features/mac/default_post.prf: /opt/homebrew/share/qt/mkspecs/features/mac/objective_c.prf: /opt/homebrew/share/qt/mkspecs/features/mac/mac.prf: /opt/homebrew/share/qt/mkspecs/features/warn_on.prf: /opt/homebrew/share/qt/mkspecs/features/permissions.prf: /opt/homebrew/share/qt/mkspecs/features/qt.prf: /opt/homebrew/share/qt/mkspecs/features/resources_functions.prf: /opt/homebrew/share/qt/mkspecs/features/resources.prf: /opt/homebrew/share/qt/mkspecs/features/moc.prf: /opt/homebrew/share/qt/mkspecs/features/unix/opengl.prf: /opt/homebrew/share/qt/mkspecs/features/uic.prf: /opt/homebrew/share/qt/mkspecs/features/unix/thread.prf: /opt/homebrew/share/qt/mkspecs/features/qmake_use.prf: /opt/homebrew/share/qt/mkspecs/features/file_copies.prf: /opt/homebrew/share/qt/mkspecs/features/mac/rez.prf: /opt/homebrew/share/qt/mkspecs/features/mac/asset_catalogs.prf: /opt/homebrew/share/qt/mkspecs/features/testcase_targets.prf: /opt/homebrew/share/qt/mkspecs/features/exceptions.prf: /opt/homebrew/share/qt/mkspecs/features/yacc.prf: /opt/homebrew/share/qt/mkspecs/features/lex.prf: collider.pro: collider.qrc: /opt/homebrew/lib/QtWidgets.framework/Resources/QtWidgets.prl: /opt/homebrew/lib/QtGui.framework/Resources/QtGui.prl: /opt/homebrew/lib/QtCore.framework/Resources/QtCore.prl: qmake: FORCE @$(QMAKE) -o Makefile collider.pro qmake_all: FORCE collider.app/Contents/PkgInfo: @test -d collider.app/Contents || mkdir -p collider.app/Contents @$(DEL_FILE) collider.app/Contents/PkgInfo @echo "APPL????" > collider.app/Contents/PkgInfo collider.app/Contents/Info.plist: @test -d collider.app/Contents || mkdir -p collider.app/Contents @$(DEL_FILE) collider.app/Contents/Info.plist @plutil -convert xml1 -o - /opt/homebrew/share/qt/mkspecs/macx-clang/Info.plist.app | sed -e "s,@SHORT_VERSION@,1.0,g" -e "s,\$${QMAKE_SHORT_VERSION},1.0,g" -e "s,@FULL_VERSION@,1.0.0,g" -e "s,\$${QMAKE_FULL_VERSION},1.0.0,g" -e "s,@TYPEINFO@,????,g" -e "s,\$${QMAKE_PKGINFO_TYPEINFO},????,g" -e "s,@BUNDLEIDENTIFIER@,com.yourcompany.collider,g" -e "s,\$${PRODUCT_BUNDLE_IDENTIFIER},com.yourcompany.collider,g" -e "s,\$${MACOSX_DEPLOYMENT_TARGET},13.0,g" -e "s,\$${IPHONEOS_DEPLOYMENT_TARGET},,g" -e "s,\$${TVOS_DEPLOYMENT_TARGET},,g" -e "s,\$${WATCHOS_DEPLOYMENT_TARGET},,g" -e "s,\$${IOS_LAUNCH_SCREEN},LaunchScreen,g" -e "s,@ICON@,,g" -e "s,\$${ASSETCATALOG_COMPILER_APPICON_NAME},,g" -e "s,@EXECUTABLE@,collider,g" -e "s,@LIBRARY@,collider,g" -e "s,\$${EXECUTABLE_NAME},collider,g" -e "s,@TYPEINFO@,????,g" -e "s,\$${QMAKE_PKGINFO_TYPEINFO},????,g" >collider.app/Contents/Info.plist all: Makefile \ collider.app/Contents/PkgInfo \ collider.app/Contents/Info.plist collider.app/Contents/MacOS/collider dist: distdir FORCE (cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR) distdir: FORCE @test -d $(DISTDIR) || mkdir -p $(DISTDIR) $(COPY_FILE) --parents $(DIST) $(DISTDIR)/ $(COPY_FILE) --parents collider.qrc $(DISTDIR)/ $(COPY_FILE) --parents /opt/homebrew/share/qt/mkspecs/features/data/dummy.cpp $(DISTDIR)/ $(COPY_FILE) --parents objects.hpp $(DISTDIR)/ $(COPY_FILE) --parents collider.cpp objects.cpp $(DISTDIR)/ clean: compiler_clean -$(DEL_FILE) $(OBJECTS) -$(DEL_FILE) *~ core *.core distclean: clean -$(DEL_FILE) -r collider.app -$(DEL_FILE) .qmake.stash -$(DEL_FILE) Makefile ####### Sub-libraries xcodeproj: @$(QMAKE) -spec macx-xcode "$(EXPORT__PRO_FILE_)" mocclean: compiler_moc_header_clean compiler_moc_objc_header_clean compiler_moc_source_clean mocables: compiler_moc_header_make_all compiler_moc_objc_header_make_all compiler_moc_source_make_all check: first benchmark: first compiler_rcc_make_all: qrc_collider.cpp compiler_rcc_clean: -$(DEL_FILE) qrc_collider.cpp qrc_collider.cpp: collider.qrc \ /opt/homebrew/share/qt/libexec/rcc \ images/asteroid.gif \ images/stars.jpg /opt/homebrew/share/qt/libexec/rcc -name collider collider.qrc -o qrc_collider.cpp compiler_moc_predefs_make_all: moc_predefs.h compiler_moc_predefs_clean: -$(DEL_FILE) moc_predefs.h moc_predefs.h: /opt/homebrew/share/qt/mkspecs/features/data/dummy.cpp /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -pipe -stdlib=libc++ -O2 -std=gnu++1z $(EXPORT_ARCH_ARGS) -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -mmacosx-version-min=13.0 -Wall -Wextra -dM -E -o moc_predefs.h /opt/homebrew/share/qt/mkspecs/features/data/dummy.cpp compiler_moc_header_make_all: compiler_moc_header_clean: compiler_moc_objc_header_make_all: compiler_moc_objc_header_clean: compiler_moc_source_make_all: compiler_moc_source_clean: compiler_uic_make_all: compiler_uic_clean: compiler_rez_source_make_all: compiler_rez_source_clean: compiler_yacc_decl_make_all: compiler_yacc_decl_clean: compiler_yacc_impl_make_all: compiler_yacc_impl_clean: compiler_lex_make_all: compiler_lex_clean: compiler_clean: compiler_rcc_clean compiler_moc_predefs_clean ####### Compile collider.o: collider.cpp /opt/homebrew/lib/QtWidgets.framework/Headers/QtWidgets \ /opt/homebrew/lib/QtWidgets.framework/Headers/qtwidgetsglobal.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qabstractbutton.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qabstractitemdelegate.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qabstractitemview.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qabstractscrollarea.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qabstractslider.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qabstractspinbox.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qaccessiblewidget.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qaction.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qactiongroup.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qapplication.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qboxlayout.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qbuttongroup.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qcalendarwidget.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qcheckbox.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qcolordialog.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qcolormap.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qcolumnview.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qcombobox.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qcommandlinkbutton.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qcommonstyle.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qcompleter.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qdatawidgetmapper.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qdatetimeedit.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qdial.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qdialog.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qdialogbuttonbox.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qdockwidget.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qdrawutil.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qerrormessage.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qfiledialog.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qfileiconprovider.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qfilesystemmodel.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qfocusframe.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qfontcombobox.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qfontdialog.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qformlayout.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qframe.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qgesture.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qgesturerecognizer.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qgraphicsanchorlayout.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qgraphicseffect.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qgraphicsgridlayout.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qgraphicsitem.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qgraphicsitemanimation.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qgraphicslayout.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qgraphicslayoutitem.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qgraphicslinearlayout.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qgraphicsproxywidget.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qgraphicsscene.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qgraphicssceneevent.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qgraphicstransform.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qgraphicsview.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qgraphicswidget.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qgridlayout.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qgroupbox.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qheaderview.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qinputdialog.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qitemdelegate.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qitemeditorfactory.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qkeysequenceedit.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qlabel.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qlayout.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qlayoutitem.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qlcdnumber.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qlineedit.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qlistview.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qlistwidget.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qmainwindow.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qmdiarea.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qmdisubwindow.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qmenu.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qmenubar.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qmessagebox.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qplaintextedit.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qprogressbar.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qprogressdialog.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qproxystyle.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qpushbutton.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qradiobutton.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qrubberband.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qscrollarea.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qscrollbar.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qscroller.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qscrollerproperties.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qshortcut.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qsizegrip.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qsizepolicy.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qslider.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qspinbox.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qsplashscreen.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qsplitter.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qstackedlayout.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qstackedwidget.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qstatusbar.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qstyle.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qstyleditemdelegate.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qstylefactory.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qstyleoption.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qstylepainter.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qstyleplugin.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qsystemtrayicon.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qtabbar.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qtableview.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qtablewidget.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qtabwidget.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qtextbrowser.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qtextedit.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qtoolbar.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qtoolbox.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qtoolbutton.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qtooltip.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qtreeview.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qtreewidget.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qtreewidgetitemiterator.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qtwidgetsversion.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qundoview.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qwhatsthis.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qwidget.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qwidgetaction.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/qwizard.h \ objects.hpp \ /opt/homebrew/lib/QtWidgets.framework/Headers/QGraphicsItem $(CXX) -c $(CXXFLAGS) $(INCPATH) -o collider.o collider.cpp objects.o: objects.cpp /opt/homebrew/lib/QtWidgets.framework/Headers/QGraphicsScene \ /opt/homebrew/lib/QtWidgets.framework/Headers/qgraphicsscene.h \ /opt/homebrew/lib/QtCore.framework/Headers/QRandomGenerator \ /opt/homebrew/lib/QtCore.framework/Headers/qrandom.h \ /opt/homebrew/lib/QtGui.framework/Headers/QPainter \ /opt/homebrew/lib/QtGui.framework/Headers/qpainter.h \ /opt/homebrew/lib/QtWidgets.framework/Headers/QStyleOption \ /opt/homebrew/lib/QtWidgets.framework/Headers/qstyleoption.h \ objects.hpp \ /opt/homebrew/lib/QtWidgets.framework/Headers/QGraphicsItem \ /opt/homebrew/lib/QtWidgets.framework/Headers/qgraphicsitem.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o objects.o objects.cpp qrc_collider.o: qrc_collider.cpp $(CXX) -c $(CXXFLAGS) $(INCPATH) -o qrc_collider.o qrc_collider.cpp ####### Install install: FORCE uninstall: FORCE FORCE: .SUFFIXES:
Il vous suffira alors à vous de taper la commande make
dans votre terminal pour que tout soit compilé.
Le programme principal testGrayLevelImage2D.cpp contiendra au moins:
qui devra fonctionner et afficher (bien sûr):
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
Le programme précédent montre comment accéder pixel par pixel à l'image. L'avantage est que l'on donne un sens géométrique aux indices dans le tableau. C'est donc tout à fait pertinent dans les cas où la position géométrique du pixel doit être exploité. En revanche, il existe un certain nombre d'algorithmes où l'on ne fait que traiter en séquence les valeurs de pixel, sans se préoccuper de leur position. On peut citer:
Dans ce cas, il est utile de pouvoir énumérer (le plus rapidement possible) les valeurs de l'image, comme si on parcourait directement le tableau m_data
.
Pour faire tout cela proprement, on introduit une classe Iterator, interne à GrayLevelImage2D, que l'on fait dériver de std::vector<GrayLevelImage2D>::iterator
. Cela permet de récupérer tous les services usuels des itérateurs, en ajoutant des possibilités supplémentaires si on veut faire évoluer nos itérateurs. On écrira donc:
Il ne reste plus qu'à écrire le constructeur de Iterator à partir d'une image et des coordonnées d'un pixel. Attention dans GrayLevelImage2D.cpp
, le prototype du constructeur de Iterator
est:
On utilisera d'une part la méthode std::vector::begin()
appliquée au vecteur m_data
pour récupérer un itérateur sur le début du tableau, puis il suffira d'additionner l'indice du pixel (x,y) pour décaler l'itérateur au bon endroit.
Il suffit maintenant d'écrire une méthode Iterator start( int x,
int y )
dans GrayLevelImage2D qui fabrique l'itérateur qui pointe sur la valeur du pixel (x,y) (c'est juste le bon appel du constructeur de Iterator), puis les méthodes begin
et end
qui sont des cas particuliers de start
.
Avec cela, on peut remplacer l'affichage de la section précédente (3 - Accesseurs utiles (taille, valeurs de niveaux de gris).) par le code suivant:
Le format PGM [http://fr.wikipedia.org/wiki/Portable_pixmap PBM image format] permet de stocker très simplement les images en niveaux de gris sous forme de fichier. Le format PGM a deux formes, selon que les valeurs sont stockées en clair sous forme ASCII (le fichier est lisible et éditable, mais prend 3 fois plus de place sur le disque), ou stockées en format brut octet par octet.
Exemple d'une image 256 x 256 stockée sous forme ascii.
P2 # CREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) 256 256 255 0 0 1 10 53 67 45 0 12 12 ...
Exemple d'une image 256 x 256 stockée sous forme brute.
P5 # CREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) 256 256 255 ... le reste est illisible
Nous allons utiliser les flux (stream
) pour représenter les fichiers en entrée ou en sortie. On incluera les entêtes suivants:
On écrira donc les méthodes suivantes pour la classe GrayLevelImage2D.
Maintenant, pour ouvrir un fichier "toto.pgm" en lecture on écrira:
Une fois qu'un flux est ouvert, c'est facile de lire dedans avec les opérateuurs de flux >>
et std::getline
.
On peut aussi utiliser une chaîne de caractères comme un flux, grâce aux classes istringstream et ostringstream. Ainsi, la chaîne "123 45 54" est décomposée en trois entiers ainsi:
Ecrire les méthodes bool importPGM( std::istream & input )
et bool exportPGM( std::ostream & output, bool ascii_mode ) const
de la classe GrayLevelImage2D
, en utilisant les flux.
On pourra maintenant lire un fichier image "lena.pgm" ainsi:
On testera nos fonctions avec le mini-programme double-brightness.cpp
suivant, qui double la brillance d'une image:
N'oubliez pas de mettre à jour le Makefile
. Si vous l'exécutez sur l'image "lena.pgm"
, l'affichage donne:
A l'inverse, lorsque vous lisez des données brutes comme des suites d'octets, vous voulez que les espaces soient bien l'octet 32 et non des séparateurs, pareil pour les retours chariots (13). Pour être sûr d'avoir ce comportement, on écrit la commande suivante dans le flux d'entrée:
N'oubliez pas des les utiliser à bon escient dans la fonction bool importPGM( std::istream & input )
.
Le filtrage médian est un algorithme très simple d'élimination de bruit dans une image. Il est très pertinent pour ce que l'on appelle le bruit impulsionnel, causé par des capteurs défectueux, ce qui sature ou désature complètement la valeur de certains pixels (ils deviennent tout blanc ou tout noir).
Son principe est le suivant. On se donne un voisinage autour de chaque pixel (par exemple un voisinage 3x3). On met toutes les valeurs de ces pixels dans un tableau (ici 9 valeurs). On remplace la valeur du pixel par la valeur médiane des valeurs du tableau (On peut par exemple trier le tableau et prendre la 5ème valeur).
Implémenter un algorithme de filtrage médian sous forme de commande en-ligne filtrage-median
similaire à double-brightness
. On pourra donner en plus un paramètre entier k, qui indique la taille du voisinage (2k+1 x 2k+1) autour de chaque point.
pourcentage de pixels "bruités" | image source | taille voisinage | résultat médian |
10% | 3x3 | ||
50% | 7x7 | ||
90% | 31x31 |
vector
), n'oubliez pas d'utiliser la fonction std::sort
définie dans le header <algorithm>
. Par exemple, on peut écrire:GrayLevelImage2D::at
). Attention aussi aux pixels proches du bord de l'image, leur voisinage est alors plus limité.L'histogramme d'une image \(I\) en 256 niveaux de gris est une fonction \(h_I\) qui associe à chaque niveau de gris i la proportion de pixels qui ont exactement ce niveau de gris:
\[ h_I: \{0,\ldots,255 \} \rightarrow \lbrack 0,1 \rbrack, \quad i \mapsto h_I( i ) = \frac{\#\{(x,y), I(x,y)=i \}}{\#\{(x,y)\}} \]
où # désigne le nombre d'éléments d'un ensemble et les (x,y) sont les pixels de l'image. En un sens, c'est la probabilité qu'un pixel pris au hasard ait un niveau de gris donné. Un autre outil important est l'histogramme cummulé \(H_I\) d'une image \(I\). Il s'agit simplement d'associer à chaque niveau de gris i la proportion de pixels qui ont ce niveau de gris ou moins.
\[ H_I: \{0,\ldots,255 \} \rightarrow \lbrack 0,1 \rbrack, \quad i \mapsto H_I( i ) = \frac{\#\{(x,y), I(x,y) \le i \}}{\#\{(x,y)\}} \]
On note facilement que \( H_I(g) = \sum_{i=0}^g h_I(i) \).
Un histogramme est dit bien balancé si à peu près tous les niveaux de gris sont équiprobables. En général, une bonne photo a un histogramme bien balancé. Une photo sous-exposée a tendance à avoir un histogramme décalé vers les niveaux de gris sombres, tandis qu'un photo sur-exposée a tendance à avoir un histogramme décalé vers les niveaux de gris clairs.
Or, on peut corriger automatiquement une image pour que son histogramme soit bien balancé. Cette opération s'appelle égalisation d'histogramme. Comment est-ce possible ? Il suffit de trouver une fonction \( f: \{0,\ldots,255\} \rightarrow \{0,\ldots,255\} \) qui transforme les niveaux de gris de façon à éclaircir ou assombrir au besoin l'image. Quelle est la bonne fonction f ? On la trouve en remarquant que l'histogramme cumulé d'une image bien balancée est la simplement la fonction \( i \mapsto i/255 \). On écrit donc:
\[ \frac{i}{255} = H_{f \circ I}(i) \quad = \frac{\#\{(x,y), f \circ I(x,y) \le i \}}{\#\{(x,y)\}} \quad = \frac{\#\{(x,y), I(x,y) \le f^{-1}(i) \}}{\#\{(x,y)\}} \quad = H_{I}( f^{-1}(i)) \]
En posant \( j=f^{-1}(i) \), il vient \( i = f(j) \), et l'équation précédente s'écrit:
\[ \frac{f(j)}{255} = H_{I}( j ) \]
La fonction d'égalisation f est donc tout simplement :
\[ f : j \mapsto f(j) = 255 \times H_{I}( j ) \]
Ecrivez une classe Histogramme
qui contiendra deux tableaux de 256 entrées double, l'un pour \(h_I\), l'autre pour \(H_I\). Cette classe aura une méthode void init( GrayLevelImage2D & img )
, qui parcourera l'image pour calculer son histogramme et son histogramme cummulé.
Ecrivez alors la méthode int egalisation( int j ) const
dans la classe Histogramme
, qui est simplement la fonction f ci-dessus. Il ne vaut reste plus qu'à faire le programme egalise.cpp
qui utilise cette fonction d'égalisation sur tous les pixels de l'image. Sur l'image lena.pgm
(légèrement sous-exposée) cela donne:
NB: On pourra regarder avec gimp
l'histogramme des images (menu Couleurs > Niveaux).
image source | image égalisée |
Une autre façon de traiter les images est de corriger les valeurs d'un pixel en fonction de la valeur de ses voisins et de lui-même. En générale la transformation ne dépend pas de la position du pixel dans l'image. On parle alors de convolution spatiale. Par exemple, si on suppose qu'on ne regarde que la valeur des 8 voisins plus de soi-même, on représente le filtre de convolution par une matrice 3x3:
\[ A := \begin{array}{|c|c|c|} \hline a_{-1,-1} & a_{0,-1} & a_{1,-1} \\ \hline a_{-1,0} & a_{0,0} & a_{1,0} \\ \hline a_{-1,1} & a_{0,1} & a_{1,1} \\ \hline \end{array}\]
La valeur du pixel \( p(x,y) \) est calculée en prenant les valeurs des pixels autour multipliées par le poids correspondant dans la matrice \(A\). Autrement dit:
\[ p(x,y) := a_{-1,-1} p(x-1,y-1) + a_{0,-1} p(x,y-1) + a_{1,-1} p(x+1,y-1) + \cdots + a_{1,1} p(x+1,y+1) \]
Pour implémenter un filtre de convolution, il suffit donc juste de faire le calcul précédent pour chaque pixel.
Ci-dessous, quelques exemples de filtre "classiques":
\[ M :=\begin{array}{|c|c|c|}\hline 1/9 & 1/9 & 1/9 \\ \hline 1/9 & 1/9 & 1/9 \\ \hline 1/9 & 1/9 & 1/9 \\ \hline \end{array} \qquad L :=\begin{array}{|c|c|c|}\hline 0 & -1/4 & 0 \\ \hline -1/4 & 1 & -1/4 \\ \hline 0 & -1/4 & 0 \\ \hline \end{array} \]
Le filtre M moyenne les valeurs autour de chaque pixel et rend l'image un peu plus floue, tout en éliminant des bruits dans l'image. Le filtre L, dit "Laplacien", produit une image avec des valeurs positives ou négatives. Il détecte en fait les contours de l'image. Il vaut 0 là où l'image est homogène (plus précisément là où l'image est un aplat linéaire), et est différent de 0 là où il y a des fortes variations.
Pour rehausser les contrastes, c'est-à-dire rendre l'image plus nette, un moyen est d'additionner à l'image ses propres contours (ou un coefficient fois les contours). On fabrique donc le filtre \( R_\alpha \) en additionnant au filtre identité Id un coefficient \( \alpha \) fois la matrice laplacien L. Le filtre identité vaut simplement 1 au milieu et 0 ailleurs. On obtient donc:
\[ R_\alpha := \begin{array}{|c|c|c|}\hline 0 & -\alpha/4 & 0 \\ \hline -\alpha/4 & 1+\alpha & -\alpha/4 \\ \hline 0 & -\alpha/4 & 0 \\ \hline \end{array} \]
Ci-dessous quelques exemples. Vous pourrez tester plusieurs \( \alpha \).
image source | image floutée par M | image plus nette par \( R_\alpha \) |
Ecrivez donc un programme qui permet à l'utilisateur de rendre une image plus nette, en fonction d'un coefficient \( \alpha \) donné en paramètre par l'utilisateur.
GrayLevelImage2D::at
).Mais pourquoi voudrait-on abîmer les images ? Une raison académique: pour tester ensuite les algorithmes de filtrage de bruit et de restauration. Une autre raison est parfois esthétique, par exemple pour donner l'illusion qu'une image fabriquée par ordinateur est une vraie photo. Le code ci-dessous vous montre comment on a généré le bruit impulsionnel ci-dessus.
Il est plus réaliste d'appliquer un bruit Gaussien sur les images, c'est-à-dire une perturbation de la valeur de gris par un écart qui suit une loi normale (ou Gaussienne). La méthode de Box-Muller est la plus simple pour le faire. Elle créé deux valeurs aléatoires qui suivent une loi normale à partir de deux valeurs qui suivent une loi uniforme (genre rand01()
).
Ecrivez donc la commande bruit-gaussien.cpp
en modifiant le fichier bruit-impulsionnel.cpp
ci-dessus.