import SwiftUI
class Point {
var x: Double
var y: Double
init(x: Double, y: Double) {
self.x = x
self.y = y
}
}
class MyVector {
var startPoint: Point
var endPoint: Point
init(startPoint: Point, endPoint: Point) {
self.startPoint = startPoint
self.endPoint = endPoint
}
static func + (lhs: MyVector, rhs: MyVector) -> MyVector {
let newEndPoint = Point(x: lhs.endPoint.x + rhs.endPoint.x - lhs.startPoint.x,
y: lhs.endPoint.y + rhs.endPoint.y - lhs.startPoint.y)
return MyVector(startPoint: lhs.startPoint, endPoint: newEndPoint)
}
static func - (lhs: MyVector, rhs: MyVector) -> MyVector {
let newEndPoint = Point(x: lhs.endPoint.x - rhs.endPoint.x - lhs.startPoint.x,
y: lhs.endPoint.y - rhs.endPoint.y - lhs.startPoint.y)
return MyVector(startPoint: lhs.startPoint, endPoint: newEndPoint)
}
func magnitude() -> Double {
let dx = endPoint.x - startPoint.x
let dy = endPoint.y - startPoint.y
return sqrt(dx * dx + dy * dy)
}
static func * (lhs: MyVector, rhs: MyVector) -> Double {
let dx1 = lhs.endPoint.x - lhs.startPoint.x
let dy1 = lhs.endPoint.y - lhs.startPoint.y
let dx2 = rhs.endPoint.x - rhs.startPoint.x
let dy2 = rhs.endPoint.y - rhs.startPoint.y
return dx1 * dx2 + dy1 * dy2
}
}
struct ContentView: View {
@State private var inputText = ""
@State private var resultText = ""
var body: some View {
VStack {
TextField("Enter vector (e.g., (1,2)+(3,4))", text: $inputText)
.padding()
.textFieldStyle(RoundedBorderTextFieldStyle())
Button("Calculate") {
resultText = calculateVector()
}
.padding()
Text("Result: \(resultText)")
.padding()
}
.padding()
}
func calculateVector() -> String {
let vectors = inputText.components(separatedBy: CharacterSet(charactersIn: "+-*/"))
if vectors.count == 2, let vector1 = parseVector(vectors[0]), let vector2 = parseVector(vectors[1]) {
if inputText.contains("+") {
return (vector1 + vector2).description
} else if inputText.contains("-") {
return (vector1 - vector2).description
} else if inputText.contains("*") {
return "\(vector1 * vector2)"
} else {
return "\(vector1.magnitude())"
}
} else {
return "Invalid input"
}
}
func parseVector(_ vectorString: String) -> MyVector? {
let components = vectorString.components(separatedBy: CharacterSet(charactersIn: "(,)"))
if components.count == 5,
let x1 = Double(components[1]),
let y1 = Double(components[3]),
let x2 = Double(components[2]),
let y2 = Double(components[4]) {
return MyVector(startPoint: Point(x: x1, y: y1), endPoint: Point(x: x2, y: y2))
} else {
return nil
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
@main
struct VectorCalculatorApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}