#include <SFML/Graphics.hpp>
#include <iostream>
#include <cmath>
void drawDashedLine(sf::RenderWindow& window, sf::Vector2f start, sf::Vector2f end, sf::Color color, float dashLength = 10.f, float gapLength = 5.f) {
float dx = end.x - start.x;
float dy = end.y - start.y;
float length = std::sqrt(dx * dx + dy * dy);
float angle = std::atan2(dy, dx);
int numSegments = static_cast<int>(length / (dashLength + gapLength));
for (int i = 0; i < numSegments; ++i) {
sf::Vector2f segmentStart(start.x + (dashLength + gapLength) * i * std::cos(angle),
start.y + (dashLength + gapLength) * i * std::sin(angle));
sf::Vector2f segmentEnd(segmentStart.x + dashLength * std::cos(angle),
segmentStart.y + dashLength * std::sin(angle));
sf::Vertex line[] = {sf::Vertex(segmentStart, color), sf::Vertex(segmentEnd, color)};
window.draw(line, 2, sf::Lines);
}
}
void drawText(sf::RenderWindow& window, const std::string& text, sf::Vector2f position, sf::Color color, int fontSize = 12) {
sf::Font font;
if (!font.loadFromFile("arial.ttf")) {
std::cerr << "Failed to load font" << std::endl;
return;
}
sf::Text txt(text, font, fontSize);
txt.setFillColor(color);
txt.setPosition(position);
window.draw(txt);
}
int main() {
sf::RenderWindow window(sf::VideoMode(800, 600), "地图效果展示");
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed) {
window.close();
}
}
window.clear(sf::Color::White);
drawDashedLine(window, sf::Vector2f(50, 50), sf::Vector2f(150, 150), sf::Color::Blue);
drawDashedLine(window, sf::Vector2f(180, 50), sf::Vector2f(280, 150), sf::Color::Blue);
drawDashedLine(window, sf::Vector2f(70, 70), sf::Vector2f(170, 170), sf::Color::Red);
drawDashedLine(window, sf::Vector2f(190, 70), sf::Vector2f(290, 170), sf::Color::Red);
drawText(window, "沂水县", sf::Vector2f(100, 80), sf::Color::Blue);
drawText(window, "蒙阴县", sf::Vector2f(70, 100), sf::Color::Blue);
window.display();
}
return 0;
}