bugün
- cansever15
- türkiye pazar günü yeni bir sabaha uyanacak5
- futbol24
- victor osimhen6
- cehennem3
- şort giyen genç kıza saldıran yaşlı kadın31
- sabah kahvesi4
- almanya10
- vfb stuttgart7
- italya7
- enflasyon hedefinin tutmaması2
- bir daha doğmayacak olmak3
- çirkef galatasaray3
- fc internazionale milano6
- borussia dortmund5
- fait bey dönsün kampanyası3
- ac milan5
- galatasaray13
- muz4
- kadınlar neden kötü araba kullanır sorunsalı14
- ingiltere5
- chelsea fc4
- galatasaray neden transfer yapamıyor16
- cedidacer ne iş yapıyor2
- yorgun mermi19
- yecüc ile mecüc5
- bayern münih4
- yazarların uyuyamama sebebi2
- şeva mitzvot2
- etek giyen erkek10
- sözlük yazarlarını evlendirmek12
- behlül ün bihter den ayrılma nedenleri6
- sözlük yazarlarının tatlıları14
- en son ne aldınız2
- insan doğru olanı seçerek mutlu olabilir mi6
- türk mutfağının en uyduruk kaydırık yemeği7
- sözlük tipsizlerinin fotoğrafları12
- gocu'nun solak olması4
- dünyanın tersine dönmesi5
- tavuk sevmemek5
- arsenal fc3
- devalüasyon yakın mı9
- liverpool fc2
- sürekli dizi6
- günlük tutan erkek9
- yemek yapmayı bilmeyen kadın8
- meltem mi daha güzel gönül mü sorunsalı6
- kadınların erkeklerde çok fazla kriter araması8
- sevgilisinin regl gunlerini hesaplayan erkek8
- domdomusa3
Bildiğimiz gibi hayat zaman üzerine kurulmuştur. Bunun için saate ihtiyacımız vardır. Analog saat deyip geçmeyelim. Analog saatin büyük bir önemi vardır. En basit örnek; saati öğrenmemizde rolü büyüktür. Teknolojinin bile eskitemediği analog saat hala günümüzde kullanılmaktadır. Ayrıca, dijital saatlere inat evimizin köşesinde ve kolumuzda güzel bir aksesuardır.
görsel
Last time: 22:38:33 (12-hour format)
bu programı yapana kadar birçok hata aldım. önce 12 lik saat dilimleriyle, 24 dilimlik saat dilimlerini 1 e 1 eşleştiren bir fonksiyon yaratmam gerekti. ardından program çalışmasa bile, saat verilerini bir yerden almam gerekiyordu. önce istanbul bazlı lokal saati seçtim, fakat bu internet kopmalarında büyük kafa karışıklığı yaratabileceği için, bilgisayar kapalı olsa bile, tüm bileşenler arasında eşzamanlılığı sağlayan bios saatini referans aldım chrono kütüphanesiyle. her bir saati, 360 derecelik daireyi 12 ye bölüp 30 derecelik açılarla yerleştirdiğimde (12 yi 0 dereceden başlatarak, 0 derece daireyi dikey olarak ortadan ikiye böldüğünüzde sol yarım kürede kalan tepe noktasıdır ) kusursuz bir analog saate kavuşmuş oldum.
1 saat: 1
2 saat: 2
3 saat: 3
4 saat: 4
5 saat: 5
6 saat: 6
7 saat: 7
8 saat: 8
9 saat: 9
10 saat: 10
11 saat: 11
12 saat: 12 (Öğle)
13 saat: 1
14 saat: 2
15 saat: 3
16 saat: 4
17 saat: 5
18 saat: 6
19 saat: 7
20 saat: 8
21 saat: 9
22 saat: 10
23 saat: 11
Son saat: 12:59:24 (12 saat formatında)
#include <SFML/Graphics.hpp> // SFML Grafik kütüphanesini içe aktarır
#include <SFML/System.hpp> // SFML Sistem işlevlerini içe aktarır
#include <iostream> // Giriş/Çıkış akışları için standart kütüphane
#include <cmath> // Matematiksel fonksiyonlar için kütüphane
#include <chrono> // Zaman işlemleri için kütüphane
#include <ctime> // C zaman kütüphanesi
// Saatin elini çizen fonksiyon
void drawClockHand(sf::RenderWindow &window, float angle, float length, sf::Color color) {
sf::RectangleShape hand(sf::Vector2f(length, 5)); // El şekli için bir dikdörtgen oluştur
hand.setFillColor(color); // Elin rengini ayarla
hand.setOrigin(0, 2.5f); // Orijini elin sol tarafına ayarla
hand.setRotation(angle); // Belirtilen açıya döndür
hand.setPosition(400, 300); // Saati merkezi noktaya yerleştir
window.draw(hand); // Eli çiz
}
// Saatin yüzünü çizen fonksiyon
void drawClockFace(sf::RenderWindow &window, sf::Font &font) {
sf::CircleShape clockFace(250); // Saat yüzü için bir daire oluştur
clockFace.setFillColor(sf::Color::Transparent); // Dolu renk olarak saydam ayarla
clockFace.setOutlineThickness(5); // Kenar kalınlığını ayarla
clockFace.setOutlineColor(sf::Color::Black); // Kenar rengini siyah ayarla
clockFace.setPosition(150, 50); // Saat yüzünün konumu
window.draw(clockFace); // Saat yüzünü çiz
// Sayıları ve aralarındaki çizgileri çiz
for (int i = 0; i < 12; ++i) { // 1'den 12'ye kadar döngü
float angle = 90 - (i * 30); // Sayının açısını hesapla
float rad = angle * 3.14f / 180; // Dereceleri radyana dönüştür
// Sayı için konumu hesapla
float x = 400 + 200 * cos(rad); // Açıya göre X konumu
float y = 300 - 200 * sin(rad); // Açıya göre Y konumu
// Sayı metni oluştur
sf::Text number(std::to_string(i == 0 ? 12 : i), font, 24); // 0 için 12 kullan
number.setFillColor(sf::Color::Black); // Metin rengini ayarla
number.setPosition(x - 10, y - 10); // Metni merkezle
window.draw(number); // Sayıyı çiz
// Sayılar arasındaki çizgileri çiz
sf::Vertex line[] = {
sf::Vertex(sf::Vector2f(400, 300)), // Saatin merkezi
sf::Vertex(sf::Vector2f(400 + 220 * cos(rad), 300 - 220 * sin(rad))) // Dış çizgi
};
window.draw(line, 2, sf::Lines); // Çizgiyi çiz
}
}
int main() {
// Pencereyi oluştur
sf::RenderWindow window(sf::VideoMode(800, 600), "Analog Saat"); // 800x600 boyutunda pencere
// Yazı tipini yükle
sf::Font font;
if (!font.loadFromFile("arial.ttf")) { // Yazı tipi dosyasının erişilebilir olduğundan emin ol
std::cerr << "Error loading font!" << std::endl; // Hata mesajı yazdır
return 1; // Yazı tipi yükleme başarısızsa çık
}
// Geçerli sistem zamanını al
auto now = std::chrono::system_clock::now(); // Geçerli zamanı al
std::time_t now_c = std::chrono::system_clock::to_time_t(now); // time_t'ye dönüştür
std::tm *currentTime = std::localtime(&now_c); // Yerel zaman yapısına dönüştür
// Sistem zamanından zaman değişkenlerini başlat
int hour = currentTime->tm_hour; // Saat
int minute = currentTime->tm_min; // Dakika
int second = currentTime->tm_sec; // Saniye
// Saat döngüsünü başlat
while (window.isOpen()) { // Pencere açık olduğu sürece
sf::Event event;
while (window.pollEvent(event)) { // Olayları kontrol et
if (event.type == sf::Event::Closed)
window.close(); // Kapatma olayı olduğunda pencereyi kapat
}
// Zamanı güncelle (saniyeleri artır)
second++; // Saniyeyi bir artır
if (second >= 60) { // Eğer saniye 60 veya daha fazlaysa
second = 0; // Saniyeyi sıfırla
minute++; // Dakikayı bir artır
if (minute >= 60) { // Eğer dakika 60 veya daha fazlaysa
minute = 0; // Dakikayı sıfırla
hour++; // Saati bir artır
if (hour >= 24) { // Eğer saat 24 veya daha fazlaysa
hour = 0; // Saati sıfırla
}
}
}
// Açıları dönüştür
float hourAngle = (hour % 12) * 30 + (minute / 60.0f) * 30; // Her saat 30 derece
float minuteAngle = minute * 6; // Her dakika 6 derece
float secondAngle = second * 6; // Her saniye 6 derece
// Pencereyi temizle
window.clear(sf::Color::White); // Pencere arka planını beyazla temizle
// Saat yüzünü çiz
drawClockFace(window, font); // Saat yüzünü çizme fonksiyonunu çağır
// Saat, dakika ve saniye elini çiz
drawClockHand(window, hourAngle - 90, 100, sf::Color::Black); // Saat eli (90 derece döndür)
drawClockHand(window, minuteAngle - 90, 150, sf::Color::Blue); // Dakika eli (90 derece döndür)
drawClockHand(window, secondAngle - 90, 180, sf::Color::Red); // Saniye eli (90 derece döndür)
// Çizimi güncelle
window.display(); // Çizilen içeriği göster
// Saniye elinin güncellenmesi için bir gecikme ekle
sf::sleep(sf::seconds(1)); // 1 saniye bekle
}
// Uygulama kapatıldığında son zamanı terminale yazdır
std::cout << "Last time: " << (hour == 0 ? 12 : hour) << ":" // Son saati yazdır
<< (minute < 10 ? "0" : "") << minute << ":" // Dakikayı yazdır (10'dan küçükse başına 0 ekle)
<< (second < 10 ? "0" : "") << second << " (12-hour format)" << std::endl; // Saniyeyi yazdır (10'dan küçükse başına 0 ekle)
return 0; // Programı başarıyla kapat
}
Last time: 22:38:33 (12-hour format)
bu programı yapana kadar birçok hata aldım. önce 12 lik saat dilimleriyle, 24 dilimlik saat dilimlerini 1 e 1 eşleştiren bir fonksiyon yaratmam gerekti. ardından program çalışmasa bile, saat verilerini bir yerden almam gerekiyordu. önce istanbul bazlı lokal saati seçtim, fakat bu internet kopmalarında büyük kafa karışıklığı yaratabileceği için, bilgisayar kapalı olsa bile, tüm bileşenler arasında eşzamanlılığı sağlayan bios saatini referans aldım chrono kütüphanesiyle. her bir saati, 360 derecelik daireyi 12 ye bölüp 30 derecelik açılarla yerleştirdiğimde (12 yi 0 dereceden başlatarak, 0 derece daireyi dikey olarak ortadan ikiye böldüğünüzde sol yarım kürede kalan tepe noktasıdır ) kusursuz bir analog saate kavuşmuş oldum.
1 saat: 1
2 saat: 2
3 saat: 3
4 saat: 4
5 saat: 5
6 saat: 6
7 saat: 7
8 saat: 8
9 saat: 9
10 saat: 10
11 saat: 11
12 saat: 12 (Öğle)
13 saat: 1
14 saat: 2
15 saat: 3
16 saat: 4
17 saat: 5
18 saat: 6
19 saat: 7
20 saat: 8
21 saat: 9
22 saat: 10
23 saat: 11
Son saat: 12:59:24 (12 saat formatında)
#include <SFML/Graphics.hpp> // SFML Grafik kütüphanesini içe aktarır
#include <SFML/System.hpp> // SFML Sistem işlevlerini içe aktarır
#include <iostream> // Giriş/Çıkış akışları için standart kütüphane
#include <cmath> // Matematiksel fonksiyonlar için kütüphane
#include <chrono> // Zaman işlemleri için kütüphane
#include <ctime> // C zaman kütüphanesi
// Saatin elini çizen fonksiyon
void drawClockHand(sf::RenderWindow &window, float angle, float length, sf::Color color) {
sf::RectangleShape hand(sf::Vector2f(length, 5)); // El şekli için bir dikdörtgen oluştur
hand.setFillColor(color); // Elin rengini ayarla
hand.setOrigin(0, 2.5f); // Orijini elin sol tarafına ayarla
hand.setRotation(angle); // Belirtilen açıya döndür
hand.setPosition(400, 300); // Saati merkezi noktaya yerleştir
window.draw(hand); // Eli çiz
}
// Saatin yüzünü çizen fonksiyon
void drawClockFace(sf::RenderWindow &window, sf::Font &font) {
sf::CircleShape clockFace(250); // Saat yüzü için bir daire oluştur
clockFace.setFillColor(sf::Color::Transparent); // Dolu renk olarak saydam ayarla
clockFace.setOutlineThickness(5); // Kenar kalınlığını ayarla
clockFace.setOutlineColor(sf::Color::Black); // Kenar rengini siyah ayarla
clockFace.setPosition(150, 50); // Saat yüzünün konumu
window.draw(clockFace); // Saat yüzünü çiz
// Sayıları ve aralarındaki çizgileri çiz
for (int i = 0; i < 12; ++i) { // 1'den 12'ye kadar döngü
float angle = 90 - (i * 30); // Sayının açısını hesapla
float rad = angle * 3.14f / 180; // Dereceleri radyana dönüştür
// Sayı için konumu hesapla
float x = 400 + 200 * cos(rad); // Açıya göre X konumu
float y = 300 - 200 * sin(rad); // Açıya göre Y konumu
// Sayı metni oluştur
sf::Text number(std::to_string(i == 0 ? 12 : i), font, 24); // 0 için 12 kullan
number.setFillColor(sf::Color::Black); // Metin rengini ayarla
number.setPosition(x - 10, y - 10); // Metni merkezle
window.draw(number); // Sayıyı çiz
// Sayılar arasındaki çizgileri çiz
sf::Vertex line[] = {
sf::Vertex(sf::Vector2f(400, 300)), // Saatin merkezi
sf::Vertex(sf::Vector2f(400 + 220 * cos(rad), 300 - 220 * sin(rad))) // Dış çizgi
};
window.draw(line, 2, sf::Lines); // Çizgiyi çiz
}
}
int main() {
// Pencereyi oluştur
sf::RenderWindow window(sf::VideoMode(800, 600), "Analog Saat"); // 800x600 boyutunda pencere
// Yazı tipini yükle
sf::Font font;
if (!font.loadFromFile("arial.ttf")) { // Yazı tipi dosyasının erişilebilir olduğundan emin ol
std::cerr << "Error loading font!" << std::endl; // Hata mesajı yazdır
return 1; // Yazı tipi yükleme başarısızsa çık
}
// Geçerli sistem zamanını al
auto now = std::chrono::system_clock::now(); // Geçerli zamanı al
std::time_t now_c = std::chrono::system_clock::to_time_t(now); // time_t'ye dönüştür
std::tm *currentTime = std::localtime(&now_c); // Yerel zaman yapısına dönüştür
// Sistem zamanından zaman değişkenlerini başlat
int hour = currentTime->tm_hour; // Saat
int minute = currentTime->tm_min; // Dakika
int second = currentTime->tm_sec; // Saniye
// Saat döngüsünü başlat
while (window.isOpen()) { // Pencere açık olduğu sürece
sf::Event event;
while (window.pollEvent(event)) { // Olayları kontrol et
if (event.type == sf::Event::Closed)
window.close(); // Kapatma olayı olduğunda pencereyi kapat
}
// Zamanı güncelle (saniyeleri artır)
second++; // Saniyeyi bir artır
if (second >= 60) { // Eğer saniye 60 veya daha fazlaysa
second = 0; // Saniyeyi sıfırla
minute++; // Dakikayı bir artır
if (minute >= 60) { // Eğer dakika 60 veya daha fazlaysa
minute = 0; // Dakikayı sıfırla
hour++; // Saati bir artır
if (hour >= 24) { // Eğer saat 24 veya daha fazlaysa
hour = 0; // Saati sıfırla
}
}
}
// Açıları dönüştür
float hourAngle = (hour % 12) * 30 + (minute / 60.0f) * 30; // Her saat 30 derece
float minuteAngle = minute * 6; // Her dakika 6 derece
float secondAngle = second * 6; // Her saniye 6 derece
// Pencereyi temizle
window.clear(sf::Color::White); // Pencere arka planını beyazla temizle
// Saat yüzünü çiz
drawClockFace(window, font); // Saat yüzünü çizme fonksiyonunu çağır
// Saat, dakika ve saniye elini çiz
drawClockHand(window, hourAngle - 90, 100, sf::Color::Black); // Saat eli (90 derece döndür)
drawClockHand(window, minuteAngle - 90, 150, sf::Color::Blue); // Dakika eli (90 derece döndür)
drawClockHand(window, secondAngle - 90, 180, sf::Color::Red); // Saniye eli (90 derece döndür)
// Çizimi güncelle
window.display(); // Çizilen içeriği göster
// Saniye elinin güncellenmesi için bir gecikme ekle
sf::sleep(sf::seconds(1)); // 1 saniye bekle
}
// Uygulama kapatıldığında son zamanı terminale yazdır
std::cout << "Last time: " << (hour == 0 ? 12 : hour) << ":" // Son saati yazdır
<< (minute < 10 ? "0" : "") << minute << ":" // Dakikayı yazdır (10'dan küçükse başına 0 ekle)
<< (second < 10 ? "0" : "") << second << " (12-hour format)" << std::endl; // Saniyeyi yazdır (10'dan küçükse başına 0 ekle)
return 0; // Programı başarıyla kapat
}
Gündemdeki Haberler
Güncel Önemli Başlıklar